N’étant pas un expert aguerri sur VBA, j’aurais souhaité bénéficier de l’expertise technique des internautes de ce super site sur le problème suivant :
Dans mes colonnes M et N, j’ai une formule ALEA() que je retranscris en colonne B avec la formule RANG.
J’ai par ailleurs créé deux boutons appelés « lancer le tirage aléatoire » et « arrêter le tirage ».
Avec le bouton « lancer le tirage aléatoire », je souhaite lancer un calcul automatique qui s’actualise toutes les secondes, voire moins.
Pour cela, j’ai associé à ce bouton une macro dans un module 1, à savoir :
VB:
Sub calcul()
Application.Calculation = xlAutomatic + TimeValue("00:00:01")
End Sub
Et c’est là que réside le problème : avec cette macro, j’arrive à lancer un calcul en cliquant sur le bouton mais le calcul ne s’actualise pas automatiquement toutes les secondes. Il faut à chaque fois que je clique sur « lancer le tirage aléatoire ».
Or, mon souhait est d’appuyer une seule fois sur le bouton pour lancer un calcul actualisé toutes les secondes, voire toute toutes les demi-secondes si possible.
In fine, je souhaite arrêter le calcul automatique grâce à mon bouton « arrêter le tirage », pour lequel j’ai affecté une macro (dont je ne suis pas du tout sûr de l’efficacité) rédigée comme suit :
Code:
Sub test()
Application.Calculation = xlManual
End Sub
le fichier en question est joint au présent post.
D’avance, un infini merci à vous pour vos précieux conseils et votre expertise sur ce point de blocage.
pour les millisecondes essaye plutôt de diviser par 1,5 ou 2 plutôt que 10.
Si tu descends trop l'intervalle de temporisation ... la mise à jour de l'écran affiché prend un peu de temps et ne sera pas finie avant la boucle suivante et là tu perds la main ...
surtout si ton PC n'est pas une bête de course
ps : Sinon pense à cocher le post #3 comme solution (colonne grise à droite du post la coche "Marquer comme solution"
Bonjour,
avec les fonctions VBA dans le module 1 cela t'évite de perdre la main si jamais t'avais un do while
[Edit] le code vba:
VB:
Dim Tirage As Boolean
Dim gCount As Date
Sub LanceTirage()
Tirage = True
Call Timer
End Sub
Sub StopTirage()
Tirage = False
End Sub
Sub Timer()
gCount = Now + TimeValue("00:00:01")
Application.OnTime gCount, "AleaSuivant"
End Sub
Sub AleaSuivant()
If Tirage Then
Application.Calculation = xlAutomatic
Call Timer
End If
End Sub
tout d'abord, un grand merci pour vos réponses.
la macro proposé par DeadPool est parfaite et répond vraiment à mon souhait.
j'ai voulu ajuster celle-ci afin de permettre une actualisation inférieure à la seconde et pour ce faire, après consultation d'un forum, j'ai fait le réajustement suivant :
VB:
gCount = Now + (TimeValue("00:00:01")/10)
résultat : ça marche super bien ! l'actualisation se fait au 1/10ème de seconde... par contre... ça créé un plantage d'Excel, lequel continue à actualiser le calcul mais ne répond plus sur le reste. je suis obligé de faire un ctrl+Alt+Sup pour sortir de cette impasse.
sauriez-vous quelle autre solution je pourrais trouver pour contourner le problème ?
pour les millisecondes essaye plutôt de diviser par 1,5 ou 2 plutôt que 10.
Si tu descends trop l'intervalle de temporisation ... la mise à jour de l'écran affiché prend un peu de temps et ne sera pas finie avant la boucle suivante et là tu perds la main ...
surtout si ton PC n'est pas une bête de course
ps : Sinon pense à cocher le post #3 comme solution (colonne grise à droite du post la coche "Marquer comme solution"
ps : si tu fais encore évoluer ton fichier faudra peut revoir cette intervalle à la hausse => plus il y a de formules dans ton classeur plus cela sera long car tu es parti sur l'option de forcer le recalul au lieu de faire une macro qui et calcul juste ce dont tu as besoin.