"ralentir" une macro?

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

Boostez vos compétences Excel avec notre communauté !

Rejoignez Excel Downloads, le rendez-vous des passionnés où l'entraide fait la force. Apprenez, échangez, progressez – et tout ça gratuitement ! 👉 Inscrivez-vous maintenant !

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
 
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 !
 
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 ????
 
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...
 
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ù?
 
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"...
 
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:
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
 
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
 
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?
 
- Navigue sans publicité
- Accède à Cléa, notre assistante IA experte Excel... et pas que...
- Profite de fonctionnalités exclusives
Ton soutien permet à Excel Downloads de rester 100% gratuit et de continuer à rassembler les passionnés d'Excel.
Je deviens Supporter XLD
Assurez vous de marquer un message comme solution pour une meilleure transparence.

Discussions similaires

Réponses
5
Affichages
914
Réponses
4
Affichages
735
  • Question Question
Microsoft 365 Export données
Réponses
4
Affichages
906
Retour