Macro trop lente, simplification?

ninanani

XLDnaute Occasionnel
Bonjour a tous, bon debut de journee.

Alors voila, j'ai une macro qui fonctionne parfaitement et repond bien a mes besoins.Seulement elle est assez lente lors de son lancement.

Est ce qu'il y aurait des chose a simplifier pour qu'elle soit plus rapide?


Code:
Sub save()

Sheets("paiement").Unprotect ("estherzina")


Dim der_lig%
der_lig = Sheets("paiement").Range("B65536").End(xlUp).Row + 1
With Sheets("Simple Invoice")
    Sheets("paiement").Range("A" & der_lig).Value = .Range("B10").Value
    Sheets("paiement").Range("B" & der_lig).Value = .Range("G5").Value
  
    Sheets("paiement").Range("D" & der_lig).Value = .Range("A19").Value
    Sheets("paiement").Range("E" & der_lig).Value = .Range("A20").Value
    Sheets("paiement").Range("F" & der_lig).Value = .Range("A21").Value
    Sheets("paiement").Range("G" & der_lig).Value = .Range("A22").Value
    Sheets("paiement").Range("H" & der_lig).Value = .Range("A23").Value
    Sheets("paiement").Range("I" & der_lig).Value = .Range("A24").Value
    Sheets("paiement").Range("J" & der_lig).Value = .Range("A25").Value
    Sheets("paiement").Range("K" & der_lig).Value = .Range("A26").Value
    Sheets("paiement").Range("L" & der_lig).Value = .Range("A27").Value
    Sheets("paiement").Range("M" & der_lig).Value = .Range("A28").Value
    Sheets("paiement").Range("N" & der_lig).Value = .Range("A29").Value
    Sheets("paiement").Range("O" & der_lig).Value = .Range("A30").Value
    Sheets("paiement").Range("P" & der_lig).Value = .Range("A31").Value
    Sheets("paiement").Range("Q" & der_lig).Value = .Range("A32").Value
    Sheets("paiement").Range("R" & der_lig).Value = .Range("A33").Value
    Sheets("paiement").Range("S" & der_lig).Value = .Range("A34").Value
    Sheets("paiement").Range("T" & der_lig).Value = .Range("A35").Value
    Sheets("paiement").Range("U" & der_lig).Value = .Range("C19").Value
    Sheets("paiement").Range("V" & der_lig).Value = .Range("C20").Value
    Sheets("paiement").Range("W" & der_lig).Value = .Range("C21").Value
    Sheets("paiement").Range("X" & der_lig).Value = .Range("C22").Value
    Sheets("paiement").Range("Y" & der_lig).Value = .Range("C23").Value
    Sheets("paiement").Range("Z" & der_lig).Value = .Range("C24").Value
    Sheets("paiement").Range("AA" & der_lig).Value = .Range("C25").Value
    Sheets("paiement").Range("AB" & der_lig).Value = .Range("C26").Value
    Sheets("paiement").Range("AC" & der_lig).Value = .Range("C27").Value
    Sheets("paiement").Range("AD" & der_lig).Value = .Range("C28").Value
    Sheets("paiement").Range("AE" & der_lig).Value = .Range("C29").Value
    Sheets("paiement").Range("AF" & der_lig).Value = .Range("C30").Value
    Sheets("paiement").Range("AG" & der_lig).Value = .Range("C31").Value
    Sheets("paiement").Range("AH" & der_lig).Value = .Range("C32").Value
    Sheets("paiement").Range("AI" & der_lig).Value = .Range("C33").Value
    Sheets("paiement").Range("AJ" & der_lig).Value = .Range("C34").Value
    Sheets("paiement").Range("AK" & der_lig).Value = .Range("C35").Value
    
        
    Sheets("paiement").Range("BC" & der_lig).Value = .Range("G36").Value
    Sheets("paiement").Range("BD" & der_lig).Value = .Range("H36").Value
    Sheets("paiement").Range("BM" & der_lig).Value = .Range("B17").Value
    
    Sheets("paiement").Range("BG" & der_lig).Value = .Range("G37").Value + UserForm7.TextBox1.Value
    Sheets("paiement").Range("BH" & der_lig).Value = .Range("H37").Value + UserForm7.TextBox2.Value
    Sheets("paiement").Range("BI" & der_lig).Value = .Range("G38").Value + UserForm7.TextBox3.Value
    Sheets("paiement").Range("BJ" & der_lig).Value = .Range("H38").Value + UserForm7.TextBox4.Value
    Sheets("paiement").Range("BE" & der_lig).Value = .Range("G39").Value + UserForm7.TextBox5.Value
    Sheets("paiement").Range("BF" & der_lig).Value = .Range("H39").Value + UserForm7.TextBox6.Value
    
      

