Executer macro dans plusieurs fichiers excels

Bonjour,

Avant de commencer, je precise que je suis newbie en vba. CA va peut etre eviter qu'on me balance des tomates si la reponse etait evidente

Je cherche à executer une macro sur un ensemble de fichiers excel.

J'ai donc un premier bout de code qui va m'ouvrir mes fichiers via une dialog box, qui me lance ma macro puis qui sauve et quitte le fichier.

Ce premier bout de code fonctionne, le voici :

Sub test()
 Const type_fichier As String = "tous fichiers, *.*"
 Dim FichierChoisi As String

  'Choisir un fichier
  FichierChoisi = Application.GetOpenFilename("Fichiers Excel, *.xlsx")
  If FichierChoisi = "" Then Exit Sub

  'ouvrir le fichier
  Workbooks.Open (FichierChoisi)

  'traitement

    Call V_uniques

  'puis à la fin fermer et enregistrer le fichier
  ActiveWorkbook.Close savechanges:=True
End Sub

Là où ça ne marche plus c'est l'execution de la macro...

Ce qu'elle fait, c'est rajouter l'autofiltre, et filtrer 3 colones

puis en copier une dans un nouvel onglet

et garder que les valeurs uniques de cette colonne du nouvel onglet.

Sub V_uniques()
'
' V_uniques Macro
'

'
    Rows("1:1").Select
    Selection.AutoFilter
    Range("BY1").Select
    ActiveSheet.Range("$A$1:$CS$101425").AutoFilter Field:=71, Criteria1:= _
        "Confirmed"
    ActiveSheet.Range("$A$1:$CS$101425").AutoFilter Field:=72, Criteria1:="=4" _
        , Operator:=xlOr, Criteria2:="=5"
    ActiveSheet.Range("$A$1:$CS$101425").AutoFilter Field:=73, Criteria1:=Array _
        ("Active", "New", "Re-Opened"), Operator:=xlFilterValues
    Range("BR1").Select
    Range(Selection, Selection.End(xlDown)).Select
    Selection.Copy
    Sheets.Add After:=ActiveSheet
    ActiveSheet.Paste
    Columns("A:A").Select
    Application.CutCopyMode = False
    ActiveSheet.Range("$A$1:$A$839").RemoveDuplicates Columns:=1, Header:=xlYes
End Sub

Avec F8 le plantage se fait au niveau du Rows("1:1").Select avec le message Run-time error '1004': Application-defined or object-defined error

C'est pour un rendu demain au boulot...

Pour info, si j'enregistre ma macro dans chacun de mes fichiers et l'execute, ca marche.

C'est juste que j'ai +2000 fichiers...

Mille mercis !

Bonjour,

Je n'ai pas fais de test de filtrage mais à ta place, j'utiliserai une variable objet Workbook que le passerai à la Sub "V_uniques" afin d'éviter toutes ambiguïté :

Sub test()

    Dim Cls As Workbook
    Const type_fichier As String = "tous fichiers, *.*"
    Dim FichierChoisi As String

    'Choisir un fichier
    FichierChoisi = Application.GetOpenFilename("Fichiers Excel, *.xlsx")
    If FichierChoisi = "" Then Exit Sub

    'ouvrir le fichier
    Set Cls = Workbooks.Open(FichierChoisi)

    'traitement
    V_uniques Cls

    'puis à la fin fermer et enregistrer le fichier
    Cls.Close True

End Sub

Sub V_uniques(Cls As Workbook)

    Cls.ActiveSheet.Rows("1:1").Select

'    Selection.AutoFilter
'    Range("BY1").Select
'    ActiveSheet.Range("$A$1:$CS$101425").AutoFilter Field:=71, Criteria1:= _
'        "Confirmed"
'    ActiveSheet.Range("$A$1:$CS$101425").AutoFilter Field:=72, Criteria1:="=4" _
'        , Operator:=xlOr, Criteria2:="=5"
'    ActiveSheet.Range("$A$1:$CS$101425").AutoFilter Field:=73, Criteria1:=Array _
'        ("Active", "New", "Re-Opened"), Operator:=xlFilterValues
'    Range("BR1").Select
'    Range(Selection, Selection.End(xlDown)).Select
'    Selection.Copy
'    Sheets.Add After:=ActiveSheet
'    ActiveSheet.Paste
'    Columns("A:A").Select
'    Application.CutCopyMode = False
'    ActiveSheet.Range("$A$1:$A$839").RemoveDuplicates Columns:=1, Header:=xlYes

End Sub

Bonjour,

j'ajouterai qu'il faudrait faire de même pour choisir la feuille à travailler.

Rien ne dit qu'elle sera active à l'ouverture.

Ajouter au début :

Sub V_uniques(Cls As Workbook)
Cls.sheets("ma_feuille").select
    ' .. etc

ou bien par une variable As Sheet

eric

MErci ça marche !

j'ai édité mon post au-dessus, j'avais mal retranscrit une modif de dernière minute

Rechercher des sujets similaires à "executer macro fichiers excels"