Appliquer une procédure à tous les classeurs excel ouverts [Résolu]

Messages postés
3
Date d'inscription
mardi 13 décembre 2011
Dernière intervention
14 décembre 2011
- - Dernière réponse : Cel1
Messages postés
3
Date d'inscription
mardi 13 décembre 2011
Dernière intervention
14 décembre 2011
- 14 déc. 2011 à 14:58
Bonjour,

Après avoir écumé les aides et forums VBA, je ne comprends toujours pas où est mon erreur.

Mon problème:
J'ai besoin de filtrer des lignes dans plusieurs classeurs selon un unique critère contenu ds la 2eme colonne.
Le critère "nom" de mon filtre est saisi par l'utilisateur dans une Form.
Les classeurs en question sont tous les classeurs ouverts au moment où je lance la macro (environ 5-6), car je ne travaille pas toujours avec les memes, et ils ne sont jamais dans les mêmes dossiers (ces classeurs ne contiennent qu'une seule feuille).

Mon bout de code actuel est:
Public Sub CommandButton1_Click()
Dim wb As Workbook
Dim ws As Worksheet

For Each wb In Application.Workbooks
For Each ws In wb.Worksheets
Range("$A$1:$I$3302").AutoFilter Field:=2, Criteria1:=Userform_client.TextBox1.Value
Next ws
Next wb
Unload me
End Sub

(J'ai volontairement ajouté la loop pour toutes les feuilles au cas où un jour je travaille sur des fichiers avec plein de feuilles. On ne sait jamais...)

Ma petite procédure marche bien mais uniquement sur la feuille active.

Est-ce vous avez une solution ? Merci d'avance !

Cdt,
Celine
NB: Je dispose d'Excel 2010, Visual Basic For Applications 7.0 et de très peu de connaissances en VBA :)
Afficher la suite 

Votre réponse

4 réponses

Meilleure réponse
Messages postés
219
Date d'inscription
mercredi 26 octobre 2011
Dernière intervention
22 juin 2017
3
Merci
Bonsoir,

comme tu le dis ;

Ma petite procédure marche bien mais uniquement sur la feuille active.


tu n'actives jamais une autre feuille .

alors

soit tu actives tes ws

For Each wb In Application.Workbooks 
For Each ws In wb.Worksheets 
ws.Activate
Range("$A$1:$I$3302").AutoFilter Field:=2, Criteria1:=Userform_client.TextBox1.Value 
Next ws 
Next wb


soit tu definis ton range dans le ws

For Each wb In Application.Workbooks 
For Each ws In wb.Worksheets 
ws.Range("$A$1:$I$3302").AutoFilter Field:=2, Criteria1:=Userform_client.TextBox1.Value 
Next ws 
Next wb


bonne soirée


Faites simple, aussi simple que possible, mais pas simpliste.
A. Einstein.

Dire « Merci » 3

Quelques mots de remerciements seront grandement appréciés. Ajouter un commentaire

Codes Sources 97 internautes nous ont dit merci ce mois-ci

Commenter la réponse de cgandco
Messages postés
3
Date d'inscription
mardi 13 décembre 2011
Dernière intervention
14 décembre 2011
0
Merci
Merci beaucoup, la boucle marche ! Mais pas mon AutoFilter :( Je me permets de redemander un coup de pouce.

Suivant mes mille et un essais, j'obtiens : the command could not be completed by using the range specified. Select a single cell within the range and try the command again. >> j'ai changé Range("$A$1:$I$3302") pour Range("A1")
Mais nouveau bug : Run-time error '1004' AutoFilter method of Range class failed.

Si je remplace mon critère de filtre par une valeur "fixe", cela fonctionne. Comment utiliser la valeur saisie dans le formulaire?

Private Sub CommandButton1_Click()
Dim wb As Workbook
Dim ws As Worksheet
For Each wb In Application.Workbooks
    For Each ws In wb.Worksheets
    ws.Activate
    ActiveSheet.AutoFilterMode = False
    Range("A1").AutoFilter Field:=2, Criteria1:=UserForm1.TextBox1.Value
    Next ws
Next wb
Unload Me
End Sub


Merci d'avance,
Celine
Commenter la réponse de Cel1
Messages postés
219
Date d'inscription
mercredi 26 octobre 2011
Dernière intervention
22 juin 2017
0
Merci
Bonjour,

J'ai testé ton code et chez moi il fonctionne bien avec

ws.Range("$A$1:$I$3302").AutoFilter Field:=2, Criteria1:=Userform_client.TextBox1.Value


ensuite j'ai effacé la valeur en B1 , je supposes que c'est ton problème.

si le titre de la colonne de ton filtre est vide cela te donne une erreur.

Bonne journée



Faites simple, aussi simple que possible, mais pas simpliste.
A. Einstein.
Commenter la réponse de cgandco
Messages postés
3
Date d'inscription
mardi 13 décembre 2011
Dernière intervention
14 décembre 2011
0
Merci
Merci beaucoup cgandco. Toutefois cela ne fonctionne pas chez moi.
Est-ce que le fait d'avoir un fichier personal.xlsb avec mes autres macros peut avoir un impact ?

Pour éprouver mon code j'ai créé un fichier d'essai sans aucune cellule vide que voici: Mon fichier

Question subsidiaire: pas besoin de désactiver/activer AutoFilter avant de filtrer ? J'ai vu que c'était souvent recommandé.

Cdt,
Celine
Commenter la réponse de Cel1

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.