[VBA]Recherche dans une feuille Excel

aurelien2723 Messages postés 181 Date d'inscription jeudi 12 janvier 2006 Statut Membre Dernière intervention 26 janvier 2011 - 11 avril 2007 à 08:45
cs_MPi Messages postés 3877 Date d'inscription mardi 19 mars 2002 Statut Membre Dernière intervention 17 août 2018 - 12 avril 2007 à 00:16
Salut!

J'aimerais faire une recherche d'un mot entré dans une "entry" dans une feuille excel, en excluant la première colonne.
Le but étant de récupérer toutes les lignes correspondante aux cellule trouvée.

J'ai ceci :
Dim resultatRecherche As Variant
Dim chaine As String    ' rempli plus haut
Sheets(2).Activate
    'on recherche sur toutes la feuille, sauf la première colonne,
Columns("B:IV").Select
   
 Set resultatRecherche = Selection.Find(What:=chaine, After:=ActiveCell, LookIn:=xlFormulas, LookAt:=xlPart, SearchOrder:=xlByColumns,_ SearchDirection:=xlNext, MatchCase:=False, SearchFormat:=False)
   
' si aucun résultat est renvoyé, on affiche une popup
If (resultatRecherche Is Nothing) Then
        rmsgbox = MsgBox("Aucun résultat trouvé pour " + Chr(34) + chaine +      Chr(34), vbOKOnly + vbExclamation, "Recherche")
        Exit Sub
    End If
   
    Dim ligne As Integer
    ligne = ActiveCell.Row

le problème est que mon numéro de ligne est toujours à 1... alors que le premier résultat devrait être 4.
En débuggant, on voit bien que le cellule active ne se met pas sur le résultat de la recherche. pourquoi?

Merci beaucoup pour votre aide! :)

8 réponses

jrivet Messages postés 7392 Date d'inscription mercredi 23 avril 2003 Statut Membre Dernière intervention 6 avril 2012 60
11 avril 2007 à 08:52
Salut,

Normal, car ActiveCell ne change pas si tu n'actives pas resultatRecherche
En ajoutant ceic cela devrait fonctionner. Essaies ceci

Dim resultatRecherche As Range
Dim chaine As String   ' rempli plus haut
   Sheets(2).Activate
       'on recherche sur toutes la feuille, sauf la première colonne,
   Columns("B:IV").Select
       
   Set resultatRecherche = Selection.Find(chaine, ActiveCell, xlFormulas, xlPart, xlByColumns, xlNext, False, False)
     
   ' si aucun résultat est renvoyé, on affiche une popup
   If (resultatRecherche Is Nothing) Then
       rmsgbox = MsgBox("Aucun résultat trouvé pour " + Chr(34) + chaine + Chr(34), vbOKOnly + vbExclamation, "Recherche")
       
   Else
       resultatRecherche.Activate
       Dim ligne As Integer
       ligne = ActiveCell.Row
   End If , ----
[code.aspx?ID=41455 By Renfield]

@+: Ju£i?n
Pensez: Réponse acceptée
0
aurelien2723 Messages postés 181 Date d'inscription jeudi 12 janvier 2006 Statut Membre Dernière intervention 26 janvier 2011 1
11 avril 2007 à 08:58
Ok merci!!! :)
Ca fonctionne, merci julien ;)

Vraiment du mal en VBA... :(

Je voulais essayer d'utiliser aussi
....find(....).row pour avoir directement la ligne, mais le type ne correspond pas d'après le debugger...  (j'ai testé variant et integer)

Savez vous où trouver une doc correct sur toutes ces fonctions VBA svp?

Merci! :)
0
jrivet Messages postés 7392 Date d'inscription mercredi 23 avril 2003 Statut Membre Dernière intervention 6 avril 2012 60
11 avril 2007 à 09:07
Re,
"Savez vous où trouver une doc correct sur toutes ces fonctions VBA svp?"
Oula ben alors là j'en ai aucune idée. Parce que tu as d'autres soucis? En revanche je sais que ce forum pourra t'être très utile si tu viens avec des problèmes bien décrits (comme celui que tu viens d'exposer)

NOTE: Si tu estimes que ton problème est résolu, penses à appuyer sur le bouton "réponse acceptée" sur le ou les posts qui ont pu t'aider.

@+: Ju£i?n
Pensez: Réponse acceptée
0
aurelien2723 Messages postés 181 Date d'inscription jeudi 12 janvier 2006 Statut Membre Dernière intervention 26 janvier 2011 1
11 avril 2007 à 09:41
"Oula ben alors là j'en ai aucune idée."

