Appliquer une macro à différents fichiers (noms différents) Excel

Bonjour,

Je fais ce post car je bug un peu sur un problème qui est le suivant. Chaque jour je reçois un fichier .csv, qui n'est pas mis en forme correctement et dans lequel je dois ajouter des colonnes avec des calculs. J'ai donc réalisé une macro avec l'enregistreur qui fonctionne bien.

Mon problème est que je voudrais pouvoir appliquer cette macro à chaque fichiers qui portent des noms différents tous les jours, sans avoir à modifier la partie avec le nom du fichier manuellement dans le code VBA. Existe-t-il un moyen d'automatiser ce traitement ?

Merci pour votre lecture !

Bonjour,

une boite de dialogue pour choisir le fichier.
Appeler ta macro qui s'exécutera sur le fichier ouvert

Sub choisir_fichier()
    Dim nf, wb As Workbook
    nf = Application.GetOpenFilename("Fichiers xl*,*.xl*")
    If Not nf = False Then
        Set wb = Workbooks.Open(Filename:=nf) ' , Password:="1234", UpdateLinks:=3
        ' traitement fichier
        ' ...
    End If
End Sub

eric

PS : remplacer xls par csv

Bonjour eric,

Merci beaucoup pour ta réponse !

Dans ma macro j'ai plusieurs lignes avec des ActiveWorkbook comme ci-dessous. Dois-je supprimer ces lignes ? Car elles font référence à un fichier précis.

ActiveWorkbook.Worksheets("Cortal_very_passive_20230127").Sort.SortFields.Clear
    ActiveWorkbook.Worksheets("Cortal_very_passive_20230127").Sort.SortFields.Add2 _

Tu peux laisser, le fichier actif sera le dernier ouvert.
Pour que ce soit plus propre tu peux aussi remplacer ActiveWorkbook par wb puisque je te l'ai mis en variable.
Pareil pour sauver ou fermer, utiliser wb
ie : wb.Close
eric

J'ai essayé différentes manipulations avec les infos que tu m'as fourni mais j'obtient toujours erreur de compilation "End Sub attendu" je bloque completement.

Je te joints ma macro si jamais tu pouvais me dire si tu arrive à détecter l'erreur ce serait top !

Sub MacroV3()
'
' MacroV3 Macro
'
' Touche de raccourci du clavier: Ctrl+p
'

Sub choisir_fichier()
    Dim nf, wb As Workbook
    nf = Application.GetOpenFilename("Fichiers csv*,*.csv*")
    If Not nf = False Then
        Set wb = Workbooks.Open(Filename:=nf) ' , Password:="1234", UpdateLinks:=3
        ' traitement fichier
        ' ...

    End If
