Limiter l'action de ma macro à la ligne de ma cellule active
Bonjour à tous,
Alors voilà, je vais essayer d'être concis, je cherche désespérément depuis ce matin une solution à mon problème de débutant en VBA :
Ma colonne A et B est une liste d'outillages que nous avons en magasin (Reférence en A, nom de l'outillage en B)
Lorsqu'un outillage sort du magasin, je rentre manuellement dans la colonne C la raison pour laquelle il est sorti
J'ai 3 raisons possibles : a,b ou c
J'ai une macro qui incrémente un compteur pour chaque raison possible dans les colonnes D, E et F.
Elle fait donc +1 sur la colonne D quand je rentre la raison a, +1 en E pour la raison b et +1 en F quand je rentre la raison c.
Mon problème est que quand je rentre une raison pour un outillage donné, je souhaiterais que la macro ne s'applique que sur la ligne de cet outillage alors qu'elle incrémente le compteur de tous les outillages.
J'espère que vous pourrez m'aider voici mon code ci-dessous :
Sub Macro1()
Dim numero As Integer
numero = 1
While numero <= 200 (je n'aurai jamais plus de 200 outillages dans ma liste)
numero = numero + 1
If Cells(numero, 3) = "a" Then
Cells(numero, 4) = Cells(numero, 4) + 1 (incrémentation du compteur)
Else
End If
If Cells(numero, 3) = "b" Then
Cells(numero, 5) = Cells(numero, 5) + 1 (incrémentation du compteur)
Else
End If
If Cells(numero, 3) = "c" Then
Cells(numero, 6) = Cells(numero, 6) + 1 (incrémentation du compteur)
Else
End If
Wend
End Sub
Merci par avance et n'hésitez surtout pas si ce n'est pas assez clair
Gaëtan
Bonsoir,
en fait vous "scannez" toutes les lignes (variable numéro) donc forcément elles sont toutes modifiées !
il vous faut simplement connaître le numéro de la ligne modifiée et de ne faire les modifications que sur celle-ci
L'idéale serait de mettre votre macro sur la surveillance événementielle "change" de la feuille concernée :
Private Sub Worksheet_Change(ByVal Target As Range)
If Not Intersect(Target, Range("C1:C200")) Is Nothing Then
If Cells(Target.Row, 3) = "a" Then
Cells(Target.Row, 4) = Cells(numero, 4) + 1 '(incrémentation du compteur)
ElseIf Cells(Target.Row, 3) = "b" Then
Cells(Target.Row, 5) = Cells(numero, 5) + 1 '(incrémentation du compteur)
ElseIf Cells(Target.Row, 3) = "c" Then
Cells(Target.Row, 6) = Cells(numero, 6) + 1 '(incrémentation du compteur)
End If
End If
End Suboù Target = cellule modifiée et Target.Row = numéro de ligne de feuille Excel de la cellule modifiée
If Not Intersect(Target, Range("C1:C200")) Is Nothing Then
ici on teste si la cellule modifiée (Target) fait partie de la plage de cellule qui va de C1 à C200.
@ bientôt
LouReeD
Merci beaucoup LouReeD
Je vais surement paraitre stupide mais je galère depuis 30 minutes à executer cette macro. Je ne la vois pas dans "affichage/ macros"
Je ne comprend pas le début normalement mes macros commencent pas sub () macro1 et je l'execute en doublecliquant dessus dans macro
Merci d'avance
Bonjour,
en fait c'est relativement simple :
clic droit sur le nom de m'onglet de la feuille où vous voulez que la macro fonctionne;
sélectionnez "afficher le code";
La fenêtre qui s'ouvre est VBA;
Sur la partie droite coller le code du post un peu plus haut;
Voilà la surveillance événementielle sur l'action "change" est en place.
C'est une macro non visible par le menu affichage macro, elle est liée à ce qui se passe sur la feuille sur laquelle elle est copiée par le biais de VBA.
Maintenant sur cette feuille, dès qu'il y a un changement de détecter sur la colonne C alors la macro est lancée.
@ bientôt
LouReeD