XL 2010 Résolu par Roland : excellente recherche de Roland : rechercher dans lignes masquées

arthour973

XLDnaute Barbatruc
Supporter XLD
Bonjour à toutes et à tous,

Mon cher Roland a fait une superbe recherche qui permet de trouver chiffres ou mots etc dans toutes les feuilles d'un classeur et qui positionne sur la cellule trouvée, quel que soit son emplacement dans le classeur.

Mais il me reste un souci :
Dans mon fichier de travail (environ plus de 20.000 lignes), pour faciliter et optimiser les temps de recherches, j'ai 6 critères :
Rappels prévus dates antérieures à aujourd'hui (et pas encore faits),
- Après entretiens et ok RdV,
- Après entretiens,
- sur répondeurs (rappels programmés),
Rappels prévus dates à venir
- Après entretiens et ok RdV,
- Après entretiens,
- sur répondeurs (rappels programmés),
C'est pour cela que j'ai fait des codes qui m'affichent uniquement la sélection choisie en masquant toutes les autres lignes.

Ce qui permet d'avoir uniquement à l'affichage des lignes voulues et évite de se promener pour trouver sur 15 ou 20000 lignes ... voire plus.

Mais voilà, la recherche ne me permet pas de trouver quand la ligne concernée est masquée !!! Et cela m'a obligé à inclure un petit code qui affiche toutes les lignes avant chaque recherche.
Cela prend du temps pour plus de 20.000 lignes sur 40 colonnes avec des formules et pour, chaque jour, environ 100 à 200 recherches, c'est une très importante perte de temps.

La recherche de base excel permet de trouver le numéro, même si la ligne est masquée et il me suffit d'un petit code pour afficher la ligne trouvée.

Je pense que c'est possible pour la recherche de Roland mais je ne trouve pas.
Auriez-vous une idée ?
Je joins un fichier test.

Vous remerciant déjà d'avoir lu mon long exposé que j'espère clair LOL (ce n'est pas mon fort à ce qui ce dit :confused:).

Avec mes remerciements,
Amicalement,
Lionel,
 

Fichiers joints

Dernière édition:

Roland_M

XLDnaute Barbatruc
Bonsoir tout le monde,

je viens de trouver la solution (merci internet !)
---------
Par défaut, la méthode Find ne trouvera pas en colonnes/lignes masquées.
UtilisezLookIn : = xlFormulas au lieu de LookIn : = xlValues pour résoudre ce problème.
---------

pour effectuer une recherche sur cellules cachées,
il faut donc remplacer LookIn:=xlValues par LookIn:=xlFormulas

C'EST A DIRE ICI:
Cells.Find(Quoi, LookIn:=xlValues le remplacer par> Cells.Find(Quoi, LookIn:=xlFormulas

les adresses seront affichées dans le msgbox
mais il faudra évidemment afficher la ligne cachée pour la voir à l'écran !
 
Dernière édition:

Lone-wolf

XLDnaute Barbatruc
Re Lionel, bonjour Roland :)

@ Lionel: tu ne peux pas te démerder à les trouver tout seul ?? Tu as besoin de Roland pour ça?! :p :D
 

Roland_M

XLDnaute Barbatruc
re

reprend cette macro, et dis nous quoi !?

EDIT: Lionel, reprendre la macro !
J'ai corrigée la recherche pour entier ou pas !?

Code:
Private Sub RechercheQuoi(Quoi As Variant)
Application.EnableEvents = False
'Application.ScreenUpdating = False '<non pour affichage trouvé!?
Dim Sh As Worksheet, Trouve As Range, SvgAdres$, T$, M$, F$, AdresSource$

F$ = ActiveSheet.Name
Select Case F$
  Case "Feuil1": AdresSource$ = "G9"
  Case "Feuil2": AdresSource$ = "G9"
  Case "Feuil3": AdresSource$ = "G9"
  Case "Feuil4": AdresSource$ = "G9"
  Case Else: Exit Sub '
End Select

T = "Pas"
'boucle feuilles
For Each Sh In Worksheets
    Set Trouve = Sh.Cells.Find(Quoi, LookIn:=xlFormulas, LookAt:=xlPart, MatchCase:=False, SearchOrder:=xlByRows, SearchDirection:=xlNext)
    If Not Trouve Is Nothing Then
       Sh.Activate: SvgAdres = Trouve.Address 'active feuille
       If InStr(Quoi, "*") > 0 Or Range(Trouve.Address) = Quoi Then 'test entier ou pas !?
          'n'affiche pas la cellule source
          If Trouve.Address(False, False) <> AdresSource$ Then
             T = "Plus ": Trouve.Rows.Hidden = False: Trouve.Select
             M$ = "Trouvé !" & vbLf & "Feuille: " & Sh.Name & vbLf & "Adresse: " & Trouve.Address(False, False) & vbLf & vbLf & "Recherche suivant ?"
             If MsgBox(M$, vbYesNo, "Recherche de " & Quoi) = vbNo Then Exit Sub
          End If
          Do 'boucle sur même feuille
            Set Trouve = Cells.FindNext(Trouve)
            If Trouve Is Nothing Then Exit Do 'en 1'
            If Trouve.Address = SvgAdres Then Exit Do 'si retour à la 1'trouvée exit do feuil.suivante
            If InStr(Quoi, "*") > 0 Or Range(Trouve.Address) = Quoi Then  'test entier ou pas !?
               T = "Plus ": Trouve.Rows.Hidden = False: Trouve.Select
               M$ = "Trouvé !" & vbLf & "Feuille: " & Sh.Name & vbLf & "Adresse: " & Trouve.Address(False, False) & vbLf & vbLf & "Recherche suivant ?"
               If MsgBox(M$, vbYesNo, "Recherche de " & Quoi) = vbNo Then Exit Sub
            End If
          Loop
       End If
    End If
Next
If T = "Pas" Then
  MsgBox "Recherche infructueuse !", , "Oups"
  Unload fm_SaisieRecherche
Else
  MsgBox "Recherche terminéee !", , "Très bon boulot ..."
  Unload fm_SaisieRecherche
End If
Application.EnableEvents = True
Application.ScreenUpdating = True
End Sub
 
Dernière édition:

arthour973

XLDnaute Barbatruc
Supporter XLD
LOL Lone tu as bouffé du lion aujourd'hui ? ;)
Juste pour te répondre, j'ai fait des recherches et des essais multiples mais je ne suis pas tombé sur la solution.

Bonsoir Roland,
Je ne sais encore koi te dire car c'est vraiment important pour mon boulot.
Je teste et je reviens tout à l'heure.
Merci Roland :)
 

Lone-wolf

XLDnaute Barbatruc
Re Lionel

"Mais je ne suis pas tombé sur la solution". Arrrrggg!!! :eek: Heureusement!! :confused: Sinon tu l'aurais éclaffé la pauvre! :D
 

Roland_M

XLDnaute Barbatruc
Bonjour tout le monde,

Lionel si tu veux bien reprendre ta macro que j'ai mis au Post#6
J'ai corrigée la recherche pour entier ou pas !?
 

arthour973

XLDnaute Barbatruc
Supporter XLD
Bonjour Roland,

J'ai intégré ton code mais ça ne marchait pas (je n'ai pas eu le temps de voir pourquoi).
Mais j'ai travaillé LOL.
J'ai modifié le code de la façon suivante :
Code:
Private Sub RechercheQuoi(Quoi As Variant)
'Application.EnableEvents = False
'Application.ScreenUpdating = False
Dim Sh As Worksheet, Trouve As Range, SvgAdres$, T$, M$, F$, AdresSource$

F$ = ActiveSheet.Name
Select Case F$
  Case "Feuil1": AdresSource$ = "G9"
  Case "Feuil2": AdresSource$ = "G9"
  Case "Feuil3": AdresSource$ = "G9"
  Case "Feuil4": AdresSource$ = "G9"
  Case Else: Exit Sub '
End Select

T = "Pas"
'Quoi = Format(Quoi, "0#"" ""##"" ""##"" ""##"" ""##")'< ceci uniquement si tu veux rechercher avec no formaté
'boucle feuilles
For Each Sh In Worksheets
    Set Trouve = Sh.Cells.Find(Quoi, LookIn:=xlFormulas, LookAt:=xlPart, MatchCase:=False, SearchOrder:=xlByRows, SearchDirection:=xlNext)
  
    If Not Trouve Is Nothing Then
       Sh.Activate: SvgAdres = Trouve.Address
       'n'affiche pas la cellule source
       If Trouve.Address(False, False) <> AdresSource$ Then
          Trouve.Select
          Selection.EntireRow.Hidden = False
          M$ = "Trouvé !" & vbLf & "Feuille: " & Sh.Name & vbLf & "Adresse: " & Trouve.Address(False, False) & vbLf & vbLf & "Recherche suivant ?"
          If MsgBox(M$, vbYesNo, "Recherche de " & Quoi) = vbNo Then Exit Sub 'MsgBox "Recherche arrêtée !", , "Oups":
          T = "Plus "
       End If
       '
       Do 'boucle sur même feuille
         Set Trouve = Sh.Cells.FindNext(Trouve)
         If Trouve Is Nothing Then Exit Do 'en 1'
         If Trouve.Address = SvgAdres Then Exit Do 'si retour à la 1'trouvée exit do feuil.suivante
         T = "Plus ": Trouve.Select
         Selection.EntireRow.Hidden = False
         M$ = "Trouvé !" & vbLf & "Feuille: " & Sh.Name & vbLf & "Adresse: " & Trouve.Address(False, False) & vbLf & vbLf & "Recherche suivant ?"
         If MsgBox(M$, vbYesNo, "Recherche de " & Quoi) = vbNo Then Exit Sub 'MsgBox "Recherche arrêtée !", , "Oups":
       Loop
    End If
Next
If T = "Pas" Then
  MsgBox "Recherche infructueuse !", , "Oups"
  Unload fm_SaisieRecherche
Else
  MsgBox "Recherche terminéee !", , "Très bon boulot ..."
  Unload fm_SaisieRecherche
End If
Application.EnableEvents = True
Application.ScreenUpdating = True
End Sub
Et ça marche nickel,

Je joins le fichier modifié.
Merci Roland ;)
Amicalement,
Lionel,
 

Fichiers joints

Roland_M

XLDnaute Barbatruc
re

mais ce n'est pas du tout la macro que t'ai faite !?
et je peux te dire que ça fonctionné !

tu as repris celle qui ne fonctionnait pas avec la recherche entier !
c'est à dire l'ancienne avec simplement la modif formulas !

tu es difficile à suivre ! j'ai travaillé pour rien !
c'est vraiment dommage car cette macro était parfaite en tout point !

pour preuve ton classeur essai avec ma macro !

EDIT: c'est la version 3 ! je m'étais trompé avec tout ça j'avais mis version 2 !
 

Fichiers joints

Dernière édition:

Discussions similaires


Haut Bas