corvelc
XLDnaute Occasionnel
Bonjour,
N'étant pas un pro en macro Excel, j'ai ecrit une macro pour faire une mise à jour des données intégrées dans un tableau excel avant la mise à disposition pour mes utilisateurs.
Cette macro utilise de nombreuses boucles et donc met un certain temps pour la mise à jour des données.
Peut-on optimiser le code (au moins les boucles) pour réduire le temps de traitement car le volumétrie augmente toutes les semaines.Actuellement déjà plus de 9800 lignes dans le tableau.
je joints ma macro et merci d'avance pour l'aide apportée.
C.C
Sub Mod2_Maj_Tbl_Source_ACT01()
'Initialisation des variables
Dim LigneD&, NbLigne&, Valcol1, Valcol2, Ligne&
Dim C As Range
LigneD = 2
NbLigne = 0
' select du tableau
Sheets("Extract Globale Artémis-ACT01").Select
Range("A2").CurrentRegion.Select
' Récupere les nombre de ligne du tableau
NbLigne = Selection.Rows.Count
Range("A" & NbLigne).Select
' 1eres Boucles pour suppression des blancs après texte pour les colonnes
' utilisées dans tableau Dynamique
For Each C In Range("D1:d" & [A65536].End(xlUp).Row)
C.Value = Trim(C.Value)
Next C
For Each C In Range("F1:F" & [A65536].End(xlUp).Row)
C.Value = Trim(C.Value)
Next C
For Each C In Range("H1:H" & [A65536].End(xlUp).Row)
C.Value = Trim(C.Value)
Next C
For Each C In Range("O1:O" & [A65536].End(xlUp).Row)
C.Value = Trim(C.Value)
Next C
For Each C In Range("J1:J" & [A65536].End(xlUp).Row)
C.Value = Trim(C.Value)
Next C
'2eme boucle pour remplacement des codes ressources par nom ressources
For Each C In Range("J1:J" & [A65536].End(xlUp).Row)
If C.Value = "4500012833/400057" Then
C.Value = "SELVANADIN FREDDY"
ElseIf C.Value = "4500012200 / 40057" Then
C.Value = "POULIN REMI"
ElseIf C.Value = "4500012201 / 4500057" Then
C.Value = "RASSOUW NICOLAS"
ElseIf C.Value = "4500012097/400057" Then
C.Value = "DE SOUSA MIGUEL"
ElseIf C.Value = "4500012096/400057" Then
C.Value = "DELACATA OLIVIER"
ElseIf C.Value = "4500012199 / 400057" Then
C.Value = "POULIN REMI"
End If
Next C
' 3eme boucle Balaye le tableau et supprime les lignes non valides
For Ligne = LigneD To NbLigne
Valcol1 = Mid$(Cells(NbLigne, 15), 1, 1)
Valcol2 = Cells(NbLigne, 10)
Cells(NbLigne, 1).EntireRow.Select
If Valcol1 = "F" Then
NbLigne = NbLigne - 1
ElseIf Valcol1 = "P" Then
NbLigne = NbLigne - 1
ElseIf Valcol1 = "S" Then
NbLigne = NbLigne - 1
Else
Cells(NbLigne, 1).EntireRow.Delete
NbLigne = NbLigne - 1
End If
Next Ligne
' tri le tableau sur la colonne Code_ProjSys
Range("A1").Select
Selection.Sort Key1:=Range("O2"), Order1:=xlAscending, _
Header:=xlGuess, _
OrderCustom:=1, MatchCase:=False, Orientation:=xlTopToBottom
Range("B2").Select
End Sub
N'étant pas un pro en macro Excel, j'ai ecrit une macro pour faire une mise à jour des données intégrées dans un tableau excel avant la mise à disposition pour mes utilisateurs.
Cette macro utilise de nombreuses boucles et donc met un certain temps pour la mise à jour des données.
Peut-on optimiser le code (au moins les boucles) pour réduire le temps de traitement car le volumétrie augmente toutes les semaines.Actuellement déjà plus de 9800 lignes dans le tableau.
je joints ma macro et merci d'avance pour l'aide apportée.
C.C
Sub Mod2_Maj_Tbl_Source_ACT01()
'Initialisation des variables
Dim LigneD&, NbLigne&, Valcol1, Valcol2, Ligne&
Dim C As Range
LigneD = 2
NbLigne = 0
' select du tableau
Sheets("Extract Globale Artémis-ACT01").Select
Range("A2").CurrentRegion.Select
' Récupere les nombre de ligne du tableau
NbLigne = Selection.Rows.Count
Range("A" & NbLigne).Select
' 1eres Boucles pour suppression des blancs après texte pour les colonnes
' utilisées dans tableau Dynamique
For Each C In Range("D1:d" & [A65536].End(xlUp).Row)
C.Value = Trim(C.Value)
Next C
For Each C In Range("F1:F" & [A65536].End(xlUp).Row)
C.Value = Trim(C.Value)
Next C
For Each C In Range("H1:H" & [A65536].End(xlUp).Row)
C.Value = Trim(C.Value)
Next C
For Each C In Range("O1:O" & [A65536].End(xlUp).Row)
C.Value = Trim(C.Value)
Next C
For Each C In Range("J1:J" & [A65536].End(xlUp).Row)
C.Value = Trim(C.Value)
Next C
'2eme boucle pour remplacement des codes ressources par nom ressources
For Each C In Range("J1:J" & [A65536].End(xlUp).Row)
If C.Value = "4500012833/400057" Then
C.Value = "SELVANADIN FREDDY"
ElseIf C.Value = "4500012200 / 40057" Then
C.Value = "POULIN REMI"
ElseIf C.Value = "4500012201 / 4500057" Then
C.Value = "RASSOUW NICOLAS"
ElseIf C.Value = "4500012097/400057" Then
C.Value = "DE SOUSA MIGUEL"
ElseIf C.Value = "4500012096/400057" Then
C.Value = "DELACATA OLIVIER"
ElseIf C.Value = "4500012199 / 400057" Then
C.Value = "POULIN REMI"
End If
Next C
' 3eme boucle Balaye le tableau et supprime les lignes non valides
For Ligne = LigneD To NbLigne
Valcol1 = Mid$(Cells(NbLigne, 15), 1, 1)
Valcol2 = Cells(NbLigne, 10)
Cells(NbLigne, 1).EntireRow.Select
If Valcol1 = "F" Then
NbLigne = NbLigne - 1
ElseIf Valcol1 = "P" Then
NbLigne = NbLigne - 1
ElseIf Valcol1 = "S" Then
NbLigne = NbLigne - 1
Else
Cells(NbLigne, 1).EntireRow.Delete
NbLigne = NbLigne - 1
End If
Next Ligne
' tri le tableau sur la colonne Code_ProjSys
Range("A1").Select
Selection.Sort Key1:=Range("O2"), Order1:=xlAscending, _
Header:=xlGuess, _
OrderCustom:=1, MatchCase:=False, Orientation:=xlTopToBottom
Range("B2").Select
End Sub