EFFECTUER UNE RECHERCHE DANS UNE PLAGE DE CELLULES EXCEL

winvsmac Messages postés 84 Date d'inscription samedi 26 mai 2007 Statut Membre Dernière intervention 14 décembre 2016 - 18 janv. 2010 à 08:37
winvsmac Messages postés 84 Date d'inscription samedi 26 mai 2007 Statut Membre Dernière intervention 14 décembre 2016 - 19 janv. 2010 à 21:17
Bonjour à tout le monde

Voici sur quoi je me creuse les méninges depuis un petit moment, mais je n'arrive pas à trouver de solution.
Ceci concerne du VB6 + Excel.

Sur une feuille Excel, j'ai dans ma colonne A un prénom (dans la plage A1:A10, et il n'y a pas de doublon de prénom, ce qui donne A1 Alain, A2 Sophie ....)

Au préalable, disons que j'ai une variable (le_nom) qui contient le nom à rechercher dans la plage A1:A10. Exemple : Alain

Comment fait on pour tester chaque cellule de la plage, est dès qu'une cellule parcourue contient le prénom de ma variable je récupère les coordonnées de la cellule en question ?

Certes c'est tout bête mais je n'y arrive pas.

Merci bcp
Jerome

3 réponses

ucfoutu Messages postés 18038 Date d'inscription lundi 7 décembre 2009 Statut Modérateur Dernière intervention 11 avril 2018 211
18 janv. 2010 à 08:52
Onjour,

Intéresse-toi à la méthode Find, bien exposée dans l'aide d'Excel.

Voici un exemple d'utilisation :

Dim ou As Range, qui As String
  qui = "Alain"
  Set ou = Range("A1:A10").Find(qui, LookIn:=xlValues)
  If Not ou Is Nothing Then
    MsgBox "trouvé en " & ou.Address
  Else
    MsgBox "absent"
  End If
  Set ou = Nothing


____________________
Très intéressante fable, L'OISELEUR, L'AUTOUR ET L'ALOUETTE !
Cliquer sur "Réponse acceptée" (en bas d'une solution avérée adéquate) rendra service à d'autres. PENSEZ-Y.
0
winvsmac Messages postés 84 Date d'inscription samedi 26 mai 2007 Statut Membre Dernière intervention 14 décembre 2016
19 janv. 2010 à 21:15
Bonsoir Ucfoutu,

Merci pour ton exemple de code.

J'ai pu l'adapter au mien de la façon suivante :

If rst.RecordCount > 0 Then
    With rst
        .MoveFirst
        Do Until rst.EOF
            qui = !nom
            Set ou = Range("B4:B" & 4 + rst.RecordCount).Find(qui, lookin:=xlValues)
            Msgbox ou.address
            .MoveNext
        Loop
    End With
End If


J'arrive bien pour chaque enregistrement de mon jeu d'enregistrements (rst) de ma table (articles) à recherche la valeur du champ nom dans la plage excel "B4:B6". Et j'affiche les coordonnées de la cellule Excel.

J'ai besoin d'insérer une seconde recherche :

If rst.RecordCount > 0 Then
    With rst
        .MoveFirst
        Do Until rst.EOF
            T = Split(!article)
            qui = T(0)
            Set ou = Range("B4:B" & 4 + rst.RecordCount).Find(qui, lookin:=xlValues)
            qui2 = Mid(!ladate, 1, 10)
            Set ou2 = Range("C3:ZZ3").Find(qui2, lookin:=xlValues)
            .MoveNext
        Loop
    End With
End If


En qui2 je récupère la date stockée dans le champ ladate et je la recherche
dans la plage "C3:ZZ3". Si je laisse le code tel que, ça fonctionne.

Mais si je rajouter une message box pour avoir les coordonnées de ou et ou2 j'ai une erreur 91 Variable Objet ou variable with non définie. Je ne comprends plus .....

Voici le code le code entier :

If rst.RecordCount > 0 Then
    With rst
        .MoveFirst
        Do Until rst.EOF
            T = Split(!article)
            qui = T(0)
            Set ou = Range("B4:B" & 4 + rst.RecordCount).Find(qui, lookin:=xlValues)
            qui2 = Mid(!ladate, 1, 10)
            Set ou2 = Range("C3:ZZ3").Find(qui2, lookin:=xlValues)
            MsgBox ou.Address & " " & ou2.Address  << ça plante là
            .MoveNext
        Loop
    End With
End If


Merci de ton aide.
Jerome
0
winvsmac Messages postés 84 Date d'inscription samedi 26 mai 2007 Statut Membre Dernière intervention 14 décembre 2016
19 janv. 2010 à 21:17
Ca plante exactement sur ou2, si je mets par exemple Msgbox ou2.address, j'ai l'erreur 91.
0
Rejoignez-nous