Résolu Appliquer une macro sur plusieurs lignes indépendament

Romss88

Nouveau membre
Salut,

Je viens de créer un fichier de suivi des ventes pour une équipe de vendeur.
Ce fichier servira a suivre les ventes en cours, réussi, perdu...
Pour ce, j'ai donc 4 bouton en bout de ligne :
- "En cours"
- "Vendu"
- "Perdu"
- "RAZ"

C'est 4 boutons sont liées a 4 macros différentes qui déplace les cellules contenant les informations et supprime les données dans les cellules nécessaire.

Je voudrais maintenant que ces boutons soit disponibles sur toutes les lignes (ou au mois 200 lignes) et agissent uniquement sur la ligne sur lequel le bouton se trouve...

Voici mes macros :
Code:
Sub Encours()
'
' Encours Macro

If IsEmpty(Range("T12")) Then
    Range("A12:D12").Select
    Selection.Copy
    Range("E12").Select
    ActiveSheet.Paste
    Range("I12:P12").Select
    Application.CutCopyMode = False
    Selection.ClearContents
    Range("T12").Select
    ActiveCell.FormulaR1C1 = "1"
    Range("U12").ClearContents
    Range("V12").ClearContents
    ActiveCell.FormulaR1C1 = "1"
    Range("E12").Select
  Else
  MsgBox ("Tu a deja cliqué sur ce bouton !!")
End If
End Sub
Sub raz()
'
' raz Macro
'

'
    Range("E12:P12").Select
    Range("P12").Activate
    Selection.ClearContents
    Range("T12").ClearContents
    Range("U12").ClearContents
    Range("V12").ClearContents
    Range("A12").Select
End Sub
Sub Vendu()
'
' Vendu Macro
'
If IsEmpty(Range("U12")) Then
    Range("A12:D12").Select
    Selection.Copy
    Range("M12").Select
    ActiveSheet.Paste
    Range("E12:L12").Select
    Range("L12").Activate
    Application.CutCopyMode = False
    Selection.ClearContents
    Range("U12").Select
    ActiveCell.FormulaR1C1 = "1"
    Range("T12").Select
    Selection.ClearContents
    Range("V12").ClearContents
    Range("M12").Select
     Else
  MsgBox ("Tu a deja cliqué sur ce bouton !!")
End If
End Sub

Sub Perdu()
'
' Perdu Macro
'
If IsEmpty(Range("V12")) Then
    Range("A12:D12").Select
    Selection.Copy
    Range("I12").Select
    ActiveSheet.Paste
    Range("E12:H12").Select
    Application.CutCopyMode = False
    Selection.ClearContents
    Range("M12:P12").Select
    Selection.ClearContents
    Range("T12:U12").Select
    Selection.ClearContents
    Range("V12").Select
    ActiveCell.FormulaR1C1 = "1"
    Range("I12").Select
     Else
  MsgBox ("Tu a deja cliqué sur ce bouton !!")
End If
End Sub
Merci d'avance à tous,
J'ai essayé d'être le plus clair possible...je reste dispo si il manque des infos et essaye d'insérer le fichier excel cible au plus vite...

Merci encore, à très bientôt !
 

zeb

Modérateur
Salut

Merci de respecter le règlement. Toute pièce de code proposée doit être présentée entre les balises [code] et [/code].
 

Romss88

Nouveau membre
Pardon, voila qui est fait !
Et voici le liens du fichier que j'ai fait jusqu'ici.


Merci encore
 

zeb

Modérateur
Un bouton exécute une macro sans lui passer en paramètre la connaissance de savoir justement quel bouton a été cliqué.
Il te faut donc créer autant de macros que de boutons.
Pour ne pas tout répéter, tu peux écrire tes macros comme cela :
Code:
Sub btn12_Click
    ' le bouton de la ligne 12 a été cliqué
    Encours 12
End Sub

Sub Encours(ByVal numrow As Long)
    ....
End Sub
 

Romss88

Nouveau membre
Ok, merci beaucoup de ta réponse et surtout de ta réactivité !
Alors en fait j'ai trouvé en ajoutant la variable numéro de ligne comme suit (Exemple donée juste pour le bouton "En cours":
Code:
Sub Encours()
'
' Encours Macro
'
maLigne = ActiveSheet.Shapes(Application.Caller).TopLeftCell.Row
If IsEmpty(Cells(maLigne, "T")) Then
    Range(Cells(maLigne, "A"), Cells(maLigne, "D")).Select
    Selection.Copy
    Cells(maLigne, "E").Select
    ActiveSheet.Paste
    Range(Cells(maLigne, "I"), Cells(maLigne, "P")).Select
    Application.CutCopyMode = False
    Selection.ClearContents
    Cells(maLigne, "T").Select
    ActiveCell.FormulaR1C1 = "1"
    Cells(maLigne, "U").ClearContents
    Cells(maLigne, "V").ClearContents
    Cells(maLigne, "E").Select
  Else
  MsgBox ("Tu a deja cliqué sur ce bouton !!")
End If
End Sub

Je le met au cas ou quelqu'un à le même souci.

Merci milles fois pour ton aide et à très bientot.

Cordialement,
Romss
 

zeb

Modérateur
Meilleure réponse
>>> Application.Caller
Well done !
;)

--------------------------------------

Quelques critiques, puissent-elles être perçues comme constructives.

Evite ce genre de code :
Code:
truc.Select
Selection.machin
Ecris plutôt :
Code:
truc.machin
Exemple :
Code:
 Range(Cells(maLigne, "A"), Cells(maLigne, "D")).Copy

Evite de passer par le presse-papier. Il est réservé à l'usage de l'utilisateur, pas aux programmes.
Donc pas de Copy/Paste. A la place, va lire les secrets de Destination dans l'aide de Copy ;)

Il n'y a pas de parenthèse autour du message de MsgBox puisque tu utilises cette dernière comme procédure. N'hésite pas à rajouter une icône standard à tes boîtes de dialogue.

Et vire le s à mille et mets-le à "Tu a" :grrr:

Exemple qui reprend 99% de ton code :
Code:
Set Ligne = Shapes(Application.Caller).TopLeftCell.EntireRow
If IsEmpty(Ligne.Cells(20)) Then
    Intersect(Ligne, Range("A:D")).Copy Destination:=Ligne.Cells(5)
    Intersect(Ligne, Range("I:P,U:V")).ClearContents
    Ligne.Cells(20).Formula = "1"
    Ligne.Cells(5).Select
Else
    MsgBox "Tu as déjà cliqué sur ce bouton", vbExclamation
End If
 
Vous devez vous inscrire ou vous connecter pour répondre ici.
Derniers messages publiés
Statistiques globales
Discussions
730 122
Messages
6 717 687
Membres
1 586 355
Dernier membre
Chris7miles77
Partager cette page
Haut