Find (sans quitter le filtrage en cours)

Comme je vous écrit dans mon post précédent.
Avec la méthode FIND, lorsque vous lancez une Recherche :

- si le numéro cherché existe dans la feuille mais qu'il se trouve dans une ligne masquée par un filtre, le code vous renverra une erreur parce que valeur n'est pas trouvée.
- si le numéro existe dans la feuille et se trouve dans une ligne non masquée par un filtre, le code vous affichera le message avec la référence de la cellule

- si le numéro cherché existe 2 fois ou plus dans la feuille, le code vous affichera le message avec la référence de la cellule pour chaque valeur trouvée si la ligne est non masquée

Donc si vous voulez afficher les lignes filtrées, vous n'avez d'autres choix que de défiltrer avant et boucler sur chaque cellule de la colonne K.
Pour la question de votre filtrage en cours que vous voulez garder, vous pourriez définir une variable Public qui est activée lors du click dans l'userform et une fois le code recherche lancé vous utilisez cette variable pour ne pas masquer les lignes dont la valeur de la variable est trouvée en colonne A
exemple :
- vous cliquez sur Capifrance dans l'usf
- on déclare la variable "Valeur = Capifrance"
- on choisit de rechercher sur le numero 33111111111
- on défiltre la feuille dans le code recherche
- on boucle sur toutes les lignes en colonne K en mettant une condition que si le numero et/ou la variable Valeur ne sont pas trouvées, on masque la ligne

Merci Dan pour avoir pris le temps de m'expliquer :)

Je me doutais bien que ce n'est pas possible Snifff !

"vous pourriez définir une variable Public"

Nul en VBAQ, je ne sais pas faire ... je vais chercher,

lionel :)

re

Juste au dessus de Sub recherche, mettez ceci -->

Public Valeur

Ensuite allez dans votre USF et modifiez ces lignes (exemple pour Agent Mandataire)

        Case 1 'Réseau 1
            valeur = "Agent Mandataire"
            xrg.AutoFilter Field:=1, Criteria1:=valeur
            xrg.AutoFilter Field:=2, Criteria1:=""

Faites de même pour les autres

Dites moi si ok

Edit : pour le Case = 0; mettez ceci

        Case 0  'NON filtré
            Range("a5:zz1000").AutoFilter
            valeur = ""

Merci Dan pour vos efforts mais ça ne fonctionne pas.

Avec la déclaration "Public Valeur", dès la 1ère recherche, il n'affiche plus la ligne du N° Cherché.

Mais vous m'avez appris la déclaration "Public Valeur" et je vous en remercie.

Il va falloir m'y résoudre, il n'y a pas de solution.

Je m'accrochais à cet espoir :

J'ai remarqué que le 1er numéro cherché est toujours trouvé et la ligne affichée.

Existe-t-il un moyen pour que que le numéro cherché soit toujours considéré comme "LE 1er NUMERO CHERCHE" ?

Y'a pas moyen de lui faire "croire" que c'est toujours la 1ère recherche ? lol

lionel :)

appliquer un filtre sur la feuille "Appels" et puis doubleclick sur un valeur de la feuille "Nr_à_Rechercher"

dans la module de "Nr_à_rechercher"

Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean)
     If Intersect(Target, Range("B:C")) Is Nothing Then Exit Sub     'doubleclick dans colonnes B:C
     If Target.Value = "" Then Exit Sub     'cellule n'est pas vide
     Cancel = True
     Montrer Target.Value     'montrer les lignes avec ce valeur
     Application.StatusBar = Target.Value & " okay"
End Sub

dans une module normale

Sub Montrer(sTexte)
     Set dict = CreateObject("scripting.dictionary")
     With Sheets("Appels")
           arr = .UsedRange.Value2 'la plage à inspecter (ici toute la feuille)  >>> array
          For i = 1 To UBound(arr) 'boucle les lignes
               dict.Add dict.Count, Range("Myrange")(i, 1).Address & "|" & Join(Application.Index(arr, i, 0), "|") 'ajouter au dictionary : l'addresse de la cellule A & le contenu de toute la ligne
          Next
          fl = Filter(Application.Index(dict.items, 0, 0), sTexte, 1, vbTextCompare) 'filtre les lignes avec le texte voulu
          If UBound(fl) > -1 Then 'il y a des lignes comme-çà
               Set UN = .Range("B1") 'une cellulle dehors colonne A
               For i = 0 To UBound(fl) 'boucle toutes ces lignes
                    Set UN = Union(UN, .Range(Split(fl(i), "|")(0))) 'ajouter au place "UN"
               Next
               Set UN = Intersect(UN, .Columns("A"))
     'MsgBox UN.Address & vbLf & .ProtectionMode '& vbLf & .protectcontents
               If Not .ProtectionMode And .ProtectContents Then
                    .Unprotect
                    .Protect userinterfaceonly:=True
               End If
               UN.EntireRow.Hidden = False
          End If

     End With
