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 Sub

où 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

Rechercher des sujets similaires à "limiter action macro ligne active"