Appliquer une procédure à tous les classeurs excel ouverts

Résolu
Cel1 Messages postés 3 Date d'inscription mardi 13 décembre 2011 Statut Membre Dernière intervention 14 décembre 2011 - 13 déc. 2011 à 22:04
Cel1 Messages postés 3 Date d'inscription mardi 13 décembre 2011 Statut Membre 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 :)

4 réponses

cgandco Messages postés 219 Date d'inscription mercredi 26 octobre 2011 Statut Membre Dernière intervention 22 juin 2017 9
13 déc. 2011 à 22:25
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.
3
Cel1 Messages postés 3 Date d'inscription mardi 13 décembre 2011 Statut Membre Dernière intervention 14 décembre 2011
14 déc. 2011 à 11:47
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
0
cgandco Messages postés 219 Date d'inscription mercredi 26 octobre 2011 Statut Membre Dernière intervention 22 juin 2017 9
14 déc. 2011 à 12:28
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.
0
Cel1 Messages postés 3 Date d'inscription mardi 13 décembre 2011 Statut Membre Dernière intervention 14 décembre 2011
14 déc. 2011 à 14:58
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
0
Rejoignez-nous