IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Macros et VBA Excel Discussion :

Pourquoi une boucle For/Next ne "stoppe" pas à la borne supérieure?


Sujet :

Macros et VBA Excel

  1. #1
    Membre émérite
    Avatar de pijaku
    Homme Profil pro
    Inscrit en
    Août 2010
    Messages
    1 816
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51
    Localisation : France, Nord (Nord Pas de Calais)

    Informations forums :
    Inscription : Août 2010
    Messages : 1 816
    Points : 2 954
    Points
    2 954
    Billets dans le blog
    10
    Par défaut Pourquoi une boucle For/Next ne "stoppe" pas à la borne supérieure?
    Bonjour,

    C'est une question inutile que je pose aujourd'hui.
    Désolé

    Lors d'une boucle For/Next, on impose des bornes mini et maxi, avec une variable d'itération et éventuellement un Step.
    En sortie de boucle, on s'attend à ce que la variable d'itération soit égale à la borne maxi, sauf cas de sortie anticipée.
    Il n'en est rien et je voulais juste en connaître la raison.
    Est-ce volontairement? Est-ce identique dans d'autres langages de programmation?

    Voici ma Sub de test :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    Option Explicit
     
    Sub test()
    Dim I As Integer, out As String
       For I = 1 To 9 Step 2
          out = out & I & ", "
       Next
       out = out & I
       Debug.Print out
       out = ""
       For I = 1 To 9 Step 45
          out = out & I & ", "
       Next
       out = out & I
       Debug.Print out
    End Sub
    Résultats :
    1, 3, 5, 7, 9, 11
    1, 46

    Merci de vos éclaircissements.

  2. #2
    Expert éminent sénior Avatar de Menhir
    Homme Profil pro
    Ingénieur
    Inscrit en
    Juin 2007
    Messages
    16 037
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Finistère (Bretagne)

    Informations professionnelles :
    Activité : Ingénieur
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2007
    Messages : 16 037
    Points : 32 866
    Points
    32 866
    Par défaut
    La variable est incrémentée AVANT d'être testée.
    Donc, lorsque l'exécution sort de la boucle, la valeur de la variable est forcément strictement supérieure à la borne supérieure (pour strictement inférieure à la borne inférieure si le Step est négatif).

    Par contre, cette variable reste entre les bornes (à moins qu'on la trafique volontairement) pour tout ce qui concerne le code à l'intérieur de la boucle.

    Donc, dans ton premier cas, la boucle génère 1, 3, 5, 7, 9,.
    Lorsque I passe à 11, l'exécution sort de la boucle et c'est le out = out & I suivant qui ajoute ce 11 à la fin de la chaine.

    Les boucles For To fonctionne ainsi depuis les origines du Basic (et de quelques autres langages).

  3. #3
    Membre émérite
    Avatar de pijaku
    Homme Profil pro
    Inscrit en
    Août 2010
    Messages
    1 816
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51
    Localisation : France, Nord (Nord Pas de Calais)

    Informations forums :
    Inscription : Août 2010
    Messages : 1 816
    Points : 2 954
    Points
    2 954
    Billets dans le blog
    10
    Par défaut
    Bonjour,

    Citation Envoyé par Menhir Voir le message
    La variable est incrémentée AVANT d'être testée.
    Merci de ta réponse.

    Donc le fonctionnement est le suivant :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    Sub DemoGoTo()
    Dim I As Long, out As String
    Debut:
       I = I + 1
       If I > 10 Then
          GoTo Fin
       Else
          'instruction
          GoTo Debut
       End If
    Fin:
        Debug.Print I
    End Sub
    Voilà ce que c'est que de poser une question idiote...

    Bonne journée

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 2
    Dernier message: 27/04/2010, 22h09
  2. faire une boucle for..next sur des textbox
    Par Actarusdu60 dans le forum VB.NET
    Réponses: 1
    Dernier message: 28/11/2008, 21h51
  3. Réponses: 5
    Dernier message: 27/11/2008, 17h34
  4. Pourquoi une boucle For i = 1 to. . . commence-t-elle à 2 ?
    Par ouskel'n'or dans le forum Macros et VBA Excel
    Réponses: 6
    Dernier message: 17/03/2008, 10h41

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo