Sub Macro1()
Dim be As Variant 'déclare la variable be (Boîte d'Entrée)
Dim r As Range 'déclare la variable r (Recherche)
Dim pa As String 'déclare la variable pa (Première Adresse)
Dim ma As Range 'déclare la variable ma (Matrice)
deb: 'étiquette
be = Application.InputBox("Tapez la valeur de la matrice.", "VALEUR", Type:=1) 'définit la boîte d'entré be
If be = False Then Exit Sub 'si bouton "Annuler", sort de la procédure
Set r = Columns(1).Find(be, , xlValues, xlWhole) 'définit la recherche r
'si la valeur éditée n'existe pas, si "Oui" au message retour à la boîte d'entrée via l'étiquette "deb", si "Non" au message, sort de la procédure
If r Is Nothing Then If MsgBox("La valeur n'exite pas ! Voulez-vous recommencer ?", vbYesNo) = vbNo Then Exit Sub Else GoTo deb
Set ma = Range("A1") 'initialise la plage de la matrice ma
If Not r Is Nothing Then 'condition : si la valeur éditée existe
pa = r.Address 'définit l'adresse de la première occurrence trouvé
Do 'exécute
'si la plage de la matrice ma ne contient qu'une seule cellule, redéfinit la plage de la matrice ma comme la ligne de l'occurrence trouvée,
'sinon rajoute la ligne de l'occurrence trouvé à la plage ma déjà existante
Set ma = IIf(ma.Cells.Count = 1, r.Resize(1, 3), Application.Union(ma, r.Resize(1, 3)))
Set r = Columns(1).FindNext(r) 'redéfinit la recherche r (occurrence suivante
Loop While Not r Is Nothing And r.Address <> pa 'boucle tant qu'il existe des occurrences ailleurs qu'en pa
End If 'fin de la condition
ma.Select 'sélectionne la plage de la matrice ma (cette ligne n'est pas nécessaire et peut être effacée)
End Sub