1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37
| Sub RechercherEnBoucle()
'Tu crées le tableau des valeurs que tu vas chercher
Dim LeTableauDesDonnéesAchercher()
'Pour chaque valeur à tester, tu incrémentes un compteur
'compteur = compteur + 1
'Tu redimensionnes le tableau
'Redim Preserve LeTableauDesDonnéesAchercher(compteur)
'et tu lui affectes la valeur
LeTableauDesDonnéesAchercher(Compteur) = LaValeur
'Quand tu as toutes tes valeurs tu détermines la plage de la recherche
'No1èreLigne = ...
'NoDernièreLigne = ... 'je pense que tu as la syntaxe pour la retrouver
'NoColonne = ...
For i = 1 To Compteur
plage = Range(Cells(No1èreLigne, NoColonne), Cells(NoDernièreLigne, NoColonne)).Address
'Au départ, la plage couvre toutes les données de la colonne, ensuite, elle s'étendra
'de la ligne de la dernière occurence trouvée à NoDernièreLigne
With Worksheets(LaFeuille).Range(plage)
'Je cherche la première occurence AVANT de rentrer dans la boucle de recherche des données suivantes
Set C = .Find(LeTableauDesDonnéesAchercher(i), LookIn:=xlValues) 'là tu peux préciser valeur entière ou non
If Not C Is Nothing Then 'Si j'ai trouvé une donnée, j'entre dans la boucle
Do
Adresse = C.Address
'là, fais tes petites affaires avant de chercher l'occurence suivante (addition, pas addition...
NLig = C.Row + 1 'On note le No de ligne de la donnée trouvée
'... pour déterminer la plage de recherche suivante
plage = Range(Cells(NLig, NoColonne), Cells(NoDernièreLigne, NoColonne)).Address
Set C = .FindNext(C)
Loop While Not C Is Nothing And C.Address <> Adresse
'je sors de la boucle si je ne trouve plus rien ou...
'... si l'occurence trouvée est sur la dernière ligne de la plage...
'... (la plage ne couvrant alors qu'une ligne)
End If
End With
Set C = Nothing
Next i
End Sub |