End With

If Sheets("Simple Invoice").Range("H6").Value > 0 Then
Sheets("paiement").Range("C" & der_lig).Value = Sheets("Simple Invoice").Range("H6").Value
Else
Sheets("paiement").Range("C" & der_lig).Value = Sheets("Simple invoice").Range("G6").Value
End If

UserForm7.Show



Sheets("paiement").Protect ("estherzina")

End Sub

Merci d'avance a ceux qui m'aideront
 

JNP

XLDnaute Barbatruc
Re : Macro trop lente, simplification?

Bonjour Ninanani :),
Si tu mets en début de macro
Code:
Application.ScreenUpdating = False
et en fin
Code:
Application.ScreenUpdating = True
, tu désactivera l'affichage écran et ça devrait mettre le turbo... :D
Pour simplifier, pas évident, je ne vois pas vraiment de continuité permettant de mettre en place une boucle. Mais la boucle ne ferait que de rendre le code plus court, pas son exécution...
Bon courage :cool:
 

James007

XLDnaute Barbatruc
Re : Macro trop lente, simplification?

Exactement dans la même veine que JNP pour l'affichage ...

tu peux aussi économiser du temps et utiliser pour le calcul

Code:
Application.Calculation = xlCalculationManual

Application.Calculation = xlCalculationAutomatic

A+
 

PMO2

XLDnaute Accro
Re : Macro trop lente, simplification?

Bonjour,

A tout hasard essayez le code modifié suivant sur une COPIE de votre classeur

Code:
Sub save_pmo()
Dim S As Worksheet
Dim S2 As Worksheet
Dim R As Range
Dim R2 As Range
Dim der_lig&
Dim var

Set S = Sheets("paiement")
Set S2 = Sheets("Simple Invoice")

S.Unprotect ("estherzina")
der_lig = S.Range("B65536").End(xlUp).Row + 1

S.Range("A" & der_lig).Value = S2.Range("B10").Value
S.Range("B" & der_lig).Value = S2.Range("G5").Value

Set R = S.Range(S.Cells(der_lig, 4), S.Cells(der_lig, 20))
Set R2 = S2.Range("a19:a35")
var = R2
R = Application.WorksheetFunction.Transpose(var)

Set R = S.Range(S.Cells(der_lig, 21), S.Cells(der_lig, 37))
Set R2 = S2.Range("c19:c35")
var = R2
R = Application.WorksheetFunction.Transpose(var)

S.Range("BC" & der_lig).Value = S2.Range("G36").Value
S.Range("BD" & der_lig).Value = S2.Range("H36").Value
S.Range("BM" & der_lig).Value = S2.Range("B17").Value

With UserForm7
  S.Range("BG" & der_lig).Value = S2.Range("G37").Value + .TextBox1.Value
  S.Range("BH" & der_lig).Value = S2.Range("H37").Value + .TextBox2.Value
  S.Range("BI" & der_lig).Value = S2.Range("G38").Value + .TextBox3.Value
  S.Range("BJ" & der_lig).Value = S2.Range("H38").Value + .TextBox4.Value
  S.Range("BE" & der_lig).Value = S2.Range("G39").Value + .TextBox5.Value
  S.Range("BF" & der_lig).Value = S2.Range("H39").Value + .TextBox6.Value
End With

If S2.Range("H6").Value > 0 Then
  S.Range("C" & der_lig).Value = S2.Range("H6").Value
Else
  S.Range("C" & der_lig).Value = S2.Range("G6").Value
End If

UserForm7.Show

S.Protect ("estherzina")

End Sub

Dans la mesure où il n'y aurait aucun plantage ou mauvais résultat (j'ai modifié le code de manière abstraite),
constatez-vous un gain notable en rapidité ?

Cordialement.

PMO
Patrick Morange
 

ninanani

XLDnaute Occasionnel
Re : Macro trop lente, simplification?

Bonjour le fil,

PMO2, j'ai essaye votre solution et je constate un gain de temps. Je vais maintenant le tester sur le fichier reel pour voir si tout fonctionne correctement.
Je vous remercie de vous etre pencher sur mon cas.

Cordialement.
Nina
 

Statistiques des forums

Discussions
312 243
Messages
2 086 551
Membres
103 246
dernier inscrit
blablasss