Code VBA trop long à s'exécuter

fopy12

Habitué
Bonjour à tous
J'ai écris un code en m'aidant de l'enregistreur de macro (pour ce qui est de la formule somme.si)
Lorsque j'exécute ce code, il met trop de temps. Je finis par faire ECHAP et là ça me plante tout mon excel. Et je deviens folle :(
J'ai beau cherché, je ne vois pas d'où peut venir le problème. Qui peut m'aider svp
Merci de votre aide :)

Code:
Sub PreparationFeuil1v2()
Application.ScreenUpdating = False
'Concaténer les valeurs des cellules : C1 (Client générique) & I1 (Enseigne) & U1 (Catég. retard)
'Dim PlageConcatenerF1 As Range 'Plage de la colonne Y de la feuille 1
Worksheets(1).Activate
Set PlageConcatenerF1 = Range("X2", Range("X2").End(xlDown)).Offset(, 1)
PlageConcatenerF1.FormulaR1C1 = "=RC[-22]&""-""&RC[-20]"
PlageConcatenerF1.Value = PlageConcatenerF1.Value
'
LastLine1 = Worksheets(2).Range("A" & Rows.Count).End(xlUp).Row

'Renseigner les colonnes Z à AD
For col = 0 To 4
Set PlageColF1 = Range("X2", Range("X2").End(xlDown)).Offset(, 2).Offset(, col)
With PlageColF1
.FormulaR1C1 = "=SUMIF('R2-Echus'!RC22:R" & LastLine1 & "C22,'R1-Encours & CA'!RC25&""-""&R1C,'R2-Echus'!RC14:R" & LastLine1 & "C14)"
.Value = .Value
End With
Next
 

drul

Obscur pro du hardware
Staff
Tu as essayer de réactiver le "screenupdating" a la fin de ta macro, ça pourait aider ... :whistle:
 

fopy12

Habitué


Bonjour Drul et merci de ta réponse
Mais c'est long aussi à s'exécuter
 

tantal_fr

Grand Maître
Bonjour,

Peut-être en utilisant Application.Calculation = xlCalculationManual au début du code pour que les formules ne soit par recalculé à chaque changement.

Pensez à le remettre à automatique juste avant la fin de la macro :
Code:
Application.Calculation = xlCalculationAutomatic

On peut, à tout moment forcer le re-calcul de l'application, une feuille ou une plage de cellule par l'utilisation de la méthode .calculate
 

tantal_fr

Grand Maître
Ensuite, sur le bout de code :
Code:
.FormulaR1C1 = "=SUMIF('R2-Echus'!RC22:R" & LastLine1 & "C22,'R1-Encours & CA'!RC25&""-""&R1C,'R2-Echus'!RC14:R" & LastLine1 & "C14)"

Il y a un risque que cette partie soit fautive,car les références externes, c'est assez long en général.
 

fopy12

Habitué


Bonjour Tantal, alors j'ai essayé Application.Calculation = xlCalculationManual et Application.Calculation = xlCalculationAutomatic au début et à la fin de ma macro, mais rien y fait :(

Je suis d'accord avec toi, c'est la formule qui met du temps à s'exécuter. Comment pourrais je l'améliorer?

 

tantal_fr

Grand Maître
[strike]Et bien tu appelle des fichiers externes, c'est ce qui est long. Il faut trouver le moyen de faire la même chose que tu fait avec des données qui sont dans le classeur.

Je ne connais pas les spécificités de ton projet mais tu peux essayer de copier la feuille en local en début de macro par ex.[/strike]

Edit : En fait "R2-Echus" et "R1-Encours & CA", c'est des feuilles et non des fichier externes :pt1cable:
 

tantal_fr

Grand Maître
Que calcule-tu avec
Code:
.FormulaR1C1 = "=SUMIF('R2-Echus'!RC22:R" & LastLine1 & "C22,'R1-Encours & CA'!RC25&""-""&R1C,'R2-Echus'!RC14:R" & LastLine1 & "C14)"
?

N'y as-t-il pas moyen de calculer autrement ?
 

fopy12

Habitué
oui surement. j'essaie avec un do while not...

Je veux faire la somme d'un ensemble de lignes (se trouvant dant la feuille 2), si un element de la feuille 1 est égal à un élément de la feuille 2.
et mettre cette somme dans la feuille 1.
 
Vous devez vous inscrire ou vous connecter pour répondre ici.
Derniers messages publiés
Statistiques globales
Discussions
730 128
Messages
6 717 853
Membres
1 586 375
Dernier membre
talmo
Partager cette page
Haut