Compte à rebours aléatoire
Bonjour,
j'utilise une macro en boucle qui commence par un compte à rebours de 1 à 30 secondes.
Sub COMPTE_REBOURS()
Dim f As Integer
Dim Cellule As Range
Heure_Actuelle = TIMER ' "Timer" Sauve le nombre de secondes écoulées depuis minuit
'Initialiser le générateur de nombres aléatoires
'=> Randomize : à ajouter avant d'utiliser Rnd pour obtenir des valeurs complètement aléatoires
Randomize ' Initialize random-number generator.
Nb_Seconde = Int((30 * Rnd) + 1) ' Generate random value between 1 and 30.
Do
If Int(TIMER - Heure_Actuelle) Mod Nb_Seconde = 0 Then
f = FreeFile
Open "C:\Users\XXXX\Desktop\TEST.txt" For Output As #f ' Ouverture en mode écriture ("output")
For Each Cellule In Range("A1:A24")
Print #f, Cellule.Text ' Ecriture lignes
Next
Close f ' Fermeture du fichier
End If
DoEvents
Loop
End SubLe problème est que ce caractère aléatoire ne se produit qu'une seule fois au lancement de la macro...
Perso je souhaiterai que le côté aléatoire se fasse à chaque boucle...sans avoir à stopper et relancer la macro donc...
Une idée ? Je vous laisse le fichier en pièce jointe au cas où... merci
Bonjour,
Remplace temporairement
Do
If Int(TIMER - Heure_Actuelle) Mod Nb_Seconde = 0 Then
f = FreeFile
Open "C:\Users\XXXX\Desktop\TEST.txt" For Output As #f ' Ouverture en mode écriture ("output")
For Each Cellule In Range("A1:A24")
Print #f, Cellule.Text ' Ecriture lignes
Next
Close f ' Fermeture du fichier
End If
DoEvents
Looppar ...
Do
If Int(TIMER - Heure_Actuelle) Mod Nb_Seconde = 0 Then
Msgbox " test ..."
End If
DoEvents
LoopTu vas remarquer que le compte à rebours aléatoire fonctionne ...
Le délai de 1 seconde est sûrement trop court pour le code à exécuter > il y a des tests à faire ...
Je te laisse t'amuser ...
ric
Je test ça et reviens vers toi ! Merci
Alors je viens de tester cela (en prenant en compte ta remarque sur le délais trop court de 1 sec) :
Sub COMPTE_REBOURS()
Dim f As Integer
Dim Cellule As Range
Heure_Actuelle = Timer ' "Timer" Sauve le nombre de secondes écoulées depuis minuit
'Initialiser le générateur de nombres aléatoires
'=> Randomize : à ajouter avant d'utiliser Rnd pour obtenir des valeurs complètement aléatoires
Randomize ' Initialize random-number generator.
Nb_Seconde = Int((45 * Rnd) + 5) ' Generate random value between 5 and 45.
Do
If Int(Timer - Heure_Actuelle) Mod Nb_Seconde = 0 Then
MsgBox " test ..." & Nb_Seconde
End If
DoEvents
Loop
End SubEt franchement ça ne marche pas chez moi !
j'ai même ajouté & Nb_Seconde pour afficher le résultat et en avoir le cœur net...
Je lance la macro elle me sort le chiffre aléatoire généré (ici c'était 17) et ensuite à chaque boucle la fenêtre s'affiche toutes les 17 secondes...elle ne change pas a chaque passage ! Moi je voudrai qu'a chaque boucle le chiffre généré change !
Bonjour,
Source : https://forum.excel-pratique.com/excel/executer-une-macro-toutes-les-x-secondes-99903#p583207
Adaptation > surveille A2 de la Feuil1 > à adapter au besoin ...
Dim StopBJAR As Boolean
Sub BJAR()
Static bar%
nb_seconde = Int((25 - 10 + 1) * Rnd + 10)
Worksheets("Feuil1").Range("A2") = IIf(bar = 1, "Au revoir !", "Bonjour !")
bar = (bar + 1) Mod 2
Application.OnTime Now + TimeSerial(0, 0, nb_seconde), IIf(StopBJAR, "Effacer", "BJAR")
End Sub
Sub ArrêtBJAR()
StopBJAR = True
End Sub
Sub LancerBJAR()
StopBJAR = False
BJAR
End Sub
Sub Effacer()
Worksheets("Feuil1").Range("A2").ClearContents
End Subric
Bonjour,
si tu veux que ça change à chaque fois, il faut le mettre dans la boucle :
Do
Nb_Seconde = Int((45 * Rnd) + 5) ' Generate random value between 5 and 45.
' ...eric
Bonjour tous,
Ce que je comprends du traitement désiré ...
Tu veux écrire dans le fichier TEST.txt le contenu de A1 à A24 à toutes les X secondes > X étant un temps aléatoire ...
Un essai basé sur le code de feu MFerrand ...
Dim StopBJAR As Boolean
Dim Nb_seconde As Integer
Sub BJAR()
Static bar%
Nb_seconde = Int((25 - 10 + 1) * Rnd + 10)
Call Module1.Traitement
bar = (bar + 1) Mod 2
Application.OnTime Now + TimeSerial(0, 0, Nb_seconde), IIf(StopBJAR, "Effacer", "BJAR")
End Sub
Sub ArrêtBJAR()
StopBJAR = True
End Sub
Sub LancerBJAR()
StopBJAR = False
BJAR
End Sub
Sub Effacer()
''' Worksheets("Feuil1").Range("A2").ClearContents
End Sub
Sub Traitement()
Dim Cellule As Range
f = FreeFile
Open "C:\Users\XXXX\Desktop\TEST.txt" For Output As #f ' Ouverture en mode écriture ("output")
For Each Cellule In Worksheets("Feuil1").Range("A1:A24")
Print #f, Cellule.Text ' Ecriture lignes
Next
Close f ' Fermeture du fichier
End Subric
Eriiic :
Merci de ton aide !
J'ai donc modifié la macro de test avec ta piste. J'ai donc :
Sub COMPTE_REBOURS()
Dim f As Integer
Dim Cellule As Range
Heure_Actuelle = Timer ' "Timer" Sauve le nombre de secondes écoulées depuis minuit
'Initialiser le générateur de nombres aléatoires
'=> Randomize : à ajouter avant d'utiliser Rnd pour obtenir des valeurs complètement aléatoires
Randomize ' Initialize random-number generator.
Do
Nb_Seconde = Int((45 * Rnd) + 5) ' Generate random value between 5 and 45.
If Int(Timer - Heure_Actuelle) Mod Nb_Seconde = 0 Then
MsgBox " test ..." & Nb_Seconde
End If
DoEvents
Loop
End SubRésultat :
Je lance la macro, ça me donne bien un chiffre aléatoire je ferme la fenêtre avec OK et la ça me redonne certes des chiffres différents mais plus aucune temporisation...juste des chiffre aléatoire en boucle....
Ric :
Oui ma macro doit fonctionner "non stop" et dans l'ordre :
Sortir une valeur aléatoire qui sert de temporisation...si par exemple 22....
Après 22 secondes....copie des valeurs vers le txt puis sortie d'une autre valeur aléatoire...par exemple 35....
Après 35 secondes...copie des valeurs vers le txt ............
Par contre j'insiste, la macro je dois la lancer une fois et ensuite elle tourne non stop sans aucune intervention de ma part !
Bonjour,
Si tu lances "LancerBJAR" > ce devrait être le cas > ne jamais arrêter > sauf manuellement via "ArrêtBJAR" ...
ÉDIT : j'ai oublié de mentionner > à placer dans le Module1
Les quelques tests que j'ai faits = fonctionne bien ...
ric
Salut Oly,
Salut l'équipe,
Basé sur Application.OnTime, bien sûr...
Par contre, je ne comprends pas très bien l'usage de DO...LOOP..
J'ai pu mesurer, sur [A1:A24], comme dans ton exemple, que le temps d'écriture sur "TEST.txt" était négligeable : tu pourrais alors changer les paramètres de RandBetween en fonction du volume de données à écrire.
Public Sub SaveFile()
'
Dim rCel As Range, iSec%
'
With Worksheets("BDD")
f = FreeFile
Open "C:\Users\Utilisateur\Downloads\TEST.txt" For Output As #f
For Each rCel In .Range("A1:A24")
Print #f, rCel.Value
Next
Close f
'
iSec = WorksheetFunction.RandBetween(5, 30)
Application.OnTime Now + TimeValue("00:00:" & CStr(iSec)), "SaveFile", , True
End With
'
End SubJe constate aussi que, dans "TEST.txt", ne subsistent que les dernières entrées et non l'ensemble des données depuis l'ouverture du fichier : il y a sans doute une instruction manquante pour ajouter les nouvelles données aux anciennes. J'avoue ne pas avoir cherché...
A+
Désolé de la réponse tardive (Pb de box...) ! Écoutez merci à tous pour vos réponse..je n'ai pas tout testé mais la macro de Ric est parfaite pour mon projet !
Encore merci à la communauté vous êtes des chefs !