Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

Code VB lent

7 réponses
Avatar
SALUT
Bonjour,

Voilà un bout de code en VB qui fait du copier/coller de données d'un
onglet à un autre, mais celui ci est lent. Pouvez-vous, s'il vous plait,
me dire ce qui peux être amélioré pour le rendre plus rapide.

Je pense que cela doit venir des formules de copier/coller :

'copie le n° d'affaire
Sheets("Previsionnel").Select:Sheets("Previsionnel").Cells(ligne_source,"A").Copy
Sheets("Compilation").Select:Sheets("Compilation").Cells(ligne_cible,"A").Select:ActiveSheet.Paste

Merci d'avance


Sub MAJ_Compilation()

'Déclaration de variable
Dim ligne_source As Integer
Dim colonne_source As Integer
Dim ligne_cible As Integer
Dim semaine As String

'Initialisation de la ligne_source
ligne_source = 4


'Initialisation de colonne_source
colonne_source = 5
semaine = InputBox("Entre le n° de semaine en respectant les majuscules,
Exemple : W03 pour W03")
Sheets("Previsionnel").Select
While Sheets("Previsionnel").Cells(3, colonne_source) <> semaine
colonne_source = colonne_source + 1
Wend

'Initialisation du compteur ligne_cible en fin du tableau
ligne_cible = 1
Sheets("Compilation").Activate: Sheets("Compilation").Select
While Sheets("Compilation").Cells(ligne_cible, "A") <> ""
ligne_cible = ligne_cible + 1
Wend

'Tant qu'il y a des années
Sheets("Previsionnel").Activate
While Sheets("Previsionnel").Cells(1, colonne_source) <> ""


'Tant que dans le previsionnel, la ligne n° d'affaire est <> de vide,
While Sheets("Previsionnel").Cells(ligne_source, "A") <> ""

'Si heure_source <> vide,
If Sheets("Previsionnel").Cells(ligne_source, colonne_source)
<> "" Then

'Copie le n° d'affaire
Sheets("Previsionnel").Select:
Sheets("Previsionnel").Cells(ligne_source, "A").Copy
Sheets("Compilation").Select:
Sheets("Compilation").Cells(ligne_cible, "A").Select: ActiveSheet.Paste

'Copie le lot
Sheets("Previsionnel").Select:
Sheets("Previsionnel").Cells(ligne_source, "B").Select: Selection.Copy
Sheets("Compilation").Select:
Sheets("Compilation").Cells(ligne_cible, "B").Select: ActiveSheet.Paste

'Copie la code
Sheets("Previsionnel").Select:
Sheets("Previsionnel").Cells(ligne_source, "c").Select: Selection.Copy
Sheets("Compilation").Select:
Sheets("Compilation").Cells(ligne_cible, "c").Select: ActiveSheet.Paste

'Copie le Tâche
Sheets("Previsionnel").Select:
Sheets("Previsionnel").Cells(ligne_source, "d").Select: Selection.Copy
Sheets("Compilation").Select:
Sheets("Compilation").Cells(ligne_cible, "d").Select: ActiveSheet.Paste

'Copie l'année
Sheets("Previsionnel").Select:
Sheets("Previsionnel").Cells(1, colonne_source).Select: Selection.Copy
Sheets("Compilation").Select:
Sheets("Compilation").Cells(ligne_cible, "e").Select: ActiveSheet.Paste

'Copie le mois
Sheets("Previsionnel").Select:
Sheets("Previsionnel").Cells(2, colonne_source).Select: Selection.Copy
Sheets("Compilation").Select:
Sheets("Compilation").Cells(ligne_cible, "f").Select: ActiveSheet.Paste

'Copie la semaine
Sheets("Previsionnel").Select:
Sheets("Previsionnel").Cells(3, colonne_source).Select: Selection.Copy
Sheets("Compilation").Select:
Sheets("Compilation").Cells(ligne_cible, "g").Select: ActiveSheet.Paste

'Copie le nombre d'heure
Sheets("Previsionnel").Select:
Sheets("Previsionnel").Cells(ligne_source, colonne_source).Select:
Selection.Copy
Sheets("Compilation").Select:
Sheets("Compilation").Cells(ligne_cible, "H").Select: ActiveSheet.Paste

'Copie le nombre d'heure
Sheets("Compilation").Select:
Sheets("Compilation").Cells(ligne_cible, "R") = "reprevisionnel"


'Mise au format standard de ligne
Sheets("Compilation").Range(Cells(ligne_cible, 1),
Cells(ligne_cible, "R")).Select
Selection.Borders(xlDiagonalDown).LineStyle = xlNone
Selection.Borders(xlDiagonalUp).LineStyle = xlNone
Selection.Borders(xlEdgeLeft).LineStyle = xlNone
Selection.Borders(xlEdgeTop).LineStyle = xlNone
Selection.Borders(xlEdgeBottom).LineStyle = xlNone
Selection.Borders(xlEdgeRight).LineStyle = xlNone
Selection.Borders(xlInsideVertical).LineStyle = xlNone
Selection.Borders(xlInsideHorizontal).LineStyle = xlNone
Selection.Font.Bold = False


ligne_cible = ligne_cible + 1 'passer à la ligne
suivante dans la feuille compilation

End If

ligne_source = ligne_source + 1 'passer l'heure suivante

Wend

colonne_source = colonne_source + 1
ligne_source = 4

Wend

End Sub

7 réponses

Avatar
FFO
Salut à toi

Je mettrais les différentes procédures de recopie ainsi :
'Copie le n° d'affaire
Sheets("Previsionnel").Cells(ligne_source, "A").Copy
Sheets("Compilation").Cells(ligne_cible, "A")

Reproduits à l'identique pour toutes les copies et dis moi !!!!
Avatar
SALUT
FFO a écrit :
Salut à toi

Je mettrais les différentes procédures de recopie ainsi :
'Copie le n° d'affaire
Sheets("Previsionnel").Cells(ligne_source, "A").Copy
Sheets("Compilation").Cells(ligne_cible, "A")

Reproduits à l'identique pour toutes les copies et dis moi !!!!




Merci pour ce retour,
Mais raccourci ne fonctionne pas :
Sheets("Previsionnel").Cells(ligne_source, "A").Copy
Sheets("Compilation").Cells(ligne_cible, "A").Paste

Message d'erreur " Erreur d'exécution 438, propriété ou méthode non
gérer par cet objet"

As tu une autre idée ?
Avatar
Daniel.C
Bonjour.
La commande de FFO doit tenir sur une seule ligne.
Sinon, mettre :
Sheets("Previsionnel").Cells(ligne_source, "A").Copy _
Sheets("Compilation").Cells(ligne_cible, "A")
sur deux lignes.
Daniel

FFO a écrit :
Salut à toi

Je mettrais les différentes procédures de recopie ainsi :
'Copie le n° d'affaire Sheets("Previsionnel").Cells(ligne_source, "A").Copy
Sheets("Compilation").Cells(ligne_cible, "A")

Reproduits à l'identique pour toutes les copies et dis moi !!!!




Merci pour ce retour,
Mais raccourci ne fonctionne pas :
Sheets("Previsionnel").Cells(ligne_source, "A").Copy
Sheets("Compilation").Cells(ligne_cible, "A").Paste

Message d'erreur " Erreur d'exécution 438, propriété ou méthode non gérer par
cet objet"

As tu une autre idée ?


Avatar
FdeCourt
Salut,

Essayes avec cette macro (sur un classeur de test)

Sub MAJ_Compilation()

'Déclaration de variable
Dim ligne_source As Integer
Dim colonne_source As Integer
Dim ligne_cible As Integer
Dim semaine As String
StatutCalcul = Application.Calculation
Application.Calculation = xlCalculationManual
'Initialisation de la ligne_source
ligne_source = 4

'Initialisation de colonne_source
colonne_source = 5
semaine = InputBox("Entre le n° de semaine en respectant les
majuscules, Exemple : W03 pour W03")
While Sheets("Previsionnel").Cells(3, colonne_source) <> semaine
colonne_source = colonne_source + 1
Wend

ligne_cible = Sheets("Compilation").Cells(65536, 1).End(xlUp).Row
+ 1

'Tant qu'il y a des années
While Sheets("Previsionnel").Cells(1, colonne_source) <> ""

'Tant que dans le previsionnel, la ligne n° d'affaire est <>
de vide,
While Sheets("Previsionnel").Cells(ligne_source, "A") <> ""

'Si heure_source <> vide,
If Sheets("Previsionnel").Cells(ligne_source,
colonne_source) <> "" Then

'Copie le n° d'affaire
Sheets("Previsionnel").Cells(ligne_source, "A").Copy
Destination:=Sheets("Compilation").Cells(ligne_cible, "A")

'Copie le lot
Sheets("Previsionnel").Cells(ligne_source, "B").Copy
Destination:=Sheets("Compilation").Cells(ligne_cible, "B")

'Copie la code
Sheets("Previsionnel").Cells(ligne_source, "C").Copy
Destination:=Sheets("Compilation").Cells(ligne_cible, "C")

'Copie le Tâche
Sheets("Previsionnel").Cells(ligne_source, "D").Copy
Destination:=Sheets("Compilation").Cells(ligne_cible, "D")

'Copie l'année
Sheets("Previsionnel").Cells(ligne_source, "E").Copy
Destination:=Sheets("Compilation").Cells(ligne_cible, "E")

'Copie le mois
Sheets("Previsionnel").Cells(ligne_source, "F").Copy
Destination:=Sheets("Compilation").Cells(ligne_cible, "F")

'Copie la semaine
Sheets("Previsionnel").Cells(ligne_source, "G").Copy
Destination:=Sheets("Compilation").Cells(ligne_cible, "G")

'Copie le nombre d'heure
Sheets("Previsionnel").Cells(ligne_source, "H").Copy
Destination:=Sheets("Compilation").Cells(ligne_cible, "H")

'Copie le nombre d'heure
Sheets("Compilation").Cells(ligne_cible, "R") =
"reprevisionnel"

'Mise au format standard de ligne
With Sheets("Compilation").Range(Cells(ligne_cible,
1), Cells(ligne_cible, "R"))
.Borders(xlDiagonalDown).LineStyle = xlNone
.Borders(xlDiagonalUp).LineStyle = xlNone
.Borders(xlEdgeLeft).LineStyle = xlNone
.Borders(xlEdgeTop).LineStyle = xlNone
.Borders(xlEdgeBottom).LineStyle = xlNone
.Borders(xlEdgeRight).LineStyle = xlNone
.Borders(xlInsideVertical).LineStyle = xlNone
.Borders(xlInsideHorizontal).LineStyle = xlNone
.Font.Bold = False
End With

ligne_cible = ligne_cible + 1 'passer à la ligne
'suivante dans la feuille compilation

End If

ligne_source = ligne_source + 1 'passer l'heure
suivante

Wend

colonne_source = colonne_source + 1
ligne_source = 4

Wend
Application.Calculation = StatutCalcul
End Sub


Cordialement,

F.
Avatar
SALUT
Daniel.C a écrit :
Bonjour.
La commande de FFO doit tenir sur une seule ligne.
Sinon, mettre :
Sheets("Previsionnel").Cells(ligne_source, "A").Copy _
Sheets("Compilation").Cells(ligne_cible, "A")
sur deux lignes.
Daniel

FFO a écrit :
Salut à toi

Je mettrais les différentes procédures de recopie ainsi :
'Copie le n° d'affaire Sheets("Previsionnel").Cells(ligne_source,
"A").Copy Sheets("Compilation").Cells(ligne_cible, "A")

Reproduits à l'identique pour toutes les copies et dis moi !!!!




Merci pour ce retour,
Mais raccourci ne fonctionne pas :
Sheets("Previsionnel").Cells(ligne_source, "A").Copy
Sheets("Compilation").Cells(ligne_cible, "A").Paste

Message d'erreur " Erreur d'exécution 438, propriété ou méthode non
gérer par cet objet"

As tu une autre idée ?







Merci c'est déjà plus rapide.
Avatar
FFO
Rebonjour à toi

Attention tu n'as pas scrupuleusement respecté ma proposition
Il n'y a pas l'instruction "Paste" en fin
Tu dois mettre sur une seule ligne ceci :

Sheets("Previsionnel").Cells(ligne_source, "A").Copy
Sheets("Compilation").Cells(ligne_cible, "A")

sans Paste à la fin

Fais des essais et dis moi !!!!!
Avatar
SALUT
FdeCourt a écrit :
Salut,

Essayes avec cette macro (sur un classeur de test)

Sub MAJ_Compilation()

'Déclaration de variable
Dim ligne_source As Integer
Dim colonne_source As Integer
Dim ligne_cible As Integer
Dim semaine As String
StatutCalcul = Application.Calculation
Application.Calculation = xlCalculationManual
'Initialisation de la ligne_source
ligne_source = 4

'Initialisation de colonne_source
colonne_source = 5
semaine = InputBox("Entre le n° de semaine en respectant les
majuscules, Exemple : W03 pour W03")
While Sheets("Previsionnel").Cells(3, colonne_source) <> semaine
colonne_source = colonne_source + 1
Wend

ligne_cible = Sheets("Compilation").Cells(65536, 1).End(xlUp).Row
+ 1

'Tant qu'il y a des années
While Sheets("Previsionnel").Cells(1, colonne_source) <> ""

'Tant que dans le previsionnel, la ligne n° d'affaire est <>
de vide,
While Sheets("Previsionnel").Cells(ligne_source, "A") <> ""

'Si heure_source <> vide,
If Sheets("Previsionnel").Cells(ligne_source,
colonne_source) <> "" Then

'Copie le n° d'affaire
Sheets("Previsionnel").Cells(ligne_source, "A").Copy
Destination:=Sheets("Compilation").Cells(ligne_cible, "A")

'Copie le lot
Sheets("Previsionnel").Cells(ligne_source, "B").Copy
Destination:=Sheets("Compilation").Cells(ligne_cible, "B")

'Copie la code
Sheets("Previsionnel").Cells(ligne_source, "C").Copy
Destination:=Sheets("Compilation").Cells(ligne_cible, "C")

'Copie le Tâche
Sheets("Previsionnel").Cells(ligne_source, "D").Copy
Destination:=Sheets("Compilation").Cells(ligne_cible, "D")

'Copie l'année
Sheets("Previsionnel").Cells(ligne_source, "E").Copy
Destination:=Sheets("Compilation").Cells(ligne_cible, "E")

'Copie le mois
Sheets("Previsionnel").Cells(ligne_source, "F").Copy
Destination:=Sheets("Compilation").Cells(ligne_cible, "F")

'Copie la semaine
Sheets("Previsionnel").Cells(ligne_source, "G").Copy
Destination:=Sheets("Compilation").Cells(ligne_cible, "G")

'Copie le nombre d'heure
Sheets("Previsionnel").Cells(ligne_source, "H").Copy
Destination:=Sheets("Compilation").Cells(ligne_cible, "H")

'Copie le nombre d'heure
Sheets("Compilation").Cells(ligne_cible, "R") > "reprevisionnel"

'Mise au format standard de ligne
With Sheets("Compilation").Range(Cells(ligne_cible,
1), Cells(ligne_cible, "R"))
.Borders(xlDiagonalDown).LineStyle = xlNone
.Borders(xlDiagonalUp).LineStyle = xlNone
.Borders(xlEdgeLeft).LineStyle = xlNone
.Borders(xlEdgeTop).LineStyle = xlNone
.Borders(xlEdgeBottom).LineStyle = xlNone
.Borders(xlEdgeRight).LineStyle = xlNone
.Borders(xlInsideVertical).LineStyle = xlNone
.Borders(xlInsideHorizontal).LineStyle = xlNone
.Font.Bold = False
End With

ligne_cible = ligne_cible + 1 'passer à la ligne
'suivante dans la feuille compilation

End If

ligne_source = ligne_source + 1 'passer l'heure
suivante

Wend

colonne_source = colonne_source + 1
ligne_source = 4

Wend
Application.Calculation = StatutCalcul
End Sub


Cordialement,

F.


Merci, c'est vraiment plus rapide.
Merci :-)