Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
2539 connectés 

  FORUM HardWare.fr
  Programmation
  VB/VBA/VBS

  Optimisation d'un code VBA pour excel

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

Optimisation d'un code VBA pour excel

n°1844968
eurytos
Posté le 29-01-2009 à 20:25:14  profilanswer
 

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

mood
Publicité
Posté le 29-01-2009 à 20:25:14  profilanswer
 

n°1845054
seniorpapo​u
Posté le 30-01-2009 à 07:39:37  profilanswer
 

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
n°1845095
Ptit loup
Quand c'est flou, y'a un loup
Posté le 30-01-2009 à 10:24:39  profilanswer
 

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 ?

n°1845144
olivthill
Posté le 30-01-2009 à 11:42:57  profilanswer
 

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.

n°1845196
seniorpapo​u
Posté le 30-01-2009 à 13:37:50  profilanswer
 

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
n°1845212
Ptit loup
Quand c'est flou, y'a un loup
Posté le 30-01-2009 à 13:54:05  profilanswer
 

oui, il serait vraiment intéressant de savoir ce que fait ce calculate... et surtout à quoi sert cette boucle !


Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  VB/VBA/VBS

  Optimisation d'un code VBA pour excel

 

Sujets relatifs
Cherche un code[macro excel] encadrer certaines cellules
[VBA] remettre les paramètres pas défaut en cas de plantage ?Concatenation de 2 fichiers excel.
[VBA] : action sur la touche ENTER[VBA Excel] Procédure redondante dans Userform
securité sur code phpCode pour trier un tableau par insertions simples??
Une sorte de comparaison d'un fichier excel et une table access. 
Plus de sujets relatifs à : Optimisation d'un code VBA pour excel


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR