Rechercher la valeur d une cellule dans une colonne

Bonjour à tous,

Je ne suis pas très douée en VBA (pour l'instant ) et je cherche un moyen de rechercher la valeur d'une cellule dans d'autres colonnes de ma feuille "PDL". J'ai essayé un code avec FIND (dont je n'arrive pas à comprendre la syntaxe).

ça donne ceci :

Sub Recherchons()

    Dim c As Range
    Dim valrech As String
    Dim int_i As Integer

    With Sheets("PDL").Range("D3:D29")

        valrech = .Range("D2").Value

        For int_i = 3 To 29

            Set c = .Find(What:=valrech, LookIn:=xlValues, LookAt:=xlWhole, SearchOrder:=xlByColumns, SearchDirection:=xlNext, MatchCase:=False)

            If c Is Nothing Then
                MsgBox "vide"
                Else
                MsgBox "non_vide"
            End If

        Next int_i
    End With

End Sub

Malheureusement le code ne fonctionne pas correctement. Je souhaiterai que MsgBox me renvoie "non_vide" lorsque les contenus des cellules comparées sont identiques, mais ce n'est pas le cas.

Par la suite je souhaite récupérer les indices des lignes pour lesquelles MsgBox est non vide, mais je reste bloquée à cette étape .

Je vous remercie d'avance pour votre aide.

Bonjour,

Tu peux tester la modification suivante ...

Sub Recherchons()
    Dim c As Range
    Dim valrech As String
    Dim i As Integer

    valrech = Sheets("PDL").Range("D2").Value

    With Sheets("PDL").Range("D3:D29")
            Set c = .Find(What:=valrech, LookIn:=xlValues, LookAt:=xlWhole, SearchOrder:=xlByColumns, SearchDirection:=xlNext, MatchCase:=False)
            If c Is Nothing Then
                MsgBox "vide"
            Else
                MsgBox "non_vide"
            End If
    End With
End Sub

En espèrant que cela t'aide ...

Bonjour Kokko,

Bonjour le forum,

Bienvenue parmi nous!

Voici une manière, entre mille, adaptée à un petit nombre de données à scanner.

Private Sub Worksheet_SelectionChange(ByVal Target As Range)
'
If Not Intersect(Target, Range("D2")) Is Nothing Then
    For x = 3 To 29
        If [D2] = Cells(x, 4) Then ' X = ligne scannée, 4 = colonne 4 -> "D"
            sMsg = sMsg & [D2] & "  -  ligne  " & x & Chr(10)
        End If
    Next
    MsgBox sMsg
End If
'
End Sub

A+

12kokko.xlsm (14.16 Ko)

Merci pour ta réponse James007.

J'ai essayé avec ta modification, mais ça m'affiche "Erreur d'execution '9': L'indice n'appartient pas à la sélection.

Kokko a écrit :

Merci pour ta réponse James007.

J'ai essayé avec ta modification, mais ça m'affiche "Erreur d'execution '9': L'indice n'appartient pas à la sélection.

Re,

Je viens de tester la macro ... elle fonctionne ...

Il ne faut pas hésiter à poster ton fichier ... pour permettre un test 'grandeur nature' ...

Rien dit...

curulis57 a écrit :

Rien dit...

Salut curulis57

J'ai l'impression qu'il faut franchir les étapes graduellement ...

1. Lancer une macro standard ...

et un peu plus tard ...

2. Utiliser une macro évènementielle ...

Salut James007,

difficile de répondre... depuis mes premières lointaines lignes, je ne fais quasi que de l'événementiel

A+

Salut Curulis57 .. J'ai une question qui va peut être te sembler bête mais je n'arrive pas à lancer ta macro, j'ai ouvert ton fichier et tout après j'ai essayé le bouton "play" en vert là mais je n'ai rien qui s affiche parmi la liste des macro Il y'a quelque chose que je fais mal peut être. ??

Et j'essayais aussi de comprendre ton code , Pourquoi ByVal en paramètre ?

En Pj mon fichier.

10exemple2.xlsb (16.95 Ko)

Re,

Dommage que tu aies décidé de modifier la macro .. avant de la tester ...

Ci-joint ton fichier ... avec la macro corrigée ...

12exemple2.xlsb (17.17 Ko)
James007 a écrit :
Kokko a écrit :

Merci pour ta réponse James007.

J'ai essayé avec ta modification, mais ça m'affiche "Erreur d'execution '9': L'indice n'appartient pas à la sélection.

Re,

Je viens de tester la macro ... elle fonctionne ...

Il ne faut pas hésiter à poster ton fichier ... pour permettre un test 'grandeur nature' ...

J'ai refait le test et j'avoue que quelque chose a changé . But... j'ai toujours un problème. Je souhaiterai récupérer les indices des lignes pour lesquelles MsgBox est non vide.

De plus, lorsque je modifie les indices et les plages de recherche, les messages du MsgBox sont moins cohérents..

Je te rajoute le fichier en pj.

5exemple2.xlsb (16.95 Ko)

Re,

Malheureusement ... là comme ailleurs ... il faut procéder par étape ...

D'ailleurs tu peux relire ton propre Titre ...

1. ta première macro qui ne fonctionnait pas ... avait comme message 'Non Vide' ...et ne retournait pas le numéro de la ligne ...

2. ta macro initiale actuellement fonctionne ... puisque tu as compris la différence entre la cellule recherchée et la plage sur laquelle tu recherches la valeur de la cellule ...

3. Donc ... maintenant tu veux qu'à la place du Message la macro te retourne le numéro de la ligne ...

Est-ce-que ce résumé est fidèle à la situation ...???

Salut tous,

je suis très mauvais prof...

Tu trouveras ce code dans le module de "PDL" (double-click dans l'explorateur de ton projet sur "Feuil1 (PDL)"

Private Sub Worksheet_SelectionChange(ByVal Target As Range)
'
'Procédure "qui réagit" à un événement : ici, un clic sur une cellule (Target): ici, [D2]
'L'événement te renvoie la valeur (byval) de la cellule cliquée (cadeau d'Excel)
'Tu peux également en "soutirer" d'autres infos : Target.Row   Target.Column
'
If Not Intersect(Target, Range("D2")) Is Nothing Then   'si la cellule = [D2]  (en fait, si autre cellule que [D2] n'est pas vrai)
    For x = 3 To 29
        If [D2] = Cells(x, 4) Then ' X = ligne scannée, 4 = colonne 4 -> "D"
            sMsg = sMsg & [D2] & "  -  ligne  " & x & Chr(10)
        End If
    Next
    'les MessageBox étant limitée en possibilités de lignes affichées, cette solution, dans ce cas, est à éviter.
    MsgBox sMsg
End If
'
End Sub

A+

@ curulis57

Salut Curulis57 .. J'ai une question qui va peut être te sembler bête mais je n'arrive pas à lancer ta macro, j'ai ouvert ton fichier et tout après j'ai essayé le bouton "play" en vert là mais je n'ai rien qui s affiche parmi la liste des macro Il y'a quelque chose que je fais mal peut être. ??

Et j'essayais aussi de comprendre ton code , Pourquoi ByVal en paramètre ?

Pas trop loin de la plaque ... finalement ... non ... ??? ...

Peut-être, James007...

Je ne prétends pas (du tout) avoir raison.

Juste un déclic à avoir pour comprendre ce principe simplissime...

A+

James007 a écrit :

Re,

Malheureusement ... là comme ailleurs ... il faut procéder par étape ...

D'ailleurs tu peux relire ton propre Titre ...

1. ta première macro qui ne fonctionnait pas ... avait comme message 'Non Vide' ...et ne retournait pas le numéro de la ligne ...

2. ta macro initiale actuellement fonctionne ... puisque tu as compris la différence entre la cellule recherchée et la plage sur laquelle tu recherches la valeur de la cellule ...

3. Donc ... maintenant tu veux qu'à la place du Message la macro te retourne le numéro de la ligne ...

Est-ce-que ce résumé est fidèle à la situation ...???

Bonjour James007,

Oui c'est bien résumé.

James007 a écrit :
curulis57 a écrit :

Rien dit...

Salut curulis57

J'ai l'impression qu'il faut franchir les étapes graduellement ...

1. Lancer une macro standard ...

et un peu plus tard ...

2. Utiliser une macro évènementielle ...

En effet, ton commentaire m'a mis la puce à l'oreille. Je ne connaissais pas encore les macro évènementielles. Je me suis lancée dans une lecture dans ce sens ce matin et maintenant je comprends mieux le code de curulis57 .


curulis57 a écrit :

Salut tous,

je suis très mauvais prof...

Tu trouveras ce code dans le module de "PDL" (double-click dans l'explorateur de ton projet sur "Feuil1 (PDL)"

Private Sub Worksheet_SelectionChange(ByVal Target As Range)
'
'Procédure "qui réagit" à un événement : ici, un clic sur une cellule (Target): ici, [D2]
'L'événement te renvoie la valeur (byval) de la cellule cliquée (cadeau d'Excel)
'Tu peux également en "soutirer" d'autres infos : Target.Row   Target.Column
'
If Not Intersect(Target, Range("D2")) Is Nothing Then   'si la cellule = [D2]  (en fait, si autre cellule que [D2] n'est pas vrai)
    For x = 3 To 29
        If [D2] = Cells(x, 4) Then ' X = ligne scannée, 4 = colonne 4 -> "D"
            sMsg = sMsg & [D2] & "  -  ligne  " & x & Chr(10)
        End If
    Next
    'les MessageBox étant limitée en possibilités de lignes affichées, cette solution, dans ce cas, est à éviter.
    MsgBox sMsg
End If
'
End Sub

A+

Merci Curulis57 pour tes explications, tu m'as fait découvrir cet autre type de macro que je ne connaissais pas encore . Après avoir lu des cours à ce sujet, je comprends mieux le concept et ton code.

Bonjour,

Est-ce-que tu considères ton sujet comme résolu ....

ou

Ta demande a-t-elle évolué vers un 'multi-recherches' ...???

P.S. Content que tu aies découvert le concept des évènementielles ...

Pour info ...les macros évènementielles sont à stocker dans les modules des feuilles ...et les macros dans les modules standard ...

'multirecherches' .. je ne suis pas sure de comprendre. Mais oui ma demande a évolué.

Je souhaite en effet récupérer chaque fois qu'il y'a une correspondance le numéro de la ligne avec cette macro.

Kokko a écrit :

'multirecherches' .. je ne suis pas sure de comprendre. Mais oui ma demande a évolué.

Je souhaite en effet récupérer chaque fois qu'il y'a une correspondance le numéro de la ligne avec cette macro.

Dans l'exemple2 que tu as posté .... pour chaque Communauté de Communes ... il existe plusieurs réponses dans la colonne D ....

donc plusieurs = MULTI ...

Rechercher des sujets similaires à "rechercher valeur colonne"