Optimisation d'un code VBA pour excel - VB/VBA/VBS - Programmation
Marsh Posté le 30-01-2009 à 07:39:37
Bonjour,
Je suppose que tu es obligé de résourdre en VBA, sinon une formule dans les cellules serait plus rapide.
With Worksheets("exercice 1" )
For i = 1 To 100
calculate
oter=4- (.Cells(23, 1) = 0)
.Cells(23, oter)= .Cells(23, oter)+ 1
next i
je souhaite ne pas m'être trompé , cela réduit l'écriture de ta formule, mais je ne suis pas du tout certain que cela réduise le temps de calcul. Une autre solution est de passer par "case" (voir le help à ce sujet)
Il serait bien de savoir ce que tu as dans calculate...
Cordialement
Next i
End With
Marsh Posté le 30-01-2009 à 10:24:39
J'avoue ne pas bien comprendre ce que ça a d'aléatoire d'incrémenter une même zone 100 fois...
Que veux tu tester exactement ?
Marsh Posté le 30-01-2009 à 11:42:57
Pour optimiser le temps de calcul :
1. Au début, mettre
Application.ScreenUpdating = False |
et à la fin, restituer l'option d'affichage avec
Application.ScreenUpdating = True |
2. Puisque la condition ne dépend pas de la variable i, déporter la condition avant la boucle afin que le if ne soit exécuter qu'une fois au lieu de 100 fois :
If (Worksheets("exercice 1" ).Cells(23, 1).Value = 0) Then |
Le code est plus long et la partie "calculate" est dupliquée, mais cela vaut peut-être le coup quand même.
Marsh Posté le 30-01-2009 à 13:37:50
Bonjour,
en l'absence de précision, j'ai supposé que "calculate" définissait la valeur de cells(23,1) , probablement un random, ce qui expliquerait le côté étonnant d'une boucle sur i sans utilisation du i dans les formules . Il faut donc attendre maintenant qu' Euritos donne des éléments d'information complémentaires
Marsh Posté le 30-01-2009 à 13:54:05
oui, il serait vraiment intéressant de savoir ce que fait ce calculate... et surtout à quoi sert cette boucle !
Marsh Posté le 29-01-2009 à 20:25:14
Bonjour à tous, j'ai beau regardé sur le net comment optimiser un code VBA mais je n'arrive pas à l'appliquer sur le mien.
Ci-dessous mon code de base, il permet de générer des valeurs aléatoires comprises entre 0 et 1, comment optimiser le test en supprimant la condition if? (zone en rouge à modifier)
Sub tirage_aléatoire_simple()
Dim i As Integer
Worksheets("exercice 1" ).Cells(23, 3).Value = 0
Worksheets("exercice 1" ).Cells(23, 4).Value = 0
For i = 1 To 100
Calculate
If (Worksheets("exercice 1" ).Cells(23, 1).Value = 0) Then
Worksheets("exercice 1" ).Cells(23, 3).Value = Worksheets("exercice 1" ).Cells(23, 3).Value + 1
Else
Worksheets("exercice 1" ).Cells(23, 4).Value = Worksheets("exercice 1" ).Cells(23, 4).Value + 1
End If
Next i
End Sub
J'ai essayé toute l'après midi d'optimiser ce code, mais à chaque fois je dénature totalement le code et n'aboutit à rien de viable.
Merci d'avance à tous.
Vincent