End Sub

    Windows("Cortal_very_passive_20230127.csv").Activate
    Columns("A:A").Select
    Selection.TextToColumns Destination:=Range("A1"), DataType:=xlDelimited, _
        TextQualifier:=xlDoubleQuote, ConsecutiveDelimiter:=False, Tab:=True, _
        Semicolon:=False, Comma:=True, Space:=False, Other:=False, FieldInfo _
        :=Array(Array(1, 1), Array(2, 1), Array(3, 1), Array(4, 1), Array(5, 1), Array(6, 1), _
        Array(7, 1), Array(8, 1), Array(9, 1), Array(10, 1), Array(11, 1), Array(12, 1), Array(13, 1 _
        ), Array(14, 1), Array(15, 1), Array(16, 1), Array(17, 1), Array(18, 1)), _
        TrailingMinusNumbers:=True
    ActiveWindow.ScrollColumn = 2
    Range("S1").Select
    ActiveCell.FormulaR1C1 = "Penny Stock"
    Range("S2").Select
    ActiveCell.FormulaR1C1 = "=IF(RC[-4]<1,""OUI"",""NON"")"
    Range("S2").Select
    Selection.AutoFill Destination:=Range("S2:S183")
    Range("S2:S183").Select
    Range("T1").Select
    ActiveCell.FormulaR1C1 = "Calcul Déviation"
    Range("T2").Select
    ActiveCell.FormulaR1C1 = "=ABS((RC[-10]/RC[-5])-1)"
    Range("T2").Select
    Selection.Style = "Percent"
    Selection.AutoFill Destination:=Range("T2:T183")
    Range("T2:T183").Select
    Range("U1").Select
    ActiveCell.FormulaR1C1 = "A purger"
    Range("U2").Select
    ActiveCell.FormulaR1C1 = _
        "=IF(RC[-2]=""NON"",IF(RC[-1]>70%,""Purge"",""Keep""),IF(RC[-11]<(RC[-6]+1),""Keep"",""Purge""))"
    Range("U2").Select
    Selection.AutoFill Destination:=Range("U2:U183")
    Range("U2:U183").Select
    ActiveWindow.SmallScroll Down:=-21
    Range("V1").Select
    ActiveCell.FormulaR1C1 = "EDA/DMA"
    Range("V2").Select
    ActiveCell.FormulaR1C1 = _
        "=IF(OR(RC[-17]=""11FORN"",RC[-17]=""11CORT""),""DMA"",""EDA"")"
    Range("V2").Select
    Selection.AutoFill Destination:=Range("V2:V183")
    Range("V2:V183").Select
    Range("W1").Select
    ActiveCell.FormulaR1C1 = "IF Client"
    Range("W2").Select
    ActiveCell.FormulaR1C1 = "=IF(RC[-17]=9,""BDDF"",""FORTIS"")"
    Range("W2").Select
    Selection.AutoFill Destination:=Range("W2:W183")
    Range("W2:W183").Select
    Range("Y22").Select
    Columns("L:L").Select
    Selection.TextToColumns Destination:=Range("L1"), DataType:=xlDelimited, _
        TextQualifier:=xlDoubleQuote, ConsecutiveDelimiter:=False, Tab:=True, _
        Semicolon:=False, Comma:=True, Space:=False, Other:=True, OtherChar:= _
        ":", FieldInfo:=Array(Array(1, 1), Array(2, 1)), TrailingMinusNumbers:=True
    Range("L1").Select
    ActiveCell.FormulaR1C1 = "Code MIC"
    Range("M1").Select
    ActiveCell.FormulaR1C1 = "Mnémonique"
    Columns("P:P").Select
    Selection.NumberFormat = "@"
    Selection.TextToColumns Destination:=Range("P1"), DataType:=xlDelimited, _
        TextQualifier:=xlDoubleQuote, ConsecutiveDelimiter:=False, Tab:=True, _
        Semicolon:=False, Comma:=True, Space:=False, Other:=True, OtherChar:= _
        ":", FieldInfo:=Array(1, 2), TrailingMinusNumbers:=True
    Columns("K:K").Select
    Selection.NumberFormat = "#,##0.00"
    Columns("U:U").Select
    ActiveWorkbook.Worksheets("Cortal_very_passive_20230127").Sort.SortFields.Clear
    ActiveWorkbook.Worksheets("Cortal_very_passive_20230127").Sort.SortFields.Add2 _
        Key:=Range("U1:U183"), SortOn:=xlSortOnValues, Order:=xlDescending, _
        DataOption:=xlSortNormal
    With ActiveWorkbook.Worksheets("Cortal_very_passive_20230127").Sort
        .SetRange Range("A2:W183")
        .Header = xlNo
        .MatchCase = False
        .Orientation = xlTopToBottom
        .SortMethod = xlPinYin
        .Apply
    End With
    Selection.FormatConditions.Add Type:=xlTextString, String:="Purge", _
        TextOperator:=xlContains
    Selection.FormatConditions(Selection.FormatConditions.Count).SetFirstPriority
    With Selection.FormatConditions(1).Interior
        .PatternColorIndex = xlAutomatic
        .Color = 255
        .TintAndShade = 0
    End With
    Selection.FormatConditions(1).StopIfTrue = False
    Selection.FormatConditions.Add Type:=xlTextString, String:="Keep", _
        TextOperator:=xlContains
    Selection.FormatConditions(Selection.FormatConditions.Count).SetFirstPriority
    With Selection.FormatConditions(1).Interior
        .PatternColorIndex = xlAutomatic
        .Color = 5287936
        .TintAndShade = 0
    End With
    Selection.FormatConditions(1).StopIfTrue = False
    Windows("Cortal_very_passive_20230127.xlsx").Activate

End Sub
Windows("Cortal_very_passive_20230127.csv").Activate
 ActiveWorkbook.Worksheets("Cortal_very_passive_20230127").Sort.SortFields.Clear
    ActiveWorkbook.Worksheets("Cortal_very_passive_20230127").Sort.SortFields.Add2 _

 With ActiveWorkbook.Worksheets("Cortal_very_passive_20230127").Sort
 Windows("Cortal_very_passive_20230127.xlsx").Activate

Je viens de comprendre l'erreur concernant le sub, mais meme après avoir fractionné j'obtient des erreurs concernant ces 3 lignes que je met en lien.

Notamment sur la première ligne.

Sans fichier c'est mission impossible d'essayer de deviner toutes les erreurs...

Déjà je doute de l'utilité de Windows("Cortal_very_passive_20230127.csv").Activate puisque tu choisis le fichier et il est actif.

Ensuite je lis .Add2 _ , le _ veux dire qu'il y a une suite à la ligne mais tu démarres une autre ligne de code.

Bref, tu as fait de la mierda, recommence en étant plus concentré et attentif à tes copiés-collés
eric

Rechercher des sujets similaires à "appliquer macro differents fichiers noms"