Bonjour à tous,
J'ai créé la macro suivante qui est censée transposer les données en ligne, à partir de la colonne 25 (avec un max de 23 colonnes à transposer).
Les 24 1ere colonnes sont répétées sur chacune des lignes transposées.
Le problème c'est que pour un tableau de 569 lignes, le programme tourne pendant 3h!
Auriez-vous une proposition pour accélérer le traitement?
Merci d'avance!
Sub Transposition2021()
'stocker le moment de début
Dim MacroDebut As Date
MacroDebut = Now
Application.EnableEvents = False
Application.ScreenUpdating = False
Application.DisplayAlerts = False
'Délaration du classeur
Set Classeur = ThisWorkbook
Dim sNomClasseur As String
sNomClasseur = Classeur.Name
'Supprime l'onglet EXPORT REVIENT
Workbooks(sNomClasseur).Activate
On Error Resume Next
Sheets("EXPORT REVIENT").Delete
'Actualise la requête
Workbooks(sNomClasseur).Queries.Item("GLOBAL REVIENT").Select
Selection.ListObject.QueryTable.Refresh BackgroundQuery:=False
'Suppression des colonnes
Dim table As ListObject
Set table = ActiveSheet.ListObjects("GLOBAL REVIENT")
'Délimite le tableau
Range("A1").Select
derlig = Cells(Cells.Rows.Count, 1).End(xlUp).Row
DerCol = Cells(1, Columns.Count).End(xlToLeft).Column
'Récupérer la plage du tableau
Dim pTableau As Range
'Converti la plage en nombre
Sheets("GLOBAL REVIENT").Range(Cells(2, 25), Cells(derlig, DerCol)).Select
With Selection
.NumberFormat = "0.00"
.Value = .Value
End With
Range("A1").ClearContents
Set pTableau = Sheets("GLOBAL REVIENT").Range(Cells(2, 25), Cells(derlig, DerCol))
'Creer la liste
Dim lignetitre As Integer, colonnetitre As Integer
Dim ligne As Integer, colonne As Integer
Dim cellule As Range
Sheets.Add(After:=Sheets("GLOBAL REVIENT")).Name = "EXPORT REVIENT"
Set cellule = Sheets("EXPORT REVIENT").Range("A2")
Sheets("EXPORT REVIENT").Cells.ClearContents
Range("A1") = "Numéro_dossier_import"
ActiveCell.Offset(0, 1) = "Filiale"
ActiveCell.Offset(0, 2) = "Date_de_chargement"
ActiveCell.Offset(0, 3) = "Compagnie_maritime"
ActiveCell.Offset(0, 4) = "Navire"
ActiveCell.Offset(0, 5) = "Numéro_de_voyage"
ActiveCell.Offset(0, 6) = "POL"
ActiveCell.Offset(0, 7) = "POD"
ActiveCell.Offset(0, 8) = "Numéro_du_BL"
ActiveCell.Offset(0, 9) = "Taille"
ActiveCell.Offset(0, 10) = "EVP"
ActiveCell.Offset(0, 11) = "Type_TC"
ActiveCell.Offset(0, 12) = "Circuit_Import"
ActiveCell.Offset(0, 13) = "Numéro_conteneur"
ActiveCell.Offset(0, 14) = "Flux"
ActiveCell.Offset(0, 15) = "Poids_TONNES"
ActiveCell.Offset(0, 16) = "Volume_chargement"
ActiveCell.Offset(0, 17) = "Volume_global"
ActiveCell.Offset(0, 18) = "N°_CDE"
ActiveCell.Offset(0, 19) = "Date_arrivée"
ActiveCell.Offset(0, 20) = "Liste_Fournisseurs"
ActiveCell.Offset(0, 21) = "Nb_de_palettes"
ActiveCell.Offset(0, 22) = "Date_de_validation"
ActiveCell.Offset(0, 23) = "Taux_Assurance"
ActiveCell.Offset(0, 24) = "Dépense"
ActiveCell.Offset(0, 25) = "Montant"
lignetitre = pTableau.Cells(1).Row
colonnetitre = pTableau.Cells(1).Column
ligne = Sheets("GLOBAL REVIENT").Cells(1).Row
Numéro_dossier_import = Sheets("GLOBAL REVIENT").Cells(1).Column
Filiale = Sheets("GLOBAL REVIENT").Cells(2).Column
Date_de_chargement = Sheets("GLOBAL REVIENT").Cells(3).Column
Compagnie_maritime = Sheets("GLOBAL REVIENT").Cells(4).Column
Navire = Sheets("GLOBAL REVIENT").Cells(5).Column
Numéro_de_voyage = Sheets("GLOBAL REVIENT").Cells(6).Column
POL = Sheets("GLOBAL REVIENT").Cells(7).Column
POD = Sheets("GLOBAL REVIENT").Cells(8).Column
Numéro_du_BL = Sheets("GLOBAL REVIENT").Cells(9).Column
Taille = Sheets("GLOBAL REVIENT").Cells(10).Column
EVP = Sheets("GLOBAL REVIENT").Cells(11).Column
Type_TC = Sheets("GLOBAL REVIENT").Cells(12).Column
Circuit_Import = Sheets("GLOBAL REVIENT").Cells(13).Column
Numéro_conteneur = Sheets("GLOBAL REVIENT").Cells(14).Column
Flux = Sheets("GLOBAL REVIENT").Cells(15).Column
Poids_TONNES = Sheets("GLOBAL REVIENT").Cells(16).Column
Volume_chargement = Sheets("GLOBAL REVIENT").Cells(17).Column
Volume_global = Sheets("GLOBAL REVIENT").Cells(18).Column
N°_CDE = Sheets("GLOBAL REVIENT").Cells(19).Column
Date_arrivée = Sheets("GLOBAL REVIENT").Cells(20).Column
Liste_Fournisseurs = Sheets("GLOBAL REVIENT").Cells(21).Column
Nb_de_palettes = Sheets("GLOBAL REVIENT").Cells(22).Column
Date_de_validation = Sheets("GLOBAL REVIENT").Cells(23).Column
Taux_Assurance = Sheets("GLOBAL REVIENT").Cells(24).Column
Dim celluletableau As Range
For Each celluletableau In pTableau
If celluletableau > 0 Then
cellule = Sheets("GLOBAL REVIENT").Cells(celluletableau.Row, Numéro_dossier_import).Value
cellule.Offset(0, 1) = Sheets("GLOBAL REVIENT").Cells(celluletableau.Row, Filiale).Value
cellule.Offset(0, 2) = Sheets("GLOBAL REVIENT").Cells(celluletableau.Row, Date_de_chargement).Value
cellule.Offset(0, 3) = Sheets("GLOBAL REVIENT").Cells(celluletableau.Row, Compagnie_maritime).Value
cellule.Offset(0, 4) = Sheets("GLOBAL REVIENT").Cells(celluletableau.Row, Navire).Value
cellule.Offset(0, 5) = Sheets("GLOBAL REVIENT").Cells(celluletableau.Row, Numéro_de_voyage).Value
cellule.Offset(0, 6) = Sheets("GLOBAL REVIENT").Cells(celluletableau.Row, POL).Value
cellule.Offset(0, 7) = Sheets("GLOBAL REVIENT").Cells(celluletableau.Row, POD).Value
cellule.Offset(0, 8) = Sheets("GLOBAL REVIENT").Cells(celluletableau.Row, Numéro_du_BL).Value
cellule.Offset(0, 9) = Sheets("GLOBAL REVIENT").Cells(celluletableau.Row, Taille).Value
cellule.Offset(0, 10) = Sheets("GLOBAL REVIENT").Cells(celluletableau.Row, EVP).Value
cellule.Offset(0, 11) = Sheets("GLOBAL REVIENT").Cells(celluletableau.Row, Type_TC).Value
cellule.Offset(0, 12) = Sheets("GLOBAL REVIENT").Cells(celluletableau.Row, Circuit_Import).Value
cellule.Offset(0, 13) = Sheets("GLOBAL REVIENT").Cells(celluletableau.Row, Numéro_conteneur).Value
cellule.Offset(0, 14) = Sheets("GLOBAL REVIENT").Cells(celluletableau.Row, Flux).Value
cellule.Offset(0, 15) = Sheets("GLOBAL REVIENT").Cells(celluletableau.Row, Poids_TONNES).Value
cellule.Offset(0, 16) = Sheets("GLOBAL REVIENT").Cells(celluletableau.Row, Volume_chargement).Value
cellule.Offset(0, 17) = Sheets("GLOBAL REVIENT").Cells(celluletableau.Row, Volume_global).Value
cellule.Offset(0, 18) = Sheets("GLOBAL REVIENT").Cells(celluletableau.Row, N°_CDE).Value
cellule.Offset(0, 19) = Sheets("GLOBAL REVIENT").Cells(celluletableau.Row, Date_arrivée).Value
cellule.Offset(0, 20) = Sheets("GLOBAL REVIENT").Cells(celluletableau.Row, Liste_Fournisseurs).Value
cellule.Offset(0, 21) = Sheets("GLOBAL REVIENT").Cells(celluletableau.Row, Nb_de_palettes).Value
cellule.Offset(0, 22) = Sheets("GLOBAL REVIENT").Cells(celluletableau.Row, Date_de_validation).Value
cellule.Offset(0, 23) = Sheets("GLOBAL REVIENT").Cells(celluletableau.Row, Taux_Assurance).Value
cellule.Offset(0, 24) = Sheets("GLOBAL REVIENT").Cells(ligne, celluletableau.Column).Value
cellule.Offset(0, 25) = celluletableau
Set cellule = cellule.Offset(1, 0)
End If
Next
'Converti en tableau structuré
ActiveSheet.ListObjects.Add(xlSrcRange, Range("A1").CurrentRegion, , xlYes).Name = _
"Tableau1"
'Enregistre le fichier
ActiveWorkbook.Save
Application.EnableEvents = True
Application.ScreenUpdating = True
Application.DisplayAlerts = True
'la fin de l'exécution
MacroFin = Now
'calcul & mise en forme des durées des étapes
MacroTotal_duree = Format(MacroFin - MacroDebut, "hh:mm:ss")
MsgBox "VOS FICHIERS ONT ÉTÉ EXPORTÉS EN : " & MacroTotal_duree
End Sub
J'ai créé la macro suivante qui est censée transposer les données en ligne, à partir de la colonne 25 (avec un max de 23 colonnes à transposer).
Les 24 1ere colonnes sont répétées sur chacune des lignes transposées.
Le problème c'est que pour un tableau de 569 lignes, le programme tourne pendant 3h!
Auriez-vous une proposition pour accélérer le traitement?
Merci d'avance!
Sub Transposition2021()
'stocker le moment de début
Dim MacroDebut As Date
MacroDebut = Now
Application.EnableEvents = False
Application.ScreenUpdating = False
Application.DisplayAlerts = False
'Délaration du classeur
Set Classeur = ThisWorkbook
Dim sNomClasseur As String
sNomClasseur = Classeur.Name
'Supprime l'onglet EXPORT REVIENT
Workbooks(sNomClasseur).Activate
On Error Resume Next
Sheets("EXPORT REVIENT").Delete
'Actualise la requête
Workbooks(sNomClasseur).Queries.Item("GLOBAL REVIENT").Select
Selection.ListObject.QueryTable.Refresh BackgroundQuery:=False
'Suppression des colonnes
Dim table As ListObject
Set table = ActiveSheet.ListObjects("GLOBAL REVIENT")
'Délimite le tableau
Range("A1").Select
derlig = Cells(Cells.Rows.Count, 1).End(xlUp).Row
DerCol = Cells(1, Columns.Count).End(xlToLeft).Column
'Récupérer la plage du tableau
Dim pTableau As Range
'Converti la plage en nombre
Sheets("GLOBAL REVIENT").Range(Cells(2, 25), Cells(derlig, DerCol)).Select
With Selection
.NumberFormat = "0.00"
.Value = .Value
End With
Range("A1").ClearContents
Set pTableau = Sheets("GLOBAL REVIENT").Range(Cells(2, 25), Cells(derlig, DerCol))
'Creer la liste
Dim lignetitre As Integer, colonnetitre As Integer
Dim ligne As Integer, colonne As Integer
Dim cellule As Range
Sheets.Add(After:=Sheets("GLOBAL REVIENT")).Name = "EXPORT REVIENT"
Set cellule = Sheets("EXPORT REVIENT").Range("A2")
Sheets("EXPORT REVIENT").Cells.ClearContents
Range("A1") = "Numéro_dossier_import"
ActiveCell.Offset(0, 1) = "Filiale"
ActiveCell.Offset(0, 2) = "Date_de_chargement"
ActiveCell.Offset(0, 3) = "Compagnie_maritime"
ActiveCell.Offset(0, 4) = "Navire"
ActiveCell.Offset(0, 5) = "Numéro_de_voyage"
ActiveCell.Offset(0, 6) = "POL"
ActiveCell.Offset(0, 7) = "POD"
ActiveCell.Offset(0, 8) = "Numéro_du_BL"
ActiveCell.Offset(0, 9) = "Taille"
ActiveCell.Offset(0, 10) = "EVP"
ActiveCell.Offset(0, 11) = "Type_TC"
ActiveCell.Offset(0, 12) = "Circuit_Import"
ActiveCell.Offset(0, 13) = "Numéro_conteneur"
ActiveCell.Offset(0, 14) = "Flux"
ActiveCell.Offset(0, 15) = "Poids_TONNES"
ActiveCell.Offset(0, 16) = "Volume_chargement"
ActiveCell.Offset(0, 17) = "Volume_global"
ActiveCell.Offset(0, 18) = "N°_CDE"
ActiveCell.Offset(0, 19) = "Date_arrivée"
ActiveCell.Offset(0, 20) = "Liste_Fournisseurs"
ActiveCell.Offset(0, 21) = "Nb_de_palettes"
ActiveCell.Offset(0, 22) = "Date_de_validation"
ActiveCell.Offset(0, 23) = "Taux_Assurance"
ActiveCell.Offset(0, 24) = "Dépense"
ActiveCell.Offset(0, 25) = "Montant"
lignetitre = pTableau.Cells(1).Row
colonnetitre = pTableau.Cells(1).Column
ligne = Sheets("GLOBAL REVIENT").Cells(1).Row
Numéro_dossier_import = Sheets("GLOBAL REVIENT").Cells(1).Column
Filiale = Sheets("GLOBAL REVIENT").Cells(2).Column
Date_de_chargement = Sheets("GLOBAL REVIENT").Cells(3).Column
Compagnie_maritime = Sheets("GLOBAL REVIENT").Cells(4).Column
Navire = Sheets("GLOBAL REVIENT").Cells(5).Column
Numéro_de_voyage = Sheets("GLOBAL REVIENT").Cells(6).Column
POL = Sheets("GLOBAL REVIENT").Cells(7).Column
POD = Sheets("GLOBAL REVIENT").Cells(8).Column
Numéro_du_BL = Sheets("GLOBAL REVIENT").Cells(9).Column
Taille = Sheets("GLOBAL REVIENT").Cells(10).Column
EVP = Sheets("GLOBAL REVIENT").Cells(11).Column
Type_TC = Sheets("GLOBAL REVIENT").Cells(12).Column
Circuit_Import = Sheets("GLOBAL REVIENT").Cells(13).Column
Numéro_conteneur = Sheets("GLOBAL REVIENT").Cells(14).Column
Flux = Sheets("GLOBAL REVIENT").Cells(15).Column
Poids_TONNES = Sheets("GLOBAL REVIENT").Cells(16).Column
Volume_chargement = Sheets("GLOBAL REVIENT").Cells(17).Column
Volume_global = Sheets("GLOBAL REVIENT").Cells(18).Column
N°_CDE = Sheets("GLOBAL REVIENT").Cells(19).Column
Date_arrivée = Sheets("GLOBAL REVIENT").Cells(20).Column
Liste_Fournisseurs = Sheets("GLOBAL REVIENT").Cells(21).Column
Nb_de_palettes = Sheets("GLOBAL REVIENT").Cells(22).Column
Date_de_validation = Sheets("GLOBAL REVIENT").Cells(23).Column
Taux_Assurance = Sheets("GLOBAL REVIENT").Cells(24).Column
Dim celluletableau As Range
For Each celluletableau In pTableau
If celluletableau > 0 Then
cellule = Sheets("GLOBAL REVIENT").Cells(celluletableau.Row, Numéro_dossier_import).Value
cellule.Offset(0, 1) = Sheets("GLOBAL REVIENT").Cells(celluletableau.Row, Filiale).Value
cellule.Offset(0, 2) = Sheets("GLOBAL REVIENT").Cells(celluletableau.Row, Date_de_chargement).Value
cellule.Offset(0, 3) = Sheets("GLOBAL REVIENT").Cells(celluletableau.Row, Compagnie_maritime).Value
cellule.Offset(0, 4) = Sheets("GLOBAL REVIENT").Cells(celluletableau.Row, Navire).Value
cellule.Offset(0, 5) = Sheets("GLOBAL REVIENT").Cells(celluletableau.Row, Numéro_de_voyage).Value
cellule.Offset(0, 6) = Sheets("GLOBAL REVIENT").Cells(celluletableau.Row, POL).Value
cellule.Offset(0, 7) = Sheets("GLOBAL REVIENT").Cells(celluletableau.Row, POD).Value
cellule.Offset(0, 8) = Sheets("GLOBAL REVIENT").Cells(celluletableau.Row, Numéro_du_BL).Value
cellule.Offset(0, 9) = Sheets("GLOBAL REVIENT").Cells(celluletableau.Row, Taille).Value
cellule.Offset(0, 10) = Sheets("GLOBAL REVIENT").Cells(celluletableau.Row, EVP).Value
cellule.Offset(0, 11) = Sheets("GLOBAL REVIENT").Cells(celluletableau.Row, Type_TC).Value
cellule.Offset(0, 12) = Sheets("GLOBAL REVIENT").Cells(celluletableau.Row, Circuit_Import).Value
cellule.Offset(0, 13) = Sheets("GLOBAL REVIENT").Cells(celluletableau.Row, Numéro_conteneur).Value
cellule.Offset(0, 14) = Sheets("GLOBAL REVIENT").Cells(celluletableau.Row, Flux).Value
cellule.Offset(0, 15) = Sheets("GLOBAL REVIENT").Cells(celluletableau.Row, Poids_TONNES).Value
cellule.Offset(0, 16) = Sheets("GLOBAL REVIENT").Cells(celluletableau.Row, Volume_chargement).Value
cellule.Offset(0, 17) = Sheets("GLOBAL REVIENT").Cells(celluletableau.Row, Volume_global).Value
cellule.Offset(0, 18) = Sheets("GLOBAL REVIENT").Cells(celluletableau.Row, N°_CDE).Value
cellule.Offset(0, 19) = Sheets("GLOBAL REVIENT").Cells(celluletableau.Row, Date_arrivée).Value
cellule.Offset(0, 20) = Sheets("GLOBAL REVIENT").Cells(celluletableau.Row, Liste_Fournisseurs).Value
cellule.Offset(0, 21) = Sheets("GLOBAL REVIENT").Cells(celluletableau.Row, Nb_de_palettes).Value
cellule.Offset(0, 22) = Sheets("GLOBAL REVIENT").Cells(celluletableau.Row, Date_de_validation).Value
cellule.Offset(0, 23) = Sheets("GLOBAL REVIENT").Cells(celluletableau.Row, Taux_Assurance).Value
cellule.Offset(0, 24) = Sheets("GLOBAL REVIENT").Cells(ligne, celluletableau.Column).Value
cellule.Offset(0, 25) = celluletableau
Set cellule = cellule.Offset(1, 0)
End If
Next
'Converti en tableau structuré
ActiveSheet.ListObjects.Add(xlSrcRange, Range("A1").CurrentRegion, , xlYes).Name = _
"Tableau1"
'Enregistre le fichier
ActiveWorkbook.Save
Application.EnableEvents = True
Application.ScreenUpdating = True
Application.DisplayAlerts = True
'la fin de l'exécution
MacroFin = Now
'calcul & mise en forme des durées des étapes
MacroTotal_duree = Format(MacroFin - MacroDebut, "hh:mm:ss")
MsgBox "VOS FICHIERS ONT ÉTÉ EXPORTÉS EN : " & MacroTotal_duree
End Sub