Cel1
Messages postés3Date d'inscriptionmardi 13 décembre 2011StatutMembreDernière intervention14 décembre 2011
-
13 déc. 2011 à 22:04
Cel1
Messages postés3Date d'inscriptionmardi 13 décembre 2011StatutMembreDernière intervention14 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 :)
A voir également:
Appliquer une procédure à tous les classeurs excel ouverts
cgandco
Messages postés218Date d'inscriptionmercredi 26 octobre 2011StatutMembreDernière intervention22 juin 20179 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.
Cel1
Messages postés3Date d'inscriptionmardi 13 décembre 2011StatutMembreDernière intervention14 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
Cel1
Messages postés3Date d'inscriptionmardi 13 décembre 2011StatutMembreDernière intervention14 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é.