Petit problème avec l'instruction do: .... loop

Résolu
Moritus Messages postés 130 Date d'inscription jeudi 22 décembre 2005 Statut Membre Dernière intervention 23 novembre 2011 - 15 déc. 2008 à 15:08
PCPT Messages postés 13272 Date d'inscription lundi 13 décembre 2004 Statut Membre Dernière intervention 3 février 2018 - 15 déc. 2008 à 23:44
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

PCPT Messages postés 13272 Date d'inscription lundi 13 décembre 2004 Statut Membre Dernière intervention 3 février 2018 47
15 déc. 2008 à 15:19
(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 
3
PCPT Messages postés 13272 Date d'inscription lundi 13 décembre 2004 Statut Membre Dernière intervention 3 février 2018 47
15 déc. 2008 à 19:09
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 
3
Moritus Messages postés 130 Date d'inscription jeudi 22 décembre 2005 Statut Membre Dernière intervention 23 novembre 2011
15 déc. 2008 à 15:33
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!
0
Moritus Messages postés 130 Date d'inscription jeudi 22 décembre 2005 Statut Membre Dernière intervention 23 novembre 2011
15 déc. 2008 à 22:16
oui merci!
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
PCPT Messages postés 13272 Date d'inscription lundi 13 décembre 2004 Statut Membre Dernière intervention 3 février 2018 47
15 déc. 2008 à 23:44
n'oublie pas de valider la ou les bonnes réponses
++
0
Rejoignez-nous