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
155
Réponses
12
Affichages
302

Statistiques des forums

Discussions
312 177
Messages
2 085 973
Membres
103 073
dernier inscrit
MSCHOE16