enlever un filtre automatique à la fin de ma macro

steph_f

XLDnaute Nouveau
Bonjour,
j'ai un problème sur une macro, en effet j'ai un fichier avec plusieurs feuilles :
- les 13 premières sont des récap :
ex : - "Véhicules"
- "Administratif"
- "Matériel Informatique"
- "Equipement de protection"
- "Caisse à Outils"
- etc......
- à partir de la 14 ème on a une feuille par salarié avec plusieurs tableaux pour chaque postes sités ci-dessus.

Pour que dans mes récap je puisse avoir l'ensemble des informations de chaques salariés j'ai la macro suivante : (ex pour les véhicules)


Sub Véhicules()

' Macro Copier dans la feuille "Véhicules" à partir de la ligne 10,les 'Cellules de A25 à N221 de chaque Onglet à partir du 14 ème
Sheets("Véhicules").Select
Range("A10").Select
Rows("10:10000").Select
Selection.Delete Shift:=xlUp
For I = 14 To Sheets.Count
Sheets(I).Select
If ActiveSheet.Name = "Véhicules" Then
Sheets(I + 1).Select
End If
ActiveSheet.Range("$A$21:$X$2721").AutoFilter Field:=1, Criteria1:="<>"
Range("A25:n221").Copy
Sheets("Véhicules").Select
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
:=False, Transpose:=False
ActiveCell.Offset(1, 0).Select
Next
End Sub

Celle-ci filtre la colonne A de chaque feuille salarié, afin de ne me recopier que les données qui me sont utiles dans ma récap

j'ai deux problèmes avec cette macro :
1er problème : lorque après le filtre il n'y a plus d'informations dans la sélection A25:n221 ex : un salarié n'a plus de véhicule, alors la macro me recopie toutes les lignes de A 25 à N221 alors qu'elle ne devrais rien copier
2ème problème : je ne sais pas comment faire pour qu'à la fin de ma macro je puisse enlever le filtre automatique que j'ai mis en place dans ma macro(ActiveSheet.Range("$A$21:$X$2721").AutoFilter Field:=1, Criteria1:="<>") car cela me pose des pbs pour d'autres recherches


Je suis débutante alors merci de me donner un petit coup de pouce !!! et pour info mon fichier est trop lourd pour le mettre en fichier joint et je ne sais pas faire autrement
Merci d'avance
 

Gorfael

XLDnaute Barbatruc
Re : enlever un filtre automatique à la fin de ma macro

Salut steph_f et le forum
Déjà, utilises les balises de code (# en mode avancé)

Rappel : Excel fait toujours ce que tu lui demandes de faire, et quelques (rares) fois ce que tu veux qu'il fasse !
Code:
Sub Véhicules()
Sheets("Véhicules").Rows("10:10000").Delete
For I = 14 To Sheets.Count
    With Sheets(I)
        If .Name <> "Véhicules" Then
            .Range("$A$21:$X$2721").AutoFilter Field:=1, Criteria1:="<>"
            'Et ça fonctionne ça ????
            .Range("A25:n221").Copy
            Sheets("Véhicules").cells(rows.count,"A").end(xlUp)(2).PasteSpecial Paste:=xlPasteValues
            .AutoFilterMode = False
        End If
    End With
Next
End Sub
Ta macro, un peu arrangée, mais sans aucune garantie qu'elle fonctionne, le critère de filtre me donne des boutons, comme tes Select/Selection/Active...

je note que tu as 200 lignes de données (lignes de 21 à 221)
1er problème : Ne connaissant pas le fichier, difficile de trouver : en pas-à-pas, ces lignes sont bien filtrées ? En faisant ton filtre manuellement, elles disparaissent bien des lignes visibles ?
2ème problème : Mettre AutofilterMode à false
et pour info mon fichier est trop lourd pour le mettre en fichier joint
petite remarque : ce qu'il nous faut, dans un cas comme ça : Une des feuilles dont l'indice est supérieur à 13, en remplaçant les données confidentielles ces textes par des AA ou AB, etc.
Les dizaines de ton fichier de travail ne servent à rien : une seule suffit et on devrait pouvoir soit recopier 15 fois ta feuille, soit redéfinir ta boucle : le but n'est pas d'avoir tout un fichier de travail, mais juste le minimum de données pour comprendre le problème.

Dans une boucle For, évite de toucher à la variable : en admettant que par un hasard de circonstance, ta feuille "Véhicule" se retrouve en dernier, I= dernier indice => tu fais I=I+1 => Donc, il faut tester que ton nouvel indice ne dépasse pas Sheets.count ou sortir
Tu ne peux pas être sûre de la place de cette feuille, donc, tu l'élimines directement du traitement.

L'utilisation des select est à proscrire dès que possible. À part à ralentir la macro et à déclencher des erreurs quand tu es sur le "mauvais" module, sont utilité est inexistante.
A+
 
Dernière édition:

steph_f

XLDnaute Nouveau
Re : enlever un filtre automatique à la fin de ma macro

Re bjr

Merci pour cette solution qui est super !!! le seul problème c'est que je ne veux pas que ma barre de filtre disparaisse (dans mon cas ligne 21 de chaque feuille de salarié). Je veux juste que mon filtre face réapparaître toute les lignes,même les lignes vierges, à la fin de ma macro. Ou bien y a t il une solution qui ne me copie que les lignes ou, dans la colonne A (des fiches salariés) il y a un "."
J'ai joint un extrait de mon fichier bien sur j'ai été obligée de supprimer énormément de chose mais cette macro peut être testée (bien sur maintenant je ne recherche plus mais feuilles à partir de la 14ème mais à partir de la 3ème)

Je sais j'ai du mal à être clair, je m'en excuse

Merci par avance


Regarde la pièce jointe OCENE Suivi Equipements Salariés essai Macro bis.xlsm
 

Gorfael

XLDnaute Barbatruc
Re : enlever un filtre automatique à la fin de ma macro

Salut steph_f et le forum
le seul problème c'est que je ne veux pas que ma barre de filtre disparaisse
Rappelle-moi ce que dit ton titre ;) ???

Utilise la méthode ShowAllData : au lieu de
Code:
.AutoFilterMode = False
supprimer le filtre auto, il faut mettre
Code:
.ShowAllData
Montrer toutes les données.

Rappel : on se base sur ce que tu demandes, pas sur ce que tu penses demander :cool:.
A+
 

Discussions similaires

Statistiques des forums

Discussions
312 364
Messages
2 087 624
Membres
103 624
dernier inscrit
PhilduMorvan