écourter le traitement VBA

BBdoc

XLDnaute Nouveau
Bonjour,

Voilà mon problème, j'ai fait une petite macro avec l'aide du forum pour résoudre certain problème que j'ai rencontré, la macro fonctionne très bien, mais quand je viens pour traiter une vrai nomenclature d'environ 2000 lignes, ça me prend une éternité (environ 10 minutes)
Donc je voulais savoir si j'avais correctement monter ma macro ou j'ai fait quelques erreurs de programmation et c'est pour cela que c'est si long.

Merci par avance de vos réponses.
 

Pièces jointes

  • test.zip
    17.9 KB · Affichages: 27
  • test.zip
    17.9 KB · Affichages: 29
  • test.zip
    17.9 KB · Affichages: 28

Cousinhub

XLDnaute Barbatruc
Re : écourter le traitement VBA

Bonjour,

Euh, on veut bien, mais c'est quoi le but de ta macro?

Parce que les formules que tu injectes en début de code, excuse, mais tout le monde ne s'appelle pas Monique, Tibo ou Hoerwind....(scusez, si j'en ai oublié...)

Plus sérieusement, si tu nous donnais le but de ton code, on pourrait peut-être essayer de t'aider...

Bon courage
 

BBdoc

XLDnaute Nouveau
Re : écourter le traitement VBA

J'ai mis en rouge sur la "feuille macro" où je pense que j'ai fait mon erreur.
La macro est dispo dans le fichier, il suffit de la lancer
 

Pièces jointes

  • test.zip
    18 KB · Affichages: 20
  • test.zip
    18 KB · Affichages: 25
  • test.zip
    18 KB · Affichages: 32

2passage

XLDnaute Impliqué
Re : écourter le traitement VBA

Bonjour,

Effectivement, à mon avis, il y a du temps à gagner là : plutôt que de mettre une formule puis en remplacer un morceau, autant la mettre directement bonne avec :

dim li3 as integer
li3 = range("B65536").end(xlup).row

et en consrtuisant la formule avec des

"=SOMMEPROD(....$B$" & li3 & ";B4)>0...."

Sinon, juste une remarque : c'est bien de commenter le code mais choisis bien tes commentaires parce que "'dim bidule 'définition de bidule" c'est de la perte de temps, par contre un "' calcule le total de chaque sous famille" ou "remplace le numéro de ligne dans les formules types" serait un peu plus utile.

@+
 

Efgé

XLDnaute Barbatruc
Re : écourter le traitement VBA

Bonjour BBdoc, bhbh, 2passage,
La macro sans aucun select. Ca devrait gagner du temps.
Cordialement
EDIT:
Maintenat que j'ai eu le temps de revenir sur le code, Je pense que cette version sera plus rapide que celle du fichier:
VB:
Sub Nettoyage2003test()
Application.ScreenUpdating = False
Dim li As Long
li = Range("B" & Application.Rows.Count).End(xlUp).Row + 1
Range("m5:m" & li - 1).FormulaLocal = "=SI(ESTERREUR(RECHERCHEV(E5;'données'!$A:$B;2;FAUX));SOMMEPROD(DECALER(B5;1;11;SI(NB.SI(B6:$B$" & li & ";B5)>0;EQUIV(B5;B6:$B$" & li & ";0)-1;NBVAL(B6:$B$" & li & ")))*(DECALER(B5;1;;SI(NB.SI(B6:$B$" & li & ";B5)>0;EQUIV(B5;B6:$B$" & li & ";0)-1;NBVAL(B6:$B$" & li & ")))=CAR(CODE(B5)+1))*(DECALER(B5;1;5;SI(NB.SI(B6:$B$" & li & ";B5)>0;EQUIV(B5;B6:$B$" & li & ";0)-1;NBVAL(B6:$B$" & li & ")))));RECHERCHEV(E5;'données'!$A:$B;2;FAUX))"
Range("N2") = li
Range("M2").FormulaLocal = "=SOMMEPROD((DECALER(B4;1;11;SI(NB.SI(B5:$B$" & li & ";B4)>0;EQUIV(B4;B5:$B$" & li & ";0)-1;NBVAL(B5:$B$" & li & " )))*(DECALER(B4;1;;SI(NB.SI(B5:$B$" & li & ";B4)>0;EQUIV(B4;B5:$B$" & li & ";0)-1;NBVAL(B5:$B$" & li & ")))=CAR(CODE(B4)+1))*(DECALER(B4;1;5;SI(NB.SI(B5:$B$" & li & ";B4)>0;EQUIV(B4;B5:$B$" & li & ";0)-1;NBVAL(B5:$B$" & li & "))))))"
With Range("B4:B" & li)
    .Replace what:="Niv.", replacement:="A"
    .Replace what:="Niv", replacement:="A"
    .Replace what:=".1", replacement:="B"
    .Replace what:="..2", replacement:="C"
    .Replace what:="...3", replacement:="D"
    .Replace what:="....4", replacement:="E"
    .Replace what:=" ", replacement:=""
    .HorizontalAlignment = xlCenter
End With
With Range("E4:E" & li)
    .Replace what:="wm.", replacement:=""
    .Replace what:=" ", replacement:=""
    .Replace what:="wp.", replacement:=""
    .HorizontalAlignment = xlCenter
End With
 
Range("M4:M" & li).NumberFormat = _
        "_-* #,##0.00 _-;-* #,##0.00 _-;_-* ""-""?? _-;_-@_-"
Range("B5").Activate
With Sheets("Nomenclature").Range("B5:M" & li - 1)
    .FormatConditions.Delete
    .FormatConditions.Add Type:=xlExpression, Formula1:="=$B5<$B6"
    .FormatConditions(1).Font.Bold = True
End With
Application.ScreenUpdating = True
End Sub
Cordialement
 

Pièces jointes

  • BBdoc(2).zip
    16.2 KB · Affichages: 21
Dernière édition:

Discussions similaires

Statistiques des forums

Discussions
312 413
Messages
2 088 190
Membres
103 755
dernier inscrit
Nicolas TULENGE