Attente de condtions

AntoineM07 -  
totodunet Messages postés 1513 Statut Membre -
Bonjour à tous,

je suis un amateur en VBA, je souhaiterai faire attendre mon programme tant qu'une condition n'est pas vérifié sans toute fois utiliser de boucles (pour pas faire "réfléchir" l'ordinateur).

Il faudrai (en gros) que la macro stop à: If a<1 then tant que "a" soit inférieur à 1
Je sais pas trop si je me suis exprimé correctement :/

Merci encore à tous pour ce forum aussi complet !

Ps. Je suis sous Windows 7 64 bits avec excel 2013 pro

9 réponses

  1. totodunet Messages postés 1513 Statut Membre 201
     
    je n'ai pas trop compris
    pourquoi tu ne veux pas utiliser une boucle ? puis de toute manière l'ordi est obligé de comparer à chaque fois si la nouvelle valeur est inférieur à 1 ou non.
    il faut savoir que le processeur quand il fait rien, il travaille quand même toujours pour rien ;)
    1
  2. AntoineM07
     
    Je vous remercie de la réponse aussi rapide,
    le problème que j'ai c'est que dès que je lance la macro, le programme Excel ne répond plus, ça marche très bien si je fais du pas à pas mais pas si je le laisse tourner un moment ça "plante"...
    J'ai essayé de mettre une condition "sleep" mais rien à faire, je vous montre une partie de ma macro pour une meilleure compréhension.
    ------------------------
    Declare PtrSafe Function GetAsyncKeyState Lib "User32" (ByVal vKey As Integer) As Integer
    Declare PtrSafe Sub Sleep Lib "kernel32" (ByVal dwMilliseconds As Long)

    Sub touchea()

    For i = 1 To 9999
    For r = 1 To 1000
    If GetAsyncKeyState(65) <> 0 Then
    Cells(1, 2) = Cells(1, 2) + 1
    Sleep 100
    End If
    Next r
    Next i

    End Sub
    ------------------------
    0
  3. totodunet Messages postés 1513 Statut Membre 201
     
    Sleep correspond à une pause dans le programme. Il est plutôt utilisé pour le confort de l'utilisateur, le temps de lui permettre de voir pas à pas l'avancement comme visualiser le tracé d'une fonction mathématique dans un affichage graphique par exemple.
    Donc si je lis bien, le programme fait 9999*1000 = 9 999 000 tours de boucle avec une pause de 100ms à chaque tour de boucle. Le temps du programme est donc d'au moins 999 900s = 277h45min... bref plus de 11 jours ! La fonction Sleep n'est vraiment pas une bonne idée.

    Ce que tu veux faire c'est quand tu appuies sur la touche A, ça incrémente de +1 la valeur de la cellule Cells(1,2) ?
    0
  4. AntoineM07
     
    Oui en effet le temps est un peu exagéré...
    Oui sinon c'est ce que je veux faire mais sans qu'Excel ne réponde plus
    Merci encore Totodunet
    0
  5. Vous n’avez pas trouvé la réponse que vous recherchez ?

    Posez votre question
  6. totodunet Messages postés 1513 Statut Membre 201
     
    en fait Excel répond plus à cause de tes boucles for je pense. c'est 9999 et 1000 qui me paraissent exagéré surtout que tu fais une boucle dans une boucle ce qui multiplie le nombre de tours. quel est l'intérêt d'utiliser ces boucles dans ton sous-programme ?
    0
  7. AntoineM07
     
    En fait j'aimerai un programme qui tourne 1h, je mets une boucle while avec un timer ?
    0
  8. totodunet Messages postés 1513 Statut Membre 201
     
    ok mais qu'est-ce que le programme doit faire pendant cette heure ?
    0
  9. AntoineM07
     
    Et ben incrémenter la cellule (1,2) a chaque fois que l'utilisateur appuis sur la touche (dans l'exemple, le a), c'est simplement ca pour le moment.
    0
  10. totodunet Messages postés 1513 Statut Membre 201
     
    ok! dans ce cas c'est l'évènement de la macro qui est à changer (à l'appui de la touche A -> executer macro), cela peut se faire en faisant :

    Private Sub Workbook_Activate()
    Application.OnKey("a","touchea")
    End Sub
    Sub touchea()
    Cells(1,2).Value=Cells(1,2).Value+1
    End Sub
    0