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 :

terminer une boucle Do Loop


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Nouveau membre du Club
    Inscrit en
    Janvier 2007
    Messages
    4
    Détails du profil
    Informations forums :
    Inscription : Janvier 2007
    Messages : 4
    Par défaut terminer une boucle Do Loop
    bonjour,

    j'ai un souci avec cette routine.la boucle tourne sans cesse.
    merci de votre aide
    cordialement


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    Sub cotisations()
    Do
    If ActiveCell.Font.Bold = True Then ActiveCell.Offset(0, 1).Value = _
    Range("B2")
    Else
        ActiveCell.Offset(0, 1).Value = _
        Range("B1")
    End If
    ActiveCell.Offset(1, 0).Select
    If ActiveCell.Value = " " Then Exit Do
    Loop
     
    End Sub

  2. #2
    Invité
    Invité(e)
    Par défaut
    Bonsoir svedberg,

    Il y a déjà une erreur :

    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
    Sub cotisations()
    Do
    If ActiveCell.Font.Bold = True Then
    ActiveCell.Offset(0, 1).Value = _
    Range("B2")
    Else
        ActiveCell.Offset(0, 1).Value = _
        Range("B1")
    End If
    ActiveCell.Offset(1, 0).Select
    If ActiveCell.Value = " " Then
    Exit Do
    End If
    Loop
     
    End Sub
    Il manque un "End If" ici en bleu

    Ensuite vérifiez que l'instruction suivante est la bonne :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    If ActiveCell.Value = " " Then
    " " = espace

    par contre

    "" = rien ou vide

    la différence peut être là.
    Dernière modification par Invité ; 14/10/2007 à 06h05. Motif: Ajout des balises codes (Sélection du code + #), ce n'est pas facultatif

  3. #3
    Membre Expert
    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    2 130
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2007
    Messages : 2 130
    Par défaut
    Salut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    Sub cotisations()
    Do
        If ActiveCell.Font.Bold = True Then
            ActiveCell.Offset(0, 1) = Range("B2")
        Else
            ActiveCell.Offset(0, 1) = Range("B1")
        End If
        ActiveCell.Offset(1, 0).Select
        If ActiveCell.Value = " " Then Exit Do
    Loop Until ActiveCell.Row > UsedRange.SpecialCells(xlCellTypeLastCell).Row
    End Sub
    J'utilise peu la boucle Do....Loop, à cause de son risque de passer en boucle infinie. Dans ce cas, où je le fais quand même, je préfère mettre un garde-fou, au cas ou ma sortie normale ne s'effectuerait pas correctement
    Comme dit jacques_jean, la première chose à effectuer est le contrôle de la valeur limite
    Et le bon raisonnement de la fonction de la boucle en second : tout part de la cellule active et on la change certicalement

    jacques_jean : manque pas de End If :
    la forme la plus courament utilisée, c'est la multi-lignes (2me syntaxe):
    If test Then
    Vrai
    Eles
    Faux
    Endif

    Mais la première syntaxe reste valide :
    If test then vrai else Faux

    Par contre la macro présentée ne peut pas fonctionner,le premier test utilisant les 2 syntaxes => excel renvoie un code d'erreur, 'End If sans If'

    Les indentation sont faites pour que d'un coup d'oeil, on sache dans quelle partie du programme on se situe : quand tu as des imbrications boucles, tests ou select case, c'est nécessaire.

    A+
    NB n'utilisant la première syntaxe que sur des tests simple, je n'ai pas vérifier si on pouvait multiplier les instructions :
    if test then Vrai_1 : Vrai_2 else Faux_1 : Faux_2 : Faux_3
    Même si c'est valide, le code en devient trop illisible pour que je l'utilise

  4. #4
    Membre Expert
    Profil pro
    Inscrit en
    Novembre 2006
    Messages
    1 572
    Détails du profil
    Informations personnelles :
    Âge : 62
    Localisation : France

    Informations forums :
    Inscription : Novembre 2006
    Messages : 1 572
    Par défaut
    Citation Envoyé par jaques_jean
    Ensuite vérifiez que l'instruction suivante est la bonne :


    Code :
    If ActiveCell.Value = " " Then
    " " = espace

    par contre

    "" = rien ou vide

    la différence peut être là.
    elle est juste là, je confirme
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
    Sub cotisations()
    Do
    If ActiveCell.Font.Bold = True Then
    ActiveCell.Offset(0, 1).Value = _
    Range("B2")
    Else
        ActiveCell.Offset(0, 1).Value = _
        Range("B1")
    End If
    ActiveCell.Offset(1, 0).Select
    If ActiveCell.Value = "" Then Exit Do
    Loop
    End Sub

  5. #5
    Membre Expert
    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    2 130
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2007
    Messages : 2 130
    Par défaut
    Salut à tous
    salut alsimbad : comment peux-tu être sur de ce que tu avances ?
    Un exemple bête : 2 listes séparées par une case avec un espace. La première liste : une cotisation. La 2me une autre.
    On peut imaginer un tas de raisons de disfonctionnement, mais pas affirmer.
    Et la première raison est la sélection de la première cellule
    A+

  6. #6
    Membre Expert
    Profil pro
    Inscrit en
    Novembre 2006
    Messages
    1 572
    Détails du profil
    Informations personnelles :
    Âge : 62
    Localisation : France

    Informations forums :
    Inscription : Novembre 2006
    Messages : 1 572
    Par défaut
    salut gorfael. restons calme.
    le but du forum n'est pas d'avoir raison a tout prix, mais de répondre a la question dans le but d'aider svedberg, et donc encore moins de revoir son code sauf s'il le demande ou si il a une erreur manifeste. et donc sa question c'est
    Citation Envoyé par svedberg
    j'ai un souci avec cette routine.la boucle tourne sans cesse.
    et la seul raison pour laquel sa boucle ne s'arete pas c'est qu'elle ne trouve pas de cellule contenant un espace donc une simple histoire d'écriture. " " au lieu de ""
    donc bonne réponse de jacques-jean, fin de la polémique.
    bon week end

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

Discussions similaires

  1. [XL-2002] Faire une boucle Do Loop Until
    Par laguernette dans le forum Macros et VBA Excel
    Réponses: 4
    Dernier message: 14/06/2013, 10h52
  2. Impossible de terminer une boucle infinie
    Par vincent tariel dans le forum Multithreading
    Réponses: 11
    Dernier message: 27/02/2012, 17h34
  3. Problème avec une boucle Do.. Loop Until
    Par gta126 dans le forum VB 6 et antérieur
    Réponses: 5
    Dernier message: 29/12/2007, 12h27
  4. [VBA-E] PRobleme avec une boucle DO..LOOP WHILE
    Par AliochaBada dans le forum Macros et VBA Excel
    Réponses: 11
    Dernier message: 31/07/2006, 02h04
  5. evenement pour terminer une boucle
    Par ZaaN dans le forum MFC
    Réponses: 1
    Dernier message: 06/12/2005, 11h26

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