Bonjour,
j'aurais besoin de vos conseils dans le but d'optimiser ma macro.
Alors j'ai 2 fichiers excel qui ont tous les deux, 2 onglets.
Pour chaque fichier, et chaque onglet je lance ma macro tour à tour.
c'est une histoire de mise en forme
fichier d'origine :
codeart l cajanv lqtéjanv l cafev .....
Fichier de destination
codeart l qte l ca l mois l annee
Au lieu d'avoir les qté et ca en colonne c'est en ligne.
pour le 1er onglet (1800lignes) : 10min
le second (400lignes) :2 min
...
Bref 30 min presque pour tout.
Pouvez vous me conseiller?
Merci d'avance
Voici ma macro :
Sub Transformation2()
'nom des fichiers dans les variables
nomf1 = "fina1.xls"
nomf2 = "fina2.xls"
'ouverture des fichiers fina1 et fina2
Workbooks.Open Filename:= _
"C:\Documents and Settings\user\Mes documents\" & nomf1
Windows("suivi écarts CA 2008_PSA+TO.xls").Activate
Workbooks.Open Filename:= _
"C:\Documents and Settings\user\Mes documents\" & nomf2
Windows(nomf1).Activate
If MsgBox("Voulez vous effacer les anciennes données?", vbYesNo, "Données") = vbYes Then
Windows("fina2.xls").Activate
Columns("A:G").Select
Selection.ClearContents
Windows("fina1.xls").Activate
Columns("A:E").Select
Selection.ClearContents
End If
'en tete fichier 1
Windows(nomf1).Activate
Range("A1").Select
ActiveCell.FormulaR1C1 = "Id"
Range("B1").Select
ActiveCell.FormulaR1C1 = "Client"
Range("C1").Select
ActiveCell.FormulaR1C1 = "Vehicule"
Range("D1").Select
ActiveCell.FormulaR1C1 = "Usine"
Range("E1").Select
ActiveCell.FormulaR1C1 = "Code article"
Range("F1").Select
'en tete fichier 2
ActiveCell.FormulaR1C1 = ""
Windows(nomf2).Activate
'en tete du second fichier
Range("A1").Select
ActiveCell.FormulaR1C1 = "Code article"
Range("B1").Select
ActiveCell.FormulaR1C1 = "Client"
Range("C1").Select
ActiveCell.FormulaR1C1 = "Quantité"
Range("D1").Select
ActiveCell.FormulaR1C1 = "CA"
Range("E1").Select
ActiveCell.FormulaR1C1 = "Véhicule"
Range("F1").Select
ActiveCell.FormulaR1C1 = "Mois"
Range("G1").Select
ActiveCell.FormulaR1C1 = "Année"
'compte le nombre de ligne non vides
Windows(nomf1).Activate
dl = Sheets("feuil1").Range("A" & "65536").End(xlUp).Row
' nombre de ligne dans le fichier d'origine
Windows("suivi écarts CA 2008_PSA+TO.xls").Activate
dl1 = Sheets("suivi écarts TO").Range("A" & "65536").End(xlUp).Row
'plage de selection
zone = "A7:C" & dl1 & ",K7:K" & dl1 & ",N7:N" & dl1
Range(zone).Select
'copie de la plage
Selection.Copy
Windows(nomf1).Activate
cellule = "A" & dl + 1
Range(cellule).Select
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
:=False, Transpose:=False
If Range("A1") = "" Then
Rows("1:1").Select
Application.CutCopyMode = False
Selection.Delete Shift:=xlUp
End If
' colonne code article
co1 = 14
'colonne client
co2 = 2
'1ère colonne qté
co3 = 41
'1ère colonne ca
co4 = 90
'colonne vehicule
co5 = 3
'1ère colonne dans fichier fina code article
cofina = 1
cofina1 = 2
cofina2 = 3
cofina3 = 4
cofina4 = 5
cofina5 = 6
cofina6 = 7
'ligne depart du fichier d'origine
lignedeb = 4
' nombre de ligne dans le fichier fina2
Windows("fina2.xls").Activate
dl2 = Sheets("feuil1").Range("A" & "65536").End(xlUp).Row
lignearriv = dl2 + 1
'Pour j de 1 à la fin (nb de ligne non vide)
For j = 1 To dl1
'pour chaque mois
For mois = 1 To 12
' copie du code article
Windows("suivi écarts CA 2008_PSA+TO.xls").Activate
'valeur de code article dans la variable codeart
codeart = Cells(lignedeb, co1).Value
Windows(nomf2).Activate
'inserer dans la feuille la valeur codeart
Cells(lignearriv, cofina).Value = codeart
'copie du client
Windows("suivi écarts CA 2008_PSA+TO.xls").Activate
client = Cells(lignedeb, co2).Value
Windows(nomf2).Activate
Cells(lignearriv, cofina1).Value = client
'copie de la quantité
Windows("suivi écarts CA 2008_PSA+TO.xls").Activate
qt = Cells(lignedeb, co3).Value
Windows(nomf2).Activate
Cells(lignearriv, cofina2).Value = qt
'copie du CA
Windows("suivi écarts CA 2008_PSA+TO.xls").Activate
CA = Cells(lignedeb, co4).Value
Windows(nomf2).Activate
Cells(lignearriv, cofina3).Value = CA
'copie du vehicule
Windows("suivi écarts CA 2008_PSA+TO.xls").Activate
vehic = Cells(lignedeb, co5).Value
Windows(nomf2).Activate
Cells(lignearriv, cofina4).Value = vehic
'ecriture du mois
Windows(nomf2).Activate
Cells(lignearriv, cofina5).Select
Cells(lignearriv, cofina5).Value = mois
'ecriture de l'année
Windows(nomf2).Activate
Cells(lignearriv, cofina6).Select
Cells(lignearriv, cofina6).Value = 2008
'ajoute 1 à la colonne des quantités
co3 = co3 + 4
'ajoute 4 à la colonne des CA
co4 = co4 + 4
lignearriv = lignearriv + 1
'si mois =12
If mois = 12 Then
'on ajoute 1 à la ligne de départ
lignedeb = lignedeb + 1
'on remet les colonnes à l'initial
co4 = 90
co3 = 41
End If
Next
Next
'sauvegarde
Windows(nomf1).Activate
ActiveWorkbook.Save
Windows(nomf2).Activate
ActiveWorkbook.Save
End Sub
Merci d'avance
Bonne journée
j'aurais besoin de vos conseils dans le but d'optimiser ma macro.
Alors j'ai 2 fichiers excel qui ont tous les deux, 2 onglets.
Pour chaque fichier, et chaque onglet je lance ma macro tour à tour.
c'est une histoire de mise en forme
fichier d'origine :
codeart l cajanv lqtéjanv l cafev .....
Fichier de destination
codeart l qte l ca l mois l annee
Au lieu d'avoir les qté et ca en colonne c'est en ligne.
pour le 1er onglet (1800lignes) : 10min
le second (400lignes) :2 min
...
Bref 30 min presque pour tout.
Pouvez vous me conseiller?
Merci d'avance
Voici ma macro :
Sub Transformation2()
'nom des fichiers dans les variables
nomf1 = "fina1.xls"
nomf2 = "fina2.xls"
'ouverture des fichiers fina1 et fina2
Workbooks.Open Filename:= _
"C:\Documents and Settings\user\Mes documents\" & nomf1
Windows("suivi écarts CA 2008_PSA+TO.xls").Activate
Workbooks.Open Filename:= _
"C:\Documents and Settings\user\Mes documents\" & nomf2
Windows(nomf1).Activate
If MsgBox("Voulez vous effacer les anciennes données?", vbYesNo, "Données") = vbYes Then
Windows("fina2.xls").Activate
Columns("A:G").Select
Selection.ClearContents
Windows("fina1.xls").Activate
Columns("A:E").Select
Selection.ClearContents
End If
'en tete fichier 1
Windows(nomf1).Activate
Range("A1").Select
ActiveCell.FormulaR1C1 = "Id"
Range("B1").Select
ActiveCell.FormulaR1C1 = "Client"
Range("C1").Select
ActiveCell.FormulaR1C1 = "Vehicule"
Range("D1").Select
ActiveCell.FormulaR1C1 = "Usine"
Range("E1").Select
ActiveCell.FormulaR1C1 = "Code article"
Range("F1").Select
'en tete fichier 2
ActiveCell.FormulaR1C1 = ""
Windows(nomf2).Activate
'en tete du second fichier
Range("A1").Select
ActiveCell.FormulaR1C1 = "Code article"
Range("B1").Select
ActiveCell.FormulaR1C1 = "Client"
Range("C1").Select
ActiveCell.FormulaR1C1 = "Quantité"
Range("D1").Select
ActiveCell.FormulaR1C1 = "CA"
Range("E1").Select
ActiveCell.FormulaR1C1 = "Véhicule"
Range("F1").Select
ActiveCell.FormulaR1C1 = "Mois"
Range("G1").Select
ActiveCell.FormulaR1C1 = "Année"
'compte le nombre de ligne non vides
Windows(nomf1).Activate
dl = Sheets("feuil1").Range("A" & "65536").End(xlUp).Row
' nombre de ligne dans le fichier d'origine
Windows("suivi écarts CA 2008_PSA+TO.xls").Activate
dl1 = Sheets("suivi écarts TO").Range("A" & "65536").End(xlUp).Row
'plage de selection
zone = "A7:C" & dl1 & ",K7:K" & dl1 & ",N7:N" & dl1
Range(zone).Select
'copie de la plage
Selection.Copy
Windows(nomf1).Activate
cellule = "A" & dl + 1
Range(cellule).Select
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
:=False, Transpose:=False
If Range("A1") = "" Then
Rows("1:1").Select
Application.CutCopyMode = False
Selection.Delete Shift:=xlUp
End If
' colonne code article
co1 = 14
'colonne client
co2 = 2
'1ère colonne qté
co3 = 41
'1ère colonne ca
co4 = 90
'colonne vehicule
co5 = 3
'1ère colonne dans fichier fina code article
cofina = 1
cofina1 = 2
cofina2 = 3
cofina3 = 4
cofina4 = 5
cofina5 = 6
cofina6 = 7
'ligne depart du fichier d'origine
lignedeb = 4
' nombre de ligne dans le fichier fina2
Windows("fina2.xls").Activate
dl2 = Sheets("feuil1").Range("A" & "65536").End(xlUp).Row
lignearriv = dl2 + 1
'Pour j de 1 à la fin (nb de ligne non vide)
For j = 1 To dl1
'pour chaque mois
For mois = 1 To 12
' copie du code article
Windows("suivi écarts CA 2008_PSA+TO.xls").Activate
'valeur de code article dans la variable codeart
codeart = Cells(lignedeb, co1).Value
Windows(nomf2).Activate
'inserer dans la feuille la valeur codeart
Cells(lignearriv, cofina).Value = codeart
'copie du client
Windows("suivi écarts CA 2008_PSA+TO.xls").Activate
client = Cells(lignedeb, co2).Value
Windows(nomf2).Activate
Cells(lignearriv, cofina1).Value = client
'copie de la quantité
Windows("suivi écarts CA 2008_PSA+TO.xls").Activate
qt = Cells(lignedeb, co3).Value
Windows(nomf2).Activate
Cells(lignearriv, cofina2).Value = qt
'copie du CA
Windows("suivi écarts CA 2008_PSA+TO.xls").Activate
CA = Cells(lignedeb, co4).Value
Windows(nomf2).Activate
Cells(lignearriv, cofina3).Value = CA
'copie du vehicule
Windows("suivi écarts CA 2008_PSA+TO.xls").Activate
vehic = Cells(lignedeb, co5).Value
Windows(nomf2).Activate
Cells(lignearriv, cofina4).Value = vehic
'ecriture du mois
Windows(nomf2).Activate
Cells(lignearriv, cofina5).Select
Cells(lignearriv, cofina5).Value = mois
'ecriture de l'année
Windows(nomf2).Activate
Cells(lignearriv, cofina6).Select
Cells(lignearriv, cofina6).Value = 2008
'ajoute 1 à la colonne des quantités
co3 = co3 + 4
'ajoute 4 à la colonne des CA
co4 = co4 + 4
lignearriv = lignearriv + 1
'si mois =12
If mois = 12 Then
'on ajoute 1 à la ligne de départ
lignedeb = lignedeb + 1
'on remet les colonnes à l'initial
co4 = 90
co3 = 41
End If
Next
Next
'sauvegarde
Windows(nomf1).Activate
ActiveWorkbook.Save
Windows(nomf2).Activate
ActiveWorkbook.Save
End Sub
Merci d'avance
Bonne journée