Optimisation d'un code VBA pour excel

Optimisation d'un code VBA pour excel - VB/VBA/VBS - Programmation

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)
 

Citation :

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

Reply

Marsh Posté le 29-01-2009 à 20:25:14   

Reply

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


Message édité par seniorpapou le 30-01-2009 à 07:42:56
Reply

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 ?

Reply

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  
   For i = 1 To 100  
        Calculate  
        Worksheets("exercice 1" ).Cells(23, 3).Value = Worksheets("exercice 1" ).Cells(23, 3).Value + 1  
   Next i  
Else  
   For i = 1 To 100  
        Calculate  
        Worksheets("exercice 1" ).Cells(23, 4).Value = Worksheets("exercice 1" ).Cells(23, 4).Value + 1  
   Next i  
End If

Le code est plus long et la partie "calculate" est dupliquée, mais cela vaut peut-être le coup quand même.

Reply

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


Message édité par seniorpapou le 30-01-2009 à 13:38:27
Reply

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 !

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed