Ceci est une page optimisée pour les mobiles. Cliquez sur ce texte pour afficher la vraie page.

Microsoft 365 Rechercher dans certains onglets Uniquement dans 2 colonnes

Usine à gaz

XLDnaute Barbatruc
Supporter XLD
Bonjour à toutes et à tous,
J'espère que vous allez bien ...

Je reviens sur une demande que j'avais faite l'année dernière non résolue ... mais le temps passant, peut-être qu'une solution pourrait être trouvée

Et, je profite de cette période de confinement, plus calme, et je tente d'améliorer mon "usine à gaz" comme dirait mon cher Gérard LOL.
J'essaie de refaire mes codes "bidouillés" avec les connaissances que j'ai acquises grâce à vos codes et explications que vous m'avez si gentiment fourni au fil du temps.

Toujours intéressé par les gains de temps, si minimes soient-ils, je souhaite réduire le temps d'exécution ma recherche qui, grâce aux interventions de Mapomme, Youky, Gérard, Patrick, Roland ... fonctionne très bien.

Toutefois, dans mon classeur elle se fait sur :
- 8 onglets et chaque onglet contient environ 50 000 lignes et environ 45/50 colonnes... soit 20 000 000 de cellules à contrôler.

Est-il possible de définir le "champ" des cellules à "visiter" qui est exactement le même sur tous les onglets :
- Colonnes G et H : de g7:h jusqu'à la dernière ligne NON vide (800 000 de cellules à contrôle) = 25 fois moins de cellules à visiter.

Dans le fichier test, je voudrais que la recherche se fasse dans les Feuil1 à 4 colonnes G et H et pas dans les Feuil5-6-7
Espérant .... lol.
Je joins le fichier test,
Avec mes remerciements,
Amicalement,
lionel,
 

Pièces jointes

  • recherche.xlsm
    46.4 KB · Affichages: 15
Dernière édition:

mapomme

XLDnaute Barbatruc
Supporter XLD
Surtout pour saluer @arthour973 et aussi @fanfan38 ,


VB:
Public Sub BoutonRecherche()
Dim nom$, f, plage As Range, c As Range, firstAddress$, rep, fin As Boolean
   nom = InputBox("Cherche N° Client :" & Chr(10) & "      - Si pas de n°," & Chr(10) & "            - ou erreur n°," & Chr(10) & "                  Recommencez !", "Recherche")
   If nom = "" Then Exit Sub
   For Each f In Array("Feuil1", "Feuil2", "Feuil3", "Feuil4")
      With Sheets(f)
         .Activate
         Set plage = Intersect(.Range("g7:h" & .Rows.Count), .UsedRange)
         Set c = plage.Find(nom, LookAt:=xlPart)   'LookAt:=xlPart dans cellule - LookAt:=xlWhole) 'cellule entière
         If Not c Is Nothing Then
            On Error Resume Next
            firstAddress = c.Address
            Do
               On Error Resume Next
               c.Activate
               ActiveWindow.ScrollRow = Selection.Row
               rep = MsgBox("Trouvé " & nom & " à " & f & "." & c.Address(0, 0) & vbLf & _
                     "Voulez-vous continuez la recherche ?", vbQuestion + vbYesNo + vbDefaultButton1)
               If Not rep = vbYes Then fin = True
               Set c = plage.FindNext(c)
               If c Is Nothing Then Exit Do
               If c.Address = firstAddress Then Exit Do
            Loop
         End If
      End With
      If fin Then Exit For
   Next f
   If Not fin Then MsgBox "Ben NON : y'a pas ou y'a plus !", vbExclamation
End Sub
 

job75

XLDnaute Barbatruc
Bonjour Lionel, fanfan38, mapomme,

Pourquoi parler de G7 Lionel alors que les tableaux commencent en G5 ?

La recherche par la méthode Find est lente alors qu'elle est très rapide avec un tableau VBA :
VB:
Sub BoutonRecherche()
Dim txt$, w As Worksheet, tablo, i&, j%
txt = "*" & LCase(InputBox("N° Client :", "Chercher")) & "*"
If txt = "**" Then Exit Sub
For Each w In Worksheets(Array("Feuil1", "Feuil2", "Feuil3", "Feuil4"))
    tablo = w.Range("A1", w.UsedRange).Resize(, 8) 'matrice, plus rapide, colonne H incluse
    For i = 5 To UBound(tablo)
        For j = 7 To 8 ' colonnes G et H
            If LCase(tablo(i, j)) Like txt Then
                w.Visible = xlSheetVisible 'si la feuille est masquée
                Application.Goto w.Cells(i, j)
                If MsgBox(txt & " trouvé en " & w.Name & "!" & w.Cells(i, j).Address(0, 0) & vbLf & _
                    "Voulez-vous continuer la recherche ?", vbQuestion + vbYesNo + vbDefaultButton1) = vbNo Then Exit Sub
            End If
Next j, i, w
End Sub
A+
 
Dernière édition:

Usine à gaz

XLDnaute Barbatruc
Supporter XLD
Re-Bonjour Gérard, Fanfan38, Mapomme, Le Forum,

Super vos codes on y est presque Déjà un grand merci à vous, cette recherche va vraiment être géniale !

J'ai mis à jour le fichier test avec vos codes et j'ai fait dans la feuille "Fonctionnement_codes" un p(tit récapitulatif des actions qui fonctionnent.

Gérard m'a fait penser à une question que j'avais oublié de poser :
Si recherche trouve : est-il possible d'afficher la feuille masquée et afficher ligne masquée ?

- Afficher la Feuille masquée n'est pas important pour l'utilisation dans mon fichier car les feuilles objets de la recherche sont forcément affichées, mais pourra certainement être utile pour d'autres utilisateurs

- Afficher la Ligne masquée est très important pour l'utilisation dans mon fichier car nous filtrons les lignes selon les dates de Rappels à faire et le code actuel, pour trouver, ré-affiche toutes les lignes avant de chercher. Cela occasionne la perte du filtrage dont nous avons besoin pour continuer le travail après la recherche.

Ce serait le Top
Je joins le fichier,
 

Pièces jointes

  • recherche.xlsm
    82 KB · Affichages: 4
Dernière édition:

Discussions similaires

Réponses
2
Affichages
182
Réponses
12
Affichages
331
Les cookies sont requis pour utiliser ce site. Vous devez les accepter pour continuer à utiliser le site. En savoir plus…