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 Suberic
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 SubWindows("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").ActivateJe 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