VBA - Fusionner plusieurs macros
Bonjour à tous,
Pourriez-vous m'aider à fusionner plusieurs macros s'il vous plaît ?
Explications :
Macros :
mise_en_page_csv_pays - utilisée sur les feuilles : AMZN UK / AMZN DE / AMZN FR / AMZN IT / AMZN ES
mise_en_page_csv_eu - utilisée sur la feuille : EU
et après avoir utilisé les deux macro ci-dessus j'utilise la macro :
country_formula sur les feuilles : AMZN UK / AMZN DE / AMZN FR / AMZN IT / AMZN ES
Pour les feuilles AMZN UK / AMZN DE / AMZN FR / AMZN IT / AMZN ES, j'ai besoin de faire une mise en forme qui supprime les 6 premières lignes et paramètre les nombres dans le bon format avec les bons séparateurs. Puis j'ai besoin d'insérer 2 colonnes avec des formules à gauche de la colonne [Ventes de produits].
1ère colonne [Names] avec les noms des clients
2ème colonne [Country] pays de livraison
Je n'ai pas su fusionner les codes mise_en_page_csv_pays & country_formula qui font la même chose si vous regardez (sauf la mise en forme qui est faite par la macro mise_en_page_csv_pays)
Après cela, ce serait bien de fusionner toutes ces macros en une avec application sur différentes feuilles
Sur les feuilles : AMZN UK / AMZN DE / AMZN FR / AMZN IT / AMZN ES les macros mise_en_page_csv_pays & country_formula
Sur la feuille : EU la macro mise_en_page_csv_eu
J'espère avoir bien expliqué ma demande et que quelqu'un pourra m'aider avec cela.
Je vous joint les codes ci-dessous :
- mise_en_page_csv_pays
Sub mise_en_page_csv_pays()
'
Application.ScreenUpdating = False
Columns("A:A").TextToColumns Destination:=Range("A1"), DataType:=xlDelimited, _
TextQualifier:=xlDoubleQuote, ConsecutiveDelimiter:=False, Tab:=False, _
Semicolon:=False, Comma:=True, Space:=False, Other:=False, FieldInfo _
:=Array(Array(1, 1), Array(2, 1)), TrailingMinusNumbers:=True
Rows("1:6").Delete
Columns("I:I").Select
Selection.SpecialCells(xlCellTypeBlanks).Select
Selection.EntireRow.Delete
Columns("M:M").Select
Selection.Insert Shift:=xlToRight, CopyOrigin:=xlFormatFromLeftOrAbove
Range("M1").Select
ActiveCell.FormulaR1C1 = "Names"
Dim DL As Integer
DL = Cells(Application.Rows.Count, "A").End(xlUp).Row
Range("M2:M" & DL).FormulaR1C1 = "=IFERROR(VLOOKUP(RC4,EU!C1:C12,12,FALSE),"""")"
Range("M2").AutoFill Destination:=Range("M2:M" & DL), Type:=xlFillDefault
'Range("N:V")
For col = Asc("N") To Asc("V")
num (col - 64)
Next
Application.ScreenUpdating = True
End Sub
Sub num(col%)
With Columns(col)
.Replace What:="=", Replacement:="""", LookAt:=xlPart, _
SearchOrder:=xlByRows, MatchCase:=False, SearchFormat:=False, _
ReplaceFormat:=False
.Replace What:=".", Replacement:=",", LookAt:=xlPart, _
SearchOrder:=xlByRows, MatchCase:=False, SearchFormat:=False, _
ReplaceFormat:=False
.TextToColumns Destination:=Cells(1, col), DataType:=xlDelimited, _
TextQualifier:=xlDoubleQuote, ConsecutiveDelimiter:=False, Tab:=True, _
Semicolon:=False, Comma:=False, Space:=False, Other:=False, FieldInfo _
:=Array(1, 1), TrailingMinusNumbers:=True
End With
End Sub
- mise_en_page_csv_eu
Sub mise_en_page_csv_eu()
Application.ScreenUpdating = False
Columns("A:A").TextToColumns Destination:=Range("A1"), DataType:=xlDelimited, _
TextQualifier:=xlDoubleQuote, ConsecutiveDelimiter:=False, Tab:=False, _
Semicolon:=False, Comma:=True, Space:=False, Other:=False, FieldInfo _
:=Array(Array(1, 1), Array(2, 1)), TrailingMinusNumbers:=True
'Range("R:W,AO:AP")
For col = Asc("R") To Asc("W")
num (col - 64)
Next
For col = Asc("O") To Asc("P")
num (col - 64 + 26)
Next
Application.ScreenUpdating = True
End Sub
Sub num(col%)
With Columns(col)
.Replace What:="=", Replacement:="""", LookAt:=xlPart, _
SearchOrder:=xlByRows, MatchCase:=False, SearchFormat:=False, _
ReplaceFormat:=False
.Replace What:=".", Replacement:=",", LookAt:=xlPart, _
SearchOrder:=xlByRows, MatchCase:=False, SearchFormat:=False, _
ReplaceFormat:=False
.TextToColumns Destination:=Cells(1, col), DataType:=xlDelimited, _
TextQualifier:=xlDoubleQuote, ConsecutiveDelimiter:=False, Tab:=True, _
Semicolon:=False, Comma:=False, Space:=False, Other:=False, FieldInfo _
:=Array(1, 1), TrailingMinusNumbers:=True
End With
End Sub
- country_formula
Sub country_formula()
Columns("M:M").Select
Selection.Insert Shift:=xlToRight, CopyOrigin:=xlFormatFromLeftOrAbove
Range("M1").Select
ActiveCell.FormulaR1C1 = "Country"
Dim DL As Integer
DL = Cells(Application.Rows.Count, "A").End(xlUp).Row
Range("M2:M" & DL).FormulaR1C1 = "=IFERROR(VLOOKUP(RC4,EU!C1:C32,32,FALSE),"""")"
Range("M2").AutoFill Destination:=Range("M2:M" & DL), Type:=xlFillDefault
End Sub
Bien sûr que je vous joint un fichier avec un exemple des informations et macros à utiliser.
Je vous remercie de toute l'attention que vous porterez à ma demande.
Bonjour
une question : Est-ce que vous pouvez avoir d'autres feuilles AMZN que celles qui sont dans votre fichier ?
Cordialement
Bonjour Dan,
Merci d'être passé sur le sujet, j'espère que vous allez bien.
Pour l'instant, il n'y a que ces marketplaces. Mais je pense que dans quelques mois, il y en aura peut être 1 ou 2 de plus mais le nom des feuilles sera pareil AMZN et 2 lettres ISO du pays.
Voilà un code qui m'avait été proposé par un membre du forum.
Sub Test()
Onglet = Array("AMZN DE", "AMZN FR", "AMZN UK", "AMZN ES", "AMZN IT")
Application.ScreenUpdating = False
For I = 0 To 4
Sheets(Onglet(I)).Select
Columns("A:A").TextToColumns Destination:=Range("A1"), DataType:=xlDelimited, _
TextQualifier:=xlDoubleQuote, ConsecutiveDelimiter:=False, Tab:=False, _
Semicolon:=False, Comma:=True, Space:=False, Other:=False, FieldInfo _
:=Array(Array(1, 1), Array(2, 1)), TrailingMinusNumbers:=True
Rows("1:6").Delete
Columns("I:I").Select
'Selection.SpecialCells(xlCellTypeBlanks).Select
'Selection.EntireRow.Delete
Columns("M:M").Select
Selection.Insert Shift:=xlToRight, CopyOrigin:=xlFormatFromLeftOrAbove
Range("M1").Select
ActiveCell.FormulaR1C1 = "Names"
Dim DL As Integer
DL = Cells(Application.Rows.Count, "A").End(xlUp).Row
Range("M2:M" & DL).FormulaR1C1 = "=IFERROR(VLOOKUP(RC4,EU!C1:C12,12,FALSE),"""")"
Range("M2").AutoFill Destination:=Range("M2:M" & DL), Type:=xlFillDefault
Range("A1").Select
Next I
End Sub
Re
La solution était proche mais essayez plutot ceci :
Sub mise_en_page_csv_pays()
Dim onglet()
Dim DL As Integer
Application.ScreenUpdating = False
onglet = Array("AMZN UK", "AMZN DE", "AMZN FR", "AMZN IT", "AMZN ES")
For i = 0 To UBound(onglet)
With Sheets(onglet(i))
.Columns("A:A").TextToColumns Destination:=.Range("A1"), DataType:=xlDelimited, _
TextQualifier:=xlDoubleQuote, ConsecutiveDelimiter:=False, Tab:=False, _
Semicolon:=False, Comma:=True, Space:=False, Other:=False, FieldInfo _
:=Array(Array(1, 1), Array(2, 1)), TrailingMinusNumbers:=True
.Rows("1:6").Delete
.Columns("I:I").SpecialCells(xlCellTypeBlanks).EntireRow.Delete
.Columns("M:M").Insert Shift:=xlToRight, CopyOrigin:=xlFormatFromLeftOrAbove
.Range("M1").FormulaR1C1 = "Names"
DL = .Cells(Application.Rows.Count, "A").End(xlUp).Row
.Range("M2:M" & DL).FormulaR1C1 = "=IFERROR(VLOOKUP(RC4,EU!C1:C12,12,FALSE),"""")"
.Range("M2").AutoFill Destination:=.Range("M2:M" & DL), Type:=xlFillDefault
End With
For col = Asc("N") To Asc("V")
num (col - 64)
Next
Next i
Application.ScreenUpdating = True
End Sub
Cordialement
Re
La solution était proche mais essayez plutot ceci :
Sub mise_en_page_csv_pays() Dim onglet() Dim DL As Integer Application.ScreenUpdating = False onglet = Array("AMZN UK", "AMZN DE", "AMZN FR", "AMZN IT", "AMZN ES") For i = 0 To UBound(onglet) With Sheets(onglet(i)) .Columns("A:A").TextToColumns Destination:=.Range("A1"), DataType:=xlDelimited, _ TextQualifier:=xlDoubleQuote, ConsecutiveDelimiter:=False, Tab:=False, _ Semicolon:=False, Comma:=True, Space:=False, Other:=False, FieldInfo _ :=Array(Array(1, 1), Array(2, 1)), TrailingMinusNumbers:=True .Rows("1:6").Delete .Columns("I:I").SpecialCells(xlCellTypeBlanks).EntireRow.Delete .Columns("M:M").Insert Shift:=xlToRight, CopyOrigin:=xlFormatFromLeftOrAbove .Range("M1").FormulaR1C1 = "Names" DL = .Cells(Application.Rows.Count, "A").End(xlUp).Row .Range("M2:M" & DL).FormulaR1C1 = "=IFERROR(VLOOKUP(RC4,EU!C1:C12,12,FALSE),"""")" .Range("M2").AutoFill Destination:=.Range("M2:M" & DL), Type:=xlFillDefault End With For col = Asc("N") To Asc("V") num (col - 64) Next Next i Application.ScreenUpdating = True End Sub
Cordialement
Dan,
Merci beaucoup pour votre contribution en effet cela fonctionne à merveille. Voici le code que j'ai utilisé :
Pourriez vous me dire s'il y a quelque chose qui pourrait être simplifié ?
Sub mise_en_page_csv_pays()
Dim onglet()
Dim DL As Integer
Application.ScreenUpdating = False
onglet = Array("AMZN UK", "AMZN DE", "AMZN FR", "AMZN IT", "AMZN ES")
For i = 0 To UBound(onglet)
With Sheets(onglet(i))
.Columns("A:A").TextToColumns Destination:=.Range("A1"), DataType:=xlDelimited, _
TextQualifier:=xlDoubleQuote, ConsecutiveDelimiter:=False, Tab:=False, _
Semicolon:=False, Comma:=True, Space:=False, Other:=False, FieldInfo _
:=Array(Array(1, 1), Array(2, 1)), TrailingMinusNumbers:=True
.Rows("1:6").Delete
.Columns("I:I").SpecialCells(xlCellTypeBlanks).EntireRow.Delete
.Columns("M:M").Insert Shift:=xlToRight, CopyOrigin:=xlFormatFromLeftOrAbove
.Range("M1").FormulaR1C1 = "Names"
DL = .Cells(Application.Rows.Count, "A").End(xlUp).Row
.Range("M2:M" & DL).FormulaR1C1 = "=IFERROR(VLOOKUP(RC4,EU!C1:C12,12,FALSE),"""")"
.Range("M2").AutoFill Destination:=.Range("M2:M" & DL), Type:=xlFillDefault
End With
For col = Asc("N") To Asc("V")
num (col - 64)
Next
Next i
Application.ScreenUpdating = True
End Sub
Sub num(col%)
With Columns(col)
.Replace What:="=", Replacement:="""", LookAt:=xlPart, _
SearchOrder:=xlByRows, MatchCase:=False, SearchFormat:=False, _
ReplaceFormat:=False
.Replace What:=".", Replacement:=",", LookAt:=xlPart, _
SearchOrder:=xlByRows, MatchCase:=False, SearchFormat:=False, _
ReplaceFormat:=False
End With
End Sub
Cela résous le problème de l'application de la macro : mise_en_page_csv_pays sur plusieurs feuilles d'un seul clic (et c'est génial, je vous remercie pour votre aide) mais j'ai toujours 3 macros à utiliser.
Est-il possible de fusionner ces 3 macros en 1 macro à votre avis ?
Je vous remercie de toute l'attention que vous porterez à ma demande.
Bonjour
Est-il possible de fusionner ces 3 macros en 1 macro à votre avis ?
Oui c'est possible mais je ne vous conseille pas de faire cela.
Il vaut mieux avoir de petite macro qui intèragissent entre elles c'est plus facile dans la compréhension.
Mais si vous le voulez cela peut se faire bien entendu
Cordialement
Bonjour
Est-il possible de fusionner ces 3 macros en 1 macro à votre avis ?
Oui c'est possible mais je ne vous conseille pas de faire cela.
Il vaut mieux avoir de petite macro qui intèragissent entre elles c'est plus facile dans la compréhension.
Mais si vous le voulez cela peut se faire bien entendu
Cordialement
Bonjour Dan,
J'espère que vous allez bien.
Je vais suivre votre conseil et laisser comme tel.
Merci beaucoup pour votre aide.
Sujet résolu.
Bonne journée à vous et bonne fin de semaine.