Centième de seconde Vba

Calvus

XLDnaute Barbatruc
Bonsoir à tous,

Apparemment pas facile comme problème car je n'ai pas trouvé de réponse évidente sur le forum.

J'ai une pause dans une macro :

VB:
Application.Wait Time + TimeValue("0:00:2")

J'aurais voulu avoir 1,5 secondes au lieu de 2, mais je ne trouve pas comment, puisque 1,5 ne fonctionne pas dans le code.

S'il n'y a pas de code vraiment simple, tant pis, je garderai les 2 secondes.

Merci
 

Calvus

XLDnaute Barbatruc
Re : Centième de seconde Vba

Bonsoir Patrick :)

Pas mal ton astuce.
Ça fonctionne, en tout cas ça ne plante pas la macro, mais ça dure très peu de temps, moins d'une seconde je dirais, à vue d’œil.
Il y a peut être un autre calcul du genre à tenter. Je vais essayer différentes valeurs.

Merci

EDIT Bonsoir Modeste Geedee, je viens de voir ton message. Pareil, ça coupe très vite
 

Modeste geedee

XLDnaute Barbatruc
Re : Centième de seconde Vba

Bonsour®

essaie plutôt ceci
en debut de module standard :
Code:
Declare Sub Sleep Lib "kernel32" Alias "Sleep" (ByVal dwMilliseconds As Long)

puis au sein d'une proc
Code:
'Sleep for 1500 milliseconds =1,5 sec
Sleep 1500
 

Calvus

XLDnaute Barbatruc
Re : Centième de seconde Vba

Re,

J'ai suivi tes instructions.

Voici le code, situé dans une feuille :
Code:
Private Sub UserForm_Activate()
UserForm7.Label3.Caption = Feuil23.[D138]
'Sleep for 1500 milliseconds =1,5 sec
Sleep 1500
Unload UserForm7

End Sub

Problème : ça m'efface tout le contenu et mise en forme de mon USF....
 

mapomme

XLDnaute Barbatruc
Supporter XLD
Re : Centième de seconde Vba

Bonjour à tous,

Un essai en VBA sans API. Par exemple pour 1,75 sec. d'attente, écrire Halte 1750.

Code de la fonction:
VB:
Sub Halte(Xmillisec&)
Dim T0#, T1#, T2#
  T0 = Timer: T2 = T0 + Xmillisec / 1000#
  Do
    DoEvents: T1 = Timer: If T1 < T0 Then T1 = T1 + 86400
  Loop Until T1 >= T2
End Sub
 
Dernière édition:

Modeste geedee

XLDnaute Barbatruc
Re : Centième de seconde Vba

Bonsour®
:rolleyes:
sauf erreur de ma part, je ne suis pas sûr que la fonction TIMER batte la milliseconde ???
Code:
MsgBox Format(Timer,"hh:mm:ss,000")

tiré de l'aide en ligne...
Renvoie une valeur de type Single représentant le nombre de secondes écoulées depuis minuit.

Avec Microsoft Windows, la fonction Timer renvoie une valeur avec une précision de l'ordre de la fraction de seconde.
Sur Macintosh, la précision est d'une seconde.

;) pour plus de détails sur les notions "de l'ordre de la fraction " voir la norme :
http://www.lbt-blt.be/fr/faq/Norme_AFNOR_UNM-00-001.pdf


avec une autre API :
The GetTickCount function retrieves the number of milliseconds that have elapsed since Windows was started.

Code:
Private Declare Function GetTickCount& Lib "kernel32" ()

Sub test()
Dim T1, T2, i As Single, x As Boolean
T1 = GetTickCount
T2 = T1 + 1500               '-----  variable d'ajustement en millisecondes
Do While T2 > GetTickCount
Loop
MsgBox (GetTickCount - T1) / 1000 & " secondes"
End Sub

NB :
SLEEP me semble plus simple d'utilisation...:rolleyes:
 
Dernière édition:

mapomme

XLDnaute Barbatruc
Supporter XLD
Re : Centième de seconde Vba

Bonsoir Modeste geedee :),

(...) pour plus de détails sur les notions "de l'ordre de la fraction " voir la norme :
http://www.lbt-blt.be/fr/faq/Norme_AFNOR_UNM-00-001.pdf (...)

En mai prochain, je suis audité :( par un membre de l'AFNOR. J'ai presque envie de laisser trainer cette norme sur un coin de bureau (je suis un tantinet joueur) mais, à vue de nez, ça risque d'être un chouia osé, surtout s'il n'a pas une once d'humour (ce qui est souvent le cas des auditeurs externes)

Quant à la précision de Timer, elle n'est sans doute pas de l'ordre de la milliseconde. Mais pour la demi-seconde comme le demandait l'auteur du fil, ça doit le faire (pifométriquement parlant bien sûr ;))
 
Dernière édition:

Calvus

XLDnaute Barbatruc
Re : Centième de seconde Vba

Bonjour à tous et à toutes,

Merci pour vos réponses, ça fonctionne bien maintenant.

Pour répondre à Laetitia, oui car j'ai besoin d'afficher une information pendant une saisie, opération qui se répète de 20 à 40 fois à chaque saisie. Une seconde est trop courte pour pouvoir lire correctement, et 2 secondes trop longues... Sans compter que 0.5 secondes fois 40 ça fait 20 secondes, fois 10 saisies alors qu'on est méga ultra pressé, ben ça fait BEAUCOUP de temps !! :):):)
(C'est surtout que c'est frustrant d'attendre de pouvoir récupérer la main... :) )

Excellente journée à vous :)
 

Dranreb

XLDnaute Barbatruc
Re : Centième de seconde Vba

Bonsoir
Si c'est ça le fond du problème, il vaudrait mieux s'orienter vers un autre système qui laisserait toujours la main à l'usager.
Par exemple afficher l'UserForm en non modal pendant 2 secondes voire 3, le masquage se faisant par une procédure d'un module standard planifiée par Application.OnTime.

Un Label ActiveX au lieu de l'UserForm pourrait d'ailleurs suffire s'il ne risque pas d'encombrer une cellule que l'utilisateur doit pouvoir modifier. À moins de le déplacer s'il promène le curseur dessus…

Ça pourrait aussi se broder autour de la proposition de mapomme au #9 mais avec propriété ShowModal de l'UserForm à False.
En la mettant dans Userform_Activate et en terminant par Me.Hide. Le DoEvents qu'elle contient permettrait pendant ce temps de traiter les sollicitations de l’utilisateur.
 
Dernière édition:

Discussions similaires

Réponses
8
Affichages
849

Statistiques des forums

Discussions
314 450
Messages
2 109 727
Membres
110 552
dernier inscrit
jasson