Excel chercher une valeur dans une colonne [Résolu]

cs_jordinette 134 Messages postés mercredi 2 mars 2005Date d'inscription 5 avril 2007 Dernière intervention - 7 mars 2005 à 08:35 - Dernière réponse : Pierre_faucon 96 Messages postés jeudi 10 juin 2004Date d'inscription 22 mai 2007 Dernière intervention
- 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
Afficher la suite 

2 réponses

mrdep1978 402 Messages postés jeudi 25 novembre 2004Date d'inscription 7 juin 2009 Dernière intervention - 7 mars 2005 à 11:14
+3
Utile
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
Cette réponse vous a-t-elle aidé ?  
Pierre_faucon 96 Messages postés jeudi 10 juin 2004Date d'inscription 22 mai 2007 Dernière intervention - 7 mars 2005 à 13:10
0
Utile
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

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.