"ralentir" une macro?

  • Initiateur de la discussion JJ1
  • Date de début
J

JJ1

Guest
Bonjour à tous,
J'ai un code qui fonctionne à moitié....

Sub test()
Dim i As Long
On Error Resume Next
With ActiveSheet
Feuil1.Range("A1").Value = 0
Feuil1.Range("A2").Value = 0
For i = 1 To 500
Calculate
If Range("AI6").Value = "OUI" Then
.Range("fu" & i, "fz" & i).Value = Range("ad" & 8, "ai" & 8).Value
.Range("ga" & i).Value = "OUI"
.Range("gy" & i, "hd" & i).Value = Range("ad" & 9, "ai" & 9).Value
End If
Feuil1.Range("A1").Value = i
Feuil1.Range("A2").Value = Feuil1.Range("FT1").Value
Next i
End With
Range("A1").Activate
End Sub

Les 2 premières copies (.Range) se passent bien, mais la troisième (en GY-HD) se décale, comme si la macro avait déjà "avancé " au prochain i

Comment puis-je la freiner pour avoir mes 3 copies de cellules exactes?
merci de vos conseils et bonne journée
 

suistrop

XLDnaute Impliqué
Re : "ralentir" une macro?

Si tu pouvais donner un fichier qu on puisse faire tourner la macro ...

Sinon malgrés ma petite expérience en VBA il m est arrivé quelque chose de similaire, et le lendemain tout se passé bien ..... essaie peut etre de redémarré ta machine ou relancer ton fichier !
 

pierrejean

XLDnaute Barbatruc
Re : "ralentir" une macro?

bonjour JJ1
Salut suistrop

J'ai testé ta macro (sans le on error resume next) et chez moi elle fonctionne parfaitement

Qu'entends-tu par :
la troisième (en GY-HD) se décale, comme si la macro avait déjà "avancé " au prochain i ??

A propos : A quoi sert le on error resume next ????
 

tototiti2008

XLDnaute Barbatruc
Re : "ralentir" une macro?

Bonjour à tous,

le On error resume next signifie que s'il y a un erreur sur une ligne, il ignore et passe à la ligne suivante... ce qui pourrait expliquer une sorte de décalage mais franchement, je ne vois pas sur quelle ligne il peut y avoir un soucis...

Ceci dit, le mieux serait de mettre On error resume next en commentaire et tester la macro pour voir si elle plante...
 
J

JJ1

Guest
Re : "ralentir" une macro?

Bonjour et merci pour vos réponses, la feuille Excel créée 6 numéros par alea.
Selon des tests sur la feuille, le résultat est oui ou non en AI6
Si oui:
copie des 6 numéros tirés par alea en FU, insertion d'un oui en GA et copie des écarts de ces numéros en GY
...mais la macro créée ses alea tellement vite que j'ai l'impression que la recopie en GY est déjà la recopie des numéros suivants?
bizarre, comme si le code avait du retard sur l'Alea?
Je n'avais jamais rencontré ce problème, par contre si j'enlève la3éme copie (.range en GY) c'est OK ???
Si vous y comprenez quelque chose?

ps : on error... avait été mis au départ au cas où?
 

tototiti2008

XLDnaute Barbatruc
Re : "ralentir" une macro?

Oui, la fonction Alea est volatile, c'est à dire qu'elle se recalcule à chaque fois que tu ecris quelque chose dans la feuille, chose que tu fais ici :

.Range("ga" & i).Value = "OUI"

Donc il y a une nouvelle génération des Alea avant ce que tu nommes la "dernière copie"...
 
J

JJ1

Guest
Re : "ralentir" une macro?

Re, donc il me faut mettre ce range en dernier après les 2 autres?
comment ferais -tu?
C'est quand même bizarre car le activate lance l'aléa et donc le prochain aléa se fera à la prochaine boucle, donc une ligne plus bas?
étonnant?
merci
 
Dernière modification par un modérateur:

pierrejean

XLDnaute Barbatruc
Re : "ralentir" une macro?

re

a mon avis le mieux serait plutot de remplir les valeurs issues d'ALEA par Vba , ce qui permettrait de le faire au bon moment
Pour ce faire il me parait utile d'en savoir un peu plus
Un fichier exemple searit le bienvenu
 

tototiti2008

XLDnaute Barbatruc
Re : "ralentir" une macro?

Peut-être avec quelque chose comme ça :

Code:
Sub test()
Dim i As Long
On Error Resume Next
With ActiveSheet
Feuil1.Range("A1").Value = 0
Feuil1.Range("A2").Value = 0
For i = 1 To 500
Activesheet.EnableCalculation = True
Activesheet.EnableCalculation = False
If Range("AI6").Value = "OUI" Then
.Range("fu" & i, "fz" & i).Value = Range("ad" & 8, "ai" & 8).Value
.Range("ga" & i).Value = "OUI"
.Range("gy" & i, "hd" & i).Value = Range("ad" & 9, "ai" & 9).Value
End If
Feuil1.Range("A1").Value = i
Feuil1.Range("A2").Value = Feuil1.Range("FT1").Value
Next i
End With
Range("A1").Activate
Activesheet.EnableCalculation = True
End Sub
 
J

JJ1

Guest
Re : "ralentir" une macro?

Re,
les valeurs issues d'aléa son copiées en AD8:AI8 et testées sur la feuille (formules)
Ensuite la macro copie ou non ces valeurs en fonction du test en AI6
As-tu lu la réponse de tototiti2008, mon calculate est bien dans la boucle, comment recalculerait-il?
 

Discussions similaires

Réponses
9
Affichages
116