Commentaires sur un code VBA
Bonjour
J'aimerais pouvoir adapter à mes propres besoins un code VBA qui m'a été donné avec un tableau d'exemple. Il répond bien à ce que je recherche, c'est à dire faire apparaître les lignes d'un tableau contenant la chaîne de caractères tapée dans la cellule C1.
Mais ce code m'a été donné sans commentaire et ma connaissance très très très primaire de VBA ne me permet pas de savoir ce qui se passe à chaque ligne d'écriture, et donc de pouvoir l'adapter sur mon propre fichier.
Je serais très reconnaissant à qui pourrait m'expliquer...
Voici le code :
Private Sub Worksheet_Change(ByVal Target As Range)
Dim C As Range, Plage As Range
If Target.Address = "$C$1" And Target.Count = 1 Then
Application.EnableEvents = False
[H7].Resize(65000).ClearContents
Set Plage = Range("B7", Cells(Rows.Count, 2).End(xlUp))
For Each C In Plage
If IsNumeric(Application.Match("*" & [C1].Value & "*", C.Offset(, 2).Resize(, 5), 0)) Then
C.Offset(, 6) = "X"
End If
Next C
Set Plage = Range("A6", Cells(Rows.Count, 1).End(xlUp)).Resize(, 8)
Plage.AutoFilter
Plage.AutoFilter 8, "X"
Application.EnableEvents = True
End If
End Sub
Merci
Bonjour,
voir commentaires dans le code
Private Sub Worksheet_Change(ByVal Target As Range) 'procédure qui se déclenche quand il y a un changement sur la feuille
Dim C As Range, Plage As Range 'définition des variables
If Target.Address = "$C$1" And Target.Count = 1 Then 'si le changement est dans la cellule A1 et qu'il n'y a qu'une seule cellule sélectionnée
Application.EnableEvents = False ' on empêche la prise en compte d'autres évènements
[H7].Resize(65000).ClearContents ' on vide la colonne H de h7 à H65006
Set Plage = Range("B7", Cells(Rows.Count, 2).End(xlUp)) ' on définit la plage de recherche de B7 à la dernière cellule non vide de la colonne B
For Each C In Plage ' on considère chaque cellule de cette plage
If IsNumeric(Application.Match("*" & [C1].Value & "*", C.Offset(, 2).Resize(, 5), 0)) Then 'on regarde si on trouve une partie du texte dans les cases qui suivent de D à H
C.Offset(, 6) = "X" 'si texte trouvé on met en X en colonne H
End If
Next C 'on prend la cellule suivante de la plage
Set Plage = Range("A6", Cells(Rows.Count, 1).End(xlUp)).Resize(, 8) 'on redéfinit la plage A6 à H dernière ligne utilisée
Plage.AutoFilter 'on supprime tous les filtres
Plage.AutoFilter 8, "X" 'on filtre les lignes de la plage qui ont en X en colonne 8 (=colonne H)
Application.EnableEvents = True 'on réarme la gestion des événements
End If
End SubMerci.
Ça m'a l'air absolument parfait.
Je devrais pouvoir adapter à mon fichier.
Bonne soirée