Excel chercher une valeur dans une colonne

Résolu
cs_jordinette Messages postés 134 Date d'inscription mercredi 2 mars 2005 Statut Membre Dernière intervention 5 avril 2007 - 7 mars 2005 à 08:35
Pierre_faucon Messages postés 96 Date d'inscription jeudi 10 juin 2004 Statut Membre Dernière intervention 22 mai 2007 - 7 mars 2005 à 13:10
bonjour à tous!
Sous VBa pour Excel, comment faire pour passer dans chaque cellule de la colonne sélectionné afin de vérifier si la valeur X est dans la cellule?
je pensais utiliser ça:
ActiveCell.EntireColumn.Select 'selection de la première colonne

For Each Cells In Selection
'instructions à faire si X est dans la cellule
Next Cells
mé j'arrive pas à le faire marcher.
bonne matinée
Jordinette

2 réponses

mrdep1978 Messages postés 402 Date d'inscription jeudi 25 novembre 2004 Statut Membre Dernière intervention 7 juin 2009 7
7 mars 2005 à 11:14
Cells est une propriété (de types tableau de Range) associé à l'objet Range (ou Worksheet), ce n'est donc pas une variable.
Tu dois définir une variable de type Range pour faire le parcours de ta boucle :

Dim l_Cell as Range
ActiveCell.EntireColumn.Select
For Each l_Cell in Selection
If l_Cell.Value = "X" Then
Debug.print l_Cell.Address
End IF
next l_Cell

Le pb de cette solution, c'est que tu vas parcourir systématiquement toute la colonne (=65000 lignes).

Je te conseille donc de faire comme ceci :

Dim l_Cell As Range 'Cellule de parcours
Dim l_Range As Range 'Zone à parcourir
'UsedRange.Row : Premiere ligne utilisée de la feuille
'UsedRange.Rows.Count : Nb de lignes utilisées
'ActiveCell.Column : Numéro de colonne de la cellule active
Set l_Range = Range(Cells(UsedRange.Row, ActiveCell.Column), _
Cells(UsedRange.Row + UsedRange.Rows.Count - 1, ActiveCell.Column))
For Each l_Cell In l_Range
If l_Cell.Value = "X" Then
Debug.Print l_Cell.Address
End If
Next l_Cell
3
Pierre_faucon Messages postés 96 Date d'inscription jeudi 10 juin 2004 Statut Membre Dernière intervention 22 mai 2007
7 mars 2005 à 13:10
Bonjour Jordinette,

Voici une autre méthode qui utilise les méthodes Find et FindNext d'excel ( un peu comme la boite de dialogue. Dans la macro que je te propose, la correspondance est partielle (lookat:=xlpart), mais tu peux également demander une correspondance stricte (lookat:=xlwhole).

( Extrait de ma réponse de vendredi sur le même forum... )

Il faut mémoriser la première cellule correspondant à la recherche, de manière à comparer les adresses des cellules suivantes trouvées et de sortir de la boucle lorsque Excel revient sur la première cellule.

Il faut également, lors du FindNext, spécifier à Excel de chercher après la cellule trouvée...

Voici le code complet, à adapter selon tes besoins. Dans le cas présent, Excel colorie les cellules trouvées en rouge. Tu peux bien sûr adapter en renvoyant les adresses dans un tableau ou une collection, puis itérer sur le tableau ou la collection des adresses trouvées.

Sub Recherche()
Dim Premiere_Cellule_Trouvee As Range ' Sert à éviter une boucle sans fin
Dim Cellule_Suivante As Range ' Correspond à la cellule suivante trouvée
Set Premiere_Cellule_Trouvee = _
Range("a1:a10").Find(What:="elec", LookIn:=xlValues, LookAt:=xlPart)

' Si aucune correspondance, on sort de la procédure
If Premiere_Cellule_Trouvee Is Nothing Then Exit Sub

Set Cellule_Suivante = Premiere_Cellule_Trouvee
Do
Cellule_Suivante.Interior.Color = vbRed
Set Cellule_Suivante = Range("a1:a10").FindNext(after:=Cellule_Suivante)
' Si correspondance entre les cellules, on a bouclé et on sort
If Cellule_Suivante Is Nothing Then Exit Sub
If Cellule_Suivante.Address = Premiere_Cellule_Trouvee.Address Then Exit Sub
Loop
End Sub

Ok?

Pierre Fauconnier
0
Rejoignez-nous