XL 2016 Recherche sur plusieurs feuilles et selection de ligne d'après une textbox

Elidid

XLDnaute Nouveau
Bonjour,

Totalement néophyte en VBA, et après 2 jours de recherches et bidouilles, j'ai bien trouvé des choses approchantes mais je n'ai pas la connaissance pour adapter à mon besoin, j'abandonne et me tourne vers ceux qui savent ;) ...

Je dois d'après une textbox et un bouton de commande lancer une recherche sur la référence entrée dans cette textbox, cette recherche doit se faire sur plusieurs feuilles d'un classeur et sélectionner la ligne complète qui contient cette référence. (certainement simple à faire pour les pros).

Je suis conscient que cela revient à faire un CTRL+F avec option "sur plusieurs feuilles", (ça je sais faire ;)) mais malheureusement cette fonction ne convient pas à ce que l'on me demande ...

Merci si vous pouvez m'aider !

Ci-joint un exemple tout simple de mon besoin.
 

Pièces jointes

  • recherche et selection.xlsx
    16.3 KB · Affichages: 14

youky(BJ)

XLDnaute Barbatruc
Bienvenu sur le forum,
Voici un code à mettre sous le bouton.
Ce code utilise une Inputbox et non le textbox
Le code peut être adapté si on tiens au textbox
Bruno
VB:
Private Sub CommandButton1_Click()
mot = InputBox("Indiquez la référence", "NUMERO")
If mot = "" Then Exit Sub
For k = 1 To Sheets.Count
With Sheets(k).UsedRange
Set c = .Find(mot, LookIn:=xlValues)
If Not c Is Nothing Then
firstAddress = c.Address
Do
Sheets(k).Select
c.Activate
rep = MsgBox("Continuer la recherche ?", 4 + 32, "Sélection")
If rep = vbNo Then Exit Sub
Set c = .FindNext(c)
Loop While Not c Is Nothing And c.Address <> firstAddress
End If
End With
Next
MsgBox "Recherche terminée!"
End Sub
 

Robert

XLDnaute Barbatruc
Repose en paix
Bonjour le fil, bonjour le forum,

Essaie avec ce code appliqué au bouton (le même que celui de Bruno en fait) :

VB:
Private Sub CommandButton1_Click()
Dim O As Worksheet 'déclare la variable O (Onglet)
Dim R As Range 'déclare la variable R (Recherche)
Dim PA As String 'déclare la variable PA (Première Adresse)

If Me.TextBox1.Value <> "" Then 'condition 1 : si la TExtBox1 n'est pas vide
    For Each O In Worksheets 'boucle sur tous les onglets O du classeur
        Set R = Nothing: PA = "" 'vide les variable PA et R
        Set R = O.Cells.Find(Me.TextBox1.Value, , xlValues, xlWhole) 'définit la recherche R (recherche la valeur eacte de la TextBox1 dans tout l'onglet O)
        If Not R Is Nothing Then 'condition 2 : s'il existe au moins une occurrence trouvée
            PA = R.Address 'définit la première adresse PA
            Do 'exécute
                O.Rows(R.Row).Interior.ColorIndex = 3 'colore la ligne de l'occurrence trouvée en rouge
                Set R = O.Cells.FindNext(R) 'redéfinit la recherche R (occurrence suivante)
            Loop While Not R Is Nothing And R.Address <> PA 'boucle tant qu'il existe de nouvelles occurrences ailleurs qu'en PA
        End If 'fin de la condition 2
    Next O 'prochain onglet de la boucle
End If 'fin de la condition 1
End Sub
 

Elidid

XLDnaute Nouveau
Comment dire ... juste merci beaucoup Messieurs !!
Par contre j'ai tenté un mix des 2 et comme une quiche que je suis dans ce domaine je n'arrive pas à transformer l'inputbox de Bruno en textbox ...
car le code de Robert colore la ligne en rouge, mais ne me place pas sur la ligne concernée... il ne faut pas que la sélection garde la ligne en rouge ; ) car un code couleurs est déjà appliqué sur cette ligne et doit rester :)

bien à vous !
 

Robert

XLDnaute Barbatruc
Repose en paix
Re,

Peut-être comme ça :

VB:
Private Sub CommandButton1_Click()
Dim O As Worksheet 'déclare la variable O (Onglet)
Dim R As Range 'déclare la variable R (Recherche)
Dim PA As String 'déclare la variable PA (Première Adresse)

If Me.TextBox1.Value <> "" Then 'condition 1 : si la TExtBox1 n'est pas vide
    For Each O In Worksheets 'boucle sur tous les onglets O du classeur
        Set R = Nothing: PA = "" 'vide les variable PA et R
        Set R = O.Cells.Find(Me.TextBox1.Value, , xlValues, xlWhole) 'définit la recherche R (recherche la valeur eacte de la TextBox1 dans tout l'onglet O)
        If Not R Is Nothing Then 'condition 2 : s'il existe au moins une occurrence trouvée
            PA = R.Address 'définit la première adresse PA
            Do 'exécute
                O.Activate 'active l'onglet O
                O.Rows(R.Row).Select 'sélectionne la ligne de l'occurrence trouvée
                If MsgBox("Continuer la recherche ?", vbYesNo, "RECHERCHE") = vbNo Then Exit Sub 'si "Non" au message sort de la procédure
                Set R = O.Cells.FindNext(R) 'redéfinit la recherche R (occurrence suivante)
            Loop While Not R Is Nothing And R.Address <> PA 'boucle tant qu'il existe de nouvelles occurrences ailleurs qu'en PA
        End If 'fin de la condition 2
    Next O 'prochain onglet de la boucle
End If 'fin de la condition 1
End Sub
 

Discussions similaires