Microsoft 365 [VBA Excel] Problème pour Réinitialiser les filtres : fonctionne une ou deux fois...

VirginieG

XLDnaute Nouveau
Supporter XLD
Bonjour,

Je reviens vers vous car j'ai un souci lors de la réinitialisation des filtres (pour remettre à zéro).

Que ce soit avec le script de @job75 ou celui que j'avais avant, ça fonctionne une ou deux fois et plus rien, il refuse de remettre à zéro.

Une idée ?

Sur le fichier d'exemple que j'avais donné dans mes 2 posts précédents il y a peu de données et aucun souci, mais dans mon fichier original qui comporte de nombreuses lignes ça pose problème.

B1 étant ma cellule où sont récupérées et affichées les critères de contre-indications saisies par l'utilisateur.

Voici les 2 solutions tentées :
VB:
Sub RAZ()
'Dans la feuille Feuil1, on remet les filtres à zéro
With Sheets("Feuil1")
   If .AutoFilterMode And .FilterMode Then .ShowAllData
'on vide la cellule B3 où sont affichés les filtres appliqués
[B1] = "Contre-indications : "
End With
End Sub

VB:
Sub RAZ()
Rows.Hidden = False
[B1] = "Contre-Indications : "
End Sub

Si ça peut aider, voici le sujet précédent pour comprendre le rendu final souhaité et le fichier d'exemple.
Sujet précédent : VBA Excel : Filtres au-delà de 2 critères, quelle(s) solution(s) svp ?

Merci encore. ;)

Bonne soirée.
 

Pièces jointes

  • Exemple-HE(1) (1).xlsm
    20.9 KB · Affichages: 3

TooFatBoy

XLDnaute Barbatruc
Bonjour,

Ton filtrage actuel, contrairement au précédent, n'en est pas un.
C'est juste une macro qui va lire le contenu de chaque ligne, ligne après ligne, et va masquer ou non chaque ligne en fonction de son contenu et de la liste des critères.

Il te faut "sélectionner" toutes les lignes et les démasquer.
 

VirginieG

XLDnaute Nouveau
Supporter XLD
Bonjour Marcel,

J'ai juste mis ici le script pour réinitialiser.

Le script entier le voici.
Et il marche pourtant sur mon fichier Excel d'exemple.
Mais deux fois et plus rien quand je l'applique sur mon fichier original.

Faut-il rajouter quelque chose ?

VB:
VB:
Sub Filtrer()
'Touche de raccourci du clavier: Ctrl+q
Dim filtre$, s, critere, x$, i&
filtre = InputBox("Entrez les contre-indications," & vbLf & "le terme entier ou une partie," & vbLf & "séparées par des tirets, exemple acc-ulc :", "Contre-Indications")
If filtre = "" Then Exit Sub
Application.ScreenUpdating = False
RAZ
[B1] = [B1] & filtre
s = Split(filtre, "-") 'critères
With [A3].CurrentRegion
    For i = 2 To .Rows.Count
        For Each critere In s 'critères
            x = LCase(Trim(critere))
            If InStr(LCase(.Cells(i, 3)), x) Then .Rows(i).Hidden = True: Exit For
    Next critere, i
End With
Application.ScreenUpdating = True
End Sub

Sub RAZ()
Rows.Hidden = False
[B1] = "Contre-Indications : "
End Sub

Merci encore. :)
 

VirginieG

XLDnaute Nouveau
Supporter XLD
C'est complexe à faire ?

Est-ce que ce que tu nommes "pseudo filtrage" un filtrage bidouillage ?
Je souhaitais un filtre sur plusieurs critères.
Tu m'avais aidé sur le premier filtrage sur 2 critères.
Mais j'ai besoin que ça filtre sur + que 2 filtrages.
D'où le script que m'a proposé @job75
Qui marche très bien sur une petite liste mais pas sur une grosse.
Enfin si mais je ne peux plus réinitialiser par la suite...

Peux-tu me donner une piste stp ?
 

TooFatBoy

XLDnaute Barbatruc
Non, la méthode que ta macro utilise n'est pas un "bidouillage", c'est une méthode alternative, qui doit fonctionner quel que soit la taille de la liste. ;)

Je dis "pseudo filtrage" parce que ça n'utilise pas les filtres d'Excel.
 

VirginieG

XLDnaute Nouveau
Supporter XLD
Ah ok.

Le filtrage marche impeccable.

C'est lors de la réinitialisation il efface bien ma cellule B1 mais n'affiche pas la liste entière.


Du coup, aurais-tu une idée de ce que je peux tenter stp ?

Quelque chose avec
ActiveSheet.ShowAllData ?
Ou autofilter.ShowAllData ?
Faisable ou non ?

Merci encore.
 

VirginieG

XLDnaute Nouveau
Supporter XLD
(Finalement j'ai testé à l'instant)
Bon, je ne comprends pas mais j'ai réussi quand même.

Lors de la modif de la macro avec
Cells.EntireRow.Hidden = False

ça ne donnait pas de résultat.

J'ai donc copié les scripts dans un nouveau module et là ça marche nickel. et supprimé le module 1 qui posait problème.

Merci beaucoup à vous deux.

Autre question :
Puis-je faire en sorte de simplifier l'ouverture sur d'autres PC pour ne pas toujours avoir à autoriser les macros à l'ouverture ?
Chez moi c'est pas un souci mais quand un autre utilisateur sur un autre PC doit utiliser des macros y'a toujours autoriser les macros qui s'affiche et pour l'utilisateur lambda c'est perturbant.
J'avais vu qu'on pouvait signer (ou quelque chose dans ce sens) une macro pour éviter de devoir changer les paramètres chez l'utilisateur.
==> Sauriez-vous m'aider svp ?

Merci encore.
 

TooFatBoy

XLDnaute Barbatruc
Au fait, ton fichier de #1 fonctionne parfaitement bien chez moi : pas de problème de démasquage des lignes, même après 10 filtrages.


Puis-je faire en sorte de simplifier l'ouverture sur d'autres PC pour ne pas toujours avoir à autoriser les macros à l'ouverture ?
Non, je ne crois pas, car c'est une sécurité. Seul l'utilisateur du PC sur lequel tu copies le fichier peut configurer Excel pour ne plus poser la question.
Si ce que tu indiques existe, j'avoue ne pas connaître. :(
 

VirginieG

XLDnaute Nouveau
Supporter XLD
Entre temps, Je viens de faire une recherche et mis en pratique, je te partage l'info :
Il suffit d'aller dans
C:\Program Files (x86)\Microsoft Office\root\OfficeX (X à remplacer par sa version)
Lancer SelfCert.exe
puis Donner un nom à son certificat.

Puis, dans le projet excel, dans Microsoft Visual Basic où sont nos macros :
Outils > Signature Numérique
choisir sa signature.

Source :
Signer numériquement un Projet VBA
 
Dernière édition:

Membres actuellement en ligne

Aucun membre en ligne actuellement.

Statistiques des forums

Discussions
299 799
Messages
1 979 189
Membres
206 611
dernier inscrit
Ibrahima Ndoye