C'est bien ce que je craignait... :(
J'ai pas spécialement de soucis, mais tu sais jamais ce que renvoi les fonction, ou encore par exemple le find ben tu découvres en te promenant sur les forums que tu peux mettre .row après ou encore .address ... enfin des trucs que tu sais pas d'où ça vient et à quoi ça sert.

Pour "réponse acceptée" j'attendais que le sujet soit clos, sinon plus personne vient lire :P

Merci :)
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
jrivet Messages postés 7392 Date d'inscription mercredi 23 avril 2003 Statut Membre Dernière intervention 6 avril 2012 60
11 avril 2007 à 09:54
Salut,
En fait ce qu'il te faut c'est utiliser l'explorateur d'objets correctement (F2 dans l'IDE VBA)

En fait il te permettra de découvrir plein de chose.
Continuons avec notre exemple

Déjà il faut connaitre le Type de Selection: = > pas donné mais c'est un Type Range .

En partant de là, dans l'explorateur d'objet, Recherche Range en filtrant Pour les objet Excel (la ou il y a marque <toutes les bibliothèques>) . Recherche dans la liste Bibliothèque : Excel  Class: Range  Tu as alors toutes les méthodes et propriétés disponibles pour Range.
Recherche Alors dans la nouvelle liste la methode Find.
Tu as alors tout en bas ceci qui s'affiche.

Function Find(What, [After], [LookIn], [LookAt], [SearchOrder], [SearchDirection As XlSearchDirection = xlNext], [MatchCase], [MatchByte]) As Range
    Membre de Excel.Range

Et hoop tu sais a présent que le résultat retourne est de type Range. Donc à partir de la tu peux considérer
Selection.Find(chaine, ActiveCell, xlFormulas, xlPart, xlByColumns, xlNext, False, False)
Comme une range et donc Mettre .Row, Ou .Adresse Bref tu peux mettre tout ce qui caractérise une Range.
En revanche Si tu stocke le résultat il faut t'assurer que tu le stocke dans une variable de meme type.

=> Dim resultatRecherche As Range
Si tu veux stocke .Row (=> Explorateur d'objet et tu verras que Row et de type Long)
Voila j'espère avoir été clair et avoir pu t'aider un peu plus.
@+: Ju£i?n

Pensez: Réponse acceptée
0
cs_MPi Messages postés 3877 Date d'inscription mardi 19 mars 2002 Statut Membre Dernière intervention 17 août 2018 23
11 avril 2007 à 11:51
Je ne suis pas certain, mais je pense qu'en mettant .Select à la recherche, ça peut planter si la  recherche n'a rien trouvé... (?)

Tu peux aussi retracer la ligne en utilisant l'adresse de la Recherche
Set Recherche = Columns("B:IV").Find(chaine,,xlValues)
If Not Recherche Is Nothing then
Ligne = Recherche.Row  ' ou Range(Recherche.Address).Row
Else
Msgbox "Donnée introuvable"
End if

Attention aussi en mettant xlFormulas qui semble être par défaut. Préfère xlValues si tu ne dois pas rechercher du texte à l'intérieur d'une formule, mais plutôt dans le texte d'une cellule.

MPi
0
aurelien2723 Messages postés 181 Date d'inscription jeudi 12 janvier 2006 Statut Membre Dernière intervention 26 janvier 2011 1
11 avril 2007 à 14:08
Merci Julien ;)
J'avais déjà regarder un peu, mais la c'est plus clair :)

Sinon oui j'y avais penser Mpi, d'ailleurs ça ne marche pas :( :

    'resultatRecherche est un variant
    Sheets(2).Cells(1, 1).Activate
    ' et on recherche sur toutes la feuille, sauf la première colonne,
    Set resultatRecherche = Columns("B:IV").Find(What:=chaine, After:=ActiveCell, LookIn:=xlFormulas, LookAt _
        :=xlPart, SearchOrder:=xlByRows, SearchDirection:=xlNext, MatchCase:= _
        False, SearchFormat:=False)

Erreur : type incompatible :(
0
cs_MPi Messages postés 3877 Date d'inscription mardi 19 mars 2002 Statut Membre Dernière intervention 17 août 2018 23
12 avril 2007 à 00:16
resultatRecherche doit être de type Range
Est-ce bien comme ça que tu l'as déclaré ?

Dim resultatRecherche  As Range
As Variant pourrait aussi fonctionner, mais bon...

MPi
0
Rejoignez-nous