Petit problème avec l'instruction do: .... loop [Résolu]

Signaler
Messages postés
130
Date d'inscription
jeudi 22 décembre 2005
Statut
Membre
Dernière intervention
23 novembre 2011
-
Messages postés
13280
Date d'inscription
lundi 13 décembre 2004
Statut
Modérateur
Dernière intervention
3 février 2018
-
bonjour,

J'ai découvert l'instruction do:..loop recamment et j'ai quelques questions

voici le code
Public Function do_loop(reg As Integer, bytes As Integer)
Select Case reg
Case Is = 1 'data
    Do:
        DoEvents
    Loop Until read_Data(bytes) = 1
    MsgBox "data fini"
Case Is = 2 'control
    Do:
        DoEvents
    Loop Until read_Control(bytes) = 1
    MsgBox "control fini"
End Select
End Function

Quand j'active mes deux loop, si la 2e se terminer (
read_Control(bytes) = 1), le message n'apparait que lorsque la première
loop se terminer ( read_Datal(bytes) = 1)

donc, a voir le résultat que ça me donne, j'en déduit qu'on ne peut pas mettre plusieurs do..loop dans une procédure...je me trompe??...

merci!

5 réponses

Messages postés
13280
Date d'inscription
lundi 13 décembre 2004
Statut
Modérateur
Dernière intervention
3 février 2018
41
(edit : désolé je corrige mes fautes )

salut,

gni?
pas clair.....

"Quand j'active mes deux loop"

tu peux avoir plusieurs boucles dans une procédure...
par
contre elles ne sont pas activées "en même temps". quand tu es dans
une boucle, tu n'es pas en même temps dans une autre...

de plus ici de toute façon, avec un SELECT CASE, tu passes forcément soit par l'une, soit par l'autre (ou aucune)

ps : FONCTION retourne un résultat...
<hr size="2" width="100%" />Prenez un instant pour répondre à [sujet-SONDAGE-POP3-POUR-CS_769706.aspx ce sondage] svp 
Messages postés
13280
Date d'inscription
lundi 13 décembre 2004
Statut
Modérateur
Dernière intervention
3 février 2018
41
qu'un loop à la fois dans le sens que chaque ligne est executée à la suite....

ton code appelant ne va pas simultanément appeler do_loop.case1 et do_loop.case2

une
fois do_loop.case1 terminé et donc ton code sorti de la procédure (qui
n'aura pas exécuté le de_loop.case2), ta procédure appelante va reprendre la
main sous la ligne d'appel de do_loop.case1, et va continuer jusqu'à la
fin.

si sur son chemin elle rencontre do_loop.case2, de
nouveau ton code va "y aller", exécuter ce code, en sortir, et on
continue jusqu'à la sortie complète de ta procédure appelante

un bout de code pour mieux comprendre peut-être...






Option Explicit


'


Private Sub 
Form_Load()

    Debug.Print "-- ENTREE 'Form_Load' : je suis la toute première prodédure"
    Call Sub1
    Debug.Print "-- SORTIE 'Form_Load' : j'étais la toute première prodédure"
    Unload Me
End Sub
'
Sub Sub1()
    Debug.Print "---- ENTREE 'Sub1' : je suis 2ème prodédure"
    Call Sub2(50)
    Debug.Print "---- MILIEU 'Sub1' : je suis ligne au milieu de la 2ème prodédure"
    Call Sub2(300)
    Debug.Print "---- SORTIE 'Sub1' : j'étais la  2ème prodédure"
End Sub
'
Sub Sub2(ByVal i As Integer)
    Debug.Print "------ ENTREE 'Sub2' : je suis 3ème prodédure"
    Debug.Print "------ MILIEU 'Sub2' : je suis ligne au milieu de la 3ème prodédure, j'ai eu une valeur en paramètre : [ " & i & " ]"
    Debug.Print "------ SORTIE 'Sub2' : j'étais la  3ème prodédure"
End Sub





<small>
[../code.aspx?ID=39466 Coloration VB6, VBA, VBS]
</small>












ce qui nous donne cette trace :

-- ENTREE 'Form_Load' : je suis la toute première prodédure
---- ENTREE 'Sub1' : je suis 2ème prodédure
------ ENTREE 'Sub2' : je suis 3ème prodédure
------ MILIEU '




Sub2







' : je suis ligne au milieu de la 3ème prodédure, j'ai eu une valeur en paramètre : [ 50 ]
------ SORTIE '







Sub2







' : j'étais la  3ème prodédure


---- MILIEU '







Sub1







' : je suis ligne au milieu de la 2ème prodédure


------ ENTREE '







Sub2







' : je suis 3ème prodédure
------ MILIEU '







Sub2







' : je suis ligne au milieu de la 3ème prodédure, j'ai eu une valeur en paramètre : [ 300 ]
------ SORTIE '







Sub2







' : j'étais la  3ème prodédure


---- SORTIE '







Sub1







' : j'étais la  2ème prodédure


-- SORTIE '







Form_Load







' : j'étais la toute première prodédure







c'est plus clair?
++


<hr size="2" width="100%" />
Prenez un instant pour répondre à [sujet-SONDAGE-POP3-POUR-CS_769706.aspx ce sondage] svp 
Messages postés
130
Date d'inscription
jeudi 22 décembre 2005
Statut
Membre
Dernière intervention
23 novembre 2011

salut,

ca répond un peu a ma question...

quand je dit j'active mes 2 loop c'est qu'a 2 endroit dans mon code j'appelle la procédure mais avec des valeurs différentes.

Donc d'apres ce que tu me dit, je ne peut avoir qu'une loop à la fois!?

Merci pour ta réponse rapide!
Messages postés
130
Date d'inscription
jeudi 22 décembre 2005
Statut
Membre
Dernière intervention
23 novembre 2011

oui merci!
Messages postés
13280
Date d'inscription
lundi 13 décembre 2004
Statut
Modérateur
Dernière intervention
3 février 2018
41
n'oublie pas de valider la ou les bonnes réponses
++