Rechercher valeurs + boucle selection cellule Le sujet est résolu

Y compris Power BI, Power Query et toute autre question en lien avec Excel
N
Nico44044
Membre habitué
Membre habitué
Messages : 119
Inscrit le : 2 janvier 2017
Version d'Excel : Excel Mac 2011

Message par Nico44044 » 3 septembre 2019, 16:57

Bonjour à tous,

Je souhaite faire un moteur de recherche qui en cas de résultats multiples sélectionne tour à tour (par exemple avec un bouton "Next") les cellules dans lesquelles le résultats (ou partie du résultats) a été trouvé.

Exemple :

En A1 je rentre la valeur cherchée.
La valuer en question existe en C3 et F6
Je voudrais donc qu'en lançant la macro la cellule C3 soit sélectionnée.
Puis en appuyant sur le bouton "Next" la cellule F6
Etc etc

Quelqu'un aurait-il une idée ou un début de piste ?

Merci bcp :-)
T
Theze
Passionné d'Excel
Passionné d'Excel
Messages : 4'020
Appréciations reçues : 305
Inscrit le : 26 janvier 2011
Version d'Excel : 2007/2019

Message par Theze » 3 septembre 2019, 18:51

Bonjour,

Voici une piste parmi d'autres bien qu'Excel fournisse déjà un outil de recherche qui fonctionne comme tu le désire :
Rechercher.xlsm
(20.48 Kio) Téléchargé 10 fois
Il vaut mieux un qui sait que cent qui cherchent :wink:

Ce forum étant un lieu de partage, je n'accepte pas les messages privés !
Avatar du membre
LouReeD
Contributeur
Contributeur
Messages : 6'244
Appréciations reçues : 280
Inscrit le : 14 octobre 2014
Version d'Excel : 2013 FR, 2016 FR
Contact :
Téléchargements : Mes applications

Message par LouReeD » 3 septembre 2019, 22:22

Bonsoir,

j'avais ceci, une recherche sur toutes les feuilles, mais avec la détermination d'une plage particulière :
Recherche_dans classeur.xlsm
(19.83 Kio) Téléchargé 8 fois
@ bientôt

LouReeD
Quelques règles à lire ICI ;;)
______________________________________________________Vous pouvez allez faire un tour sur : Index de "Mes applications" ;;)
N
Nico44044
Membre habitué
Membre habitué
Messages : 119
Inscrit le : 2 janvier 2017
Version d'Excel : Excel Mac 2011

Message par Nico44044 » 4 septembre 2019, 13:46

Un grand merci à tous les 2 c'est exactement ce que je cherchais. J'ai plus qu'à adapter. :)
N
Nico44044
Membre habitué
Membre habitué
Messages : 119
Inscrit le : 2 janvier 2017
Version d'Excel : Excel Mac 2011

Message par Nico44044 » 4 septembre 2019, 14:55

@ Theze ,

Petite question sur ton fichier : c'est exactement ce que je cherche à faire sauf que ma cellule de recherche n'est pas "A1" mais "F14" et que je n'arrive pas a changer la zone de recherche (variable "DefPlage").

Je voudrais que la recherche ne se fasse qu'a partir de la ligne 19 colone "C "

Si tu peux me montrer comment faire ca ce serait top.

Merciiiii :)
T
Theze
Passionné d'Excel
Passionné d'Excel
Messages : 4'020
Appréciations reçues : 305
Inscrit le : 26 janvier 2011
Version d'Excel : 2007/2019

Message par Theze » 4 septembre 2019, 16:36

Bonjour,

soit ta recherche doit comporter toute la feuille, dans ce cas, il te faut juste éviter de prendre en compte F14, alors voilà le code modifié :
Sub Chercher()
    
    Dim Plage As Range
    Dim Cel As Range
    Dim Adr As String
    Dim I As Long
    
    Set Plage = DefPlage(ActiveSheet) 'L étant optionnel, ne pas l'indiquer revient à inscrire 1 pour la première ligne
    
    If Range("F14").Value = "" Then Exit Sub
    
    Erase Tbl(): J = 0
    
    Set Cel = Plage.Find(Range("F14").Value, , xlValues, xlPart)
    
    If Not Cel Is Nothing Then
    
        Adr = Cel.Address
        
        Do
            
            If Cel.Address(0, 0) <> "F14" Then 'évite la zone de recherche qui va obligatoirement faire partie du lot
            
                I = I + 1: ReDim Preserve Tbl(1 To I)
                Tbl(I) = Cel.Address
            
            End If
            
            Set Cel = Plage.FindNext(Cel)
            
        Loop While Cel.Address <> Adr
        
        Range(Tbl(1)).Select: J = 1
        
    End If
    
End Sub
et dans le cas où la recherche doit débuter sous F14 (donc, à partir de la ligne 15) dans ce cas, il te faut juste adapter l'argument optionnel "L" (pour Ligne) dans l'appel de la fonction DefPlage() de cette façon :
Sub Chercher()
    
    Dim Plage As Range
    Dim Cel As Range
    Dim Adr As String
    Dim I As Long
    
    Set Plage = DefPlage(ActiveSheet, 15)  '<--- seulement à partir de la ligne 15
    
    If Range("F14").Value = "" Then Exit Sub
    
    Erase Tbl(): J = 0
    
    Set Cel = Plage.Find(Range("F14").Value, , xlValues, xlPart)
     
    If Not Cel Is Nothing Then
    
        Adr = Cel.Address
        
        Do
        
            I = I + 1: ReDim Preserve Tbl(1 To I)
            
            Tbl(I) = Cel.Address
            
            Set Cel = Plage.FindNext(Cel)
            
        Loop While Cel.Address <> Adr
        
        Range(Tbl(1)).Select: J = 1
        
    End If
    
End Sub
Il vaut mieux un qui sait que cent qui cherchent :wink:

Ce forum étant un lieu de partage, je n'accepte pas les messages privés !
Répondre Sujet précédentSujet suivant
  • Sujets similaires
    Réponses
    Vues
    Dernier message