End Sub

Bonjour BsAlv :)
Merci à toi, ça semble juste génial !!!

Allé, le beurre et l'argent du beurre lol
Est-il possible d'avoir le même résultat en saisissant le N° à cherche directement au clic sur le bouton "Recherche".
Ce serait plus optimum que d'aller dans la feuille "Nr_à_rechercher" qui n'est la que pour les tests.
En situation de travail, cette feuille n'existe pas.
Ce serait top top top !
lionel :)

Avec la déclaration "Public Valeur", dès la 1ère recherche, il n'affiche plus la ligne du N° Cherché.

Mais vous m'avez appris la déclaration "Public Valeur" et je vous en remercie.

Si cela fonctionne très bien même

Cordialement

Re Dan,

J'en suis désolé mais j'ai pourtant fait ce que vous m'avez indiqué (me semble-t-il) et ça n'a pas fonctionné mais je vais tenter à nouveau :)

regardez cette solution juste pour voir si cela vous intéresse toujours

Pour le test, cliquez sur tout filtrer
Puis faites votre recherche

vous voulez dire sur "NON filtré", je pense :)

J'ai tenté de filtrer sur un réseau :

A la 1ère recherche ça fonctionne mais à la seconde ça ne fonctionne plus ou j'ai encore rien compris lol :)

Oui désolé

A la 1ère recherche ça fonctionne mais à la seconde ça ne fonctionne plus ou j'ai encore rien compris lol :)

pas compris là...

A la 1ère recherche ça fonctionne mais à la seconde ça ne fonctionne plus ou j'ai encore rien compris lol :)

Faut que je comprenne ce que vous faites

OUI mais je suis toujours filtré sur un réseau avant de faire une recherche :)

re,

je ne sais pas à quoi servent les 5 premières lignes.

Sub Recherche()
     If [p4] > 0 Then
          ActiveCell.Offset(0, 5).Select
          Exit Sub
     End If

     If [m1] = "TEXTBOX OUVERT" Then Exit Sub
     nom = Application.InputBox("Saisir texte/chiffre(s) à trouver :", "Rechercher")
    If Len(nom) > 0 Then Montrer CStr(nom)

End Sub

un problème : la plage de recherche ne peut pas contenir des erreurs !!! Par exemple des cellules comme =1/0 -->diviser par 0 = erreur

OUI mais je suis toujours filtré sur un réseau avant de faire une recherche :)

Faut que vous expliquiez mieux. Votre fichier est sur réseau ?

Re BsAlv

ces 5 lignes sont utiles dans mon fichier de travail mais n'ont aucun effet pour le fichier test :)

Re Dan,

D'abord merci pur votre patience lol

NON le fichier n'est pas sur réseau .... Mais comment expliquer ?

Quand je travaille, je suis toujours sur lignes filtrées et j'ai besoin de pouvoir afficher la ligne (même si elle est hors filtrage) d'un N° cherché sans perdre ou quitter mon filtrage en cours.

Bon sang, je ne sais pas dire mieux Grrr !!! j'en suis désolé

Quand je travaille, je suis toujours sur lignes filtrées et j'ai besoin de pouvoir afficher la ligne (même si elle est hors filtrage) d'un N° cherché sans perdre ou quitter mon filtrage en cours.

Ben le code en tient compte. Mettons que vous cliquez sur Capifrance cela vous donne 3 lignes dans la feuille Appel

puis vous choisissez le code 331111111, avec le bouton recherche.
Cela vous donne les lignes 31111111 et les trois lignes capifrance

Expliquez ce que vous faites si cela ne fonctionne pas

Re Dan :

Voici les résultats obtenus :

sans titre

Vous recliquez sur NON FILTRE avant ?
J'ai l'impression que non....

A mon avis vous filtrez sur expertimo, puis vous choisissez 3311111....18, puis vous choisissez 3311111...22. Juste ?

Re Dan,

"A mon avis vous filtrez sur expertimo, puis vous choisissez 3311111....18, puis vous choisissez 3311111...22. Juste ?" OUI c'est ça puisque je souhaite rester sur mon filtre tout en affichant la ligne du n° trouvé.

Désolé, j'ai le même résultat que le post précédent

Rechercher des sujets similaires à "find quitter filtrage cours"