Faire une recherche de plusieurs valeurs avec saut de cellule

  • Initiateur de la discussion Initiateur de la discussion Eole
  • Date de début Date de début

Boostez vos compétences Excel avec notre communauté !

Rejoignez Excel Downloads, le rendez-vous des passionnés où l'entraide fait la force. Apprenez, échangez, progressez – et tout ça gratuitement ! 👉 Inscrivez-vous maintenant !

Eole

XLDnaute Nouveau
Bonjour à tous,

Je m'adresse à vous car je n'est pas encore trouvé la réponse à mon problème sur le net.

Voici mon problème:

Dans mon fichier excel j'ai un tableau de donné avec des ouvertures et des objet qui la traverse, mais pour certaines ouvertures j'ai plusieurs objets qui traverse.

Donc moi j'ai utilisé un recherchev mais le problème et qu'il m'affiche uniquement le premier résultat.

D'où ma question:

comment puis-je faire pour rechercher tous les résultat et aussi est-ce possible que pour chaque résultat faire un saut de ligne (que sa insert une ligne en dessous) pour y inscrire mes autres solution et ce juste en dessous de ma première recherche.

J’espère avoir était clair, mais si ce n'est pas le cas dite e moi je vous mettrait un bout de on fichier excel en question sur le forum ( car pour le moment il pèse 23Mo).

Merci pour votre aide et bonne journée.

Je travail avec excel 2003 et 2007.
 
Re : Faire une recherche de plusieurs valeurs avec saut de cellule

Bonjour Éole et bienvenu, bonjour le forum,

Désolé mais des ouvertures et des objets qui traversent je vois pas trop ce que c'est. Il est clair, à mon sens, qu'un fichier exemple serait lui aussi le bienvenu... Pas la peine de l'original qui pèse 23 Mo mais juste un exemple basé sur l'original avec la même structure (nom des onglets, plage nommées, formules, etc.), une poignée de données non confidentielles, ce que tu as au départ et ce que tu souhaiterais après...
 
Re : Faire une recherche de plusieurs valeurs avec saut de cellule

Voila dans le 1er onglet (feuille final), j'ai une liste d'ouverture (trou dans un mur béton), dans le 2éme onglet (Traversant), j'ai une liste avec les ouvertures et les objet (de la tuyauterie) qui la traverse.

Donc ma question et comment faire pour que j'affiche les nom des tuyaux traversant dans le 1er onglet sachant que certaines ouvertures ont plusieurs tuyaux qui passe dedans.

car avec un recherchev il ne m'affiche que le 1er résultat et moi j'aurai voulu que pour chaque tuyau traversant sa fasse un insertion de ligne et que sa me marque les résultats en dessous et un résultat par cellules.

Sachant que ce fichier excel et un fichier ou j'ai déjà beaucoup de formule.

j'éspere avoir était clair dans mes explications.

merci de votre aide et bonne journée.
 

Pièces jointes

Dernière édition:
Re : Faire une recherche de plusieurs valeurs avec saut de cellule

Bonjour Éole, bonjour le forum,

En pièce jointe uns solution VBA (par formule je ne sais pas faire...). Double-cliques dans une cellule non vide (une ouverture) de la colonne A de l'onglet Feuille Final, ça ouvre une boîte de dialogue Traversants qui affiche le ou les traversant(s) correspondant à l'ouverture choisie. Le bouton Ok va répercuter dans la colonne B la liste du matériel traversant (en rajoutant eventuellement des lignes) puis va fermer la boîte de dialogue. Le bouton Exit va fermer la boîte de dialogue.
Si tu recopies le VBA pour ton fichier original il te faut recopier 3 parties :
Module1 :
Code:
Public o As String 'déclare la variable o (Ouverture)
Feuil1(feuille final) :
Code:
Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean)
If Target.Column <> 1 Then Exit Sub 'si le double-clic est fait ailleurs que dans la colonne A, sort de la procédure
Cancel = True 'évite le mode édition lié au double-clic
o = Target.Value 'définit la variable o (déclarée publique dans le module1)
If o <> "" Then UserForm1.Show 'si o n'est pas vide, affiche l'UserForm1
End Sub
et l'UserForm1 avec le code qui l'accompagne :
Code:
Private Sub UserForm_Initialize() 'à l'initialisation de l'UserForm
Dim r As Range 'déclare la variable r (Recherche)
Dim pa As String 'déclare la variable pa (Première Adresse)
 
With Sheets("Traversants").Columns(1) 'prend en compte la colonne A de l'onglet "Traversants"
    Set r = .Find(o, , xlValues, xlWhole) 'définit la recherche r (recherche l'ouverture o dans la colonne A de l'onglet "Traversants")
    If Not r Is Nothing Then 'condition : si il existe au moins une occurrence de o
        pa = r.Address 'définit la première adresse de l'occurrence trouvée
        Do 'exécute
            Me.ListBox1.AddItem r.Offset(0, 1).Value 'ajoute le tuyau à la ListBox1
            Set r = .FindNext(r) 'redéfinit la recherche r (cherche l'occurrence suivante)
        Loop While Not r Is Nothing And r.Address <> pa 'boucle tant qu'il existe des occurrence de o ailleurs qu'en pa
    End If 'fin de la condition
End With 'fin de la prise en compte de la colonne A de l'onglet "Traversants"
End Sub
 
 
Private Sub CommandButton2_Click() 'bouton "Ok"
Dim x As Integer
ActiveCell.Offset(0, 1).Value = Me.ListBox1.List(0)
If Me.ListBox1.ListCount > 1 Then
    For x = 1 To Me.ListBox1.ListCount - 1
        ActiveCell.Offset(x, 0).EntireRow.Insert
        ActiveCell.Offset(x, 1).Value = Me.ListBox1.List(x)
    Next x
End If
Unload Me 'vide et ferme l'UserForm1
End Sub
 
 
Private Sub CommandButton1_Click() 'bouton "Exit"
Unload Me 'vide et ferme l'UserForm1
End Sub

Ton fichier modifié :
 

Pièces jointes

Re : Faire une recherche de plusieurs valeurs avec saut de cellule

Merci sa marche très bien sur ton fichier, mais par contre une petite question

peux ton le faire en automatique (c'est à dire) , je clic sur la 1er cellule et lui me prend en automatique toutes les cellules en dessous jusqu’à ce qu'il trouve une vide?

Et sinon je suis un débutant en VBA mais ou dois-je copier les formules que tu as écrite?

merci
 
Dernière édition:
Re : Faire une recherche de plusieurs valeurs avec saut de cellule

en faite ta formule et bien, mais le problème c'est que l'affichage des résultats ce fait un à coté de l'autre alors qu'il me faut un affichage un en dessous de l'autre avec des insert ligne pour écrire les valeurs dedans. comme avec la macro de Robert.
 
Re : Faire une recherche de plusieurs valeurs avec saut de cellule

Bonjour Éole, Rachid, bonjour le forum,

En pièce jointe une version 2 avec le code ci-dessous (à recopier dans le module1) :
Code:
Public Sub recup()
Dim dl As Integer 'déclare la variable dl (Dernière Ligne)
Dim i As Integer 'déclare la variable i (incrément de ligne)
Dim r As Range 'déclare la variable r (Recherche)
Dim pa As String 'déclare la variable pa (Première Adresse)
Dim tt() As String 'déclare le tableau de variables tt (Tableau des Traversants)
Dim x As Integer 'déclare la variable x (incrément de variable)
Dim y As Integer 'déclare la variable y (incrément ligne)
 
dl = Cells(Application.Rows.Count, 1).End(xlUp).Row 'définit la dernière ligne
For i = dl To 3 Step -1 'boucle 1 inversée : sur toutes les cellules éditées cel de la colonne A (de la dernière à la ligne 3)
    With Sheets("Traversants").Columns(1) 'prend en compte la colonne A de l'onglet "Traversants"
        Set r = .Find(Cells(i, 1).Value, , xlValues, xlWhole) 'définit la recherche r (recherche l'ouverture o dans la colonne A de l'onglet "Traversants")
        If Not r Is Nothing Then 'condition : si il existe au moins une occurrence de o
            pa = r.Address 'définit la première adresse de l'occurrence trouvée
            Do 'exécute
                ReDim Preserve tt(x) 'redimensionne le tableau de variables tt
                tt(x) = r.Offset(0, 1).Value 'ajoute une variable au tableau de variables tt
                Set r = .FindNext(r) 'redéfinit la recherche r (cherche l'occurrence suivante)
                x = x + 1 'incrémente x
            Loop While Not r Is Nothing And r.Address <> pa 'boucle tant qu'il existe des occurrence de o ailleurs qu'en pa
        End If 'fin de la condition
    End With 'fin de la prise en compte de la colonne A de l'onglet "Traversants"
    Cells(i, 2).Value = tt(0) 'place la première variable dans la cellule de la colonne B
    If UBound(tt) > 1 Then 'condition : si le nombres de variable est supérieur à 1
        For y = 1 To UBound(tt) 'boucle 2 : de 1 au nombre de variables -1
            Rows(i + y).EntireRow.Insert 'rajoute une ligne
            Cells(i + y, 2).Value = tt(y) 'place le traversant en colonne B de la ligne rajoutée
        Next y 'prochaine variable de la boucle 2
    End If 'fin de la condition
    Erase tt
    x = 0
Next i 'prochaine cellule cel de la boucle 1
End Sub
Dans l'exemple j'ai rajouté un bouton (de la barre d'outil Boîte à outils Contrôle) qui lance la macro par le code ci-dessous (à recopier dans le composant Feuil1(feuille final)) :
Code:
Private Sub CommandButton1_Click() 'bouton "Récup"
Module1.recup 'lance la procédure "recup" du module1
End Sub
mais ce n'est pas obligatoire...

Cette fois, plus de boîte de dialogue ! Un clic sur le bouton et toutes les données sont actualisées...

Le fichier :
 

Pièces jointes

- Navigue sans publicité
- Accède à Cléa, notre assistante IA experte Excel... et pas que...
- Profite de fonctionnalités exclusives
Ton soutien permet à Excel Downloads de rester 100% gratuit et de continuer à rassembler les passionnés d'Excel.
Je deviens Supporter XLD

Discussions similaires

Réponses
7
Affichages
398
Retour