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

  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 à 05h05. 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 567
    Détails du profil
    Informations personnelles :
    Âge : 62
    Localisation : France

    Informations forums :
    Inscription : Novembre 2006
    Messages : 1 567
    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 567
    Détails du profil
    Informations personnelles :
    Âge : 62
    Localisation : France

    Informations forums :
    Inscription : Novembre 2006
    Messages : 1 567
    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

  7. #7
    Invité
    Invité(e)
    Par défaut
    Bonjour Gorfael et Alsimbad,

    Je ne voudrais pas contrarier Alsimbad qui a dit, je pense, avec raison : fin de la polémique.

    Mais comme involontairement je suis un peu à l'origine de celle-ci je tiens quand même à préciser (et je le ferais croyez-moi même si j'avais tort et qu'Alsimbad l'avait confirmé).

    A travers le code que nous a fournit Serdberg :

    on ne peut que conclure que la fin de la boucle est de trouver, non pas une cellule commençant par un espace mais (on tenant de l'erreur supposée) une cellule ne contenant qu'un espace (alors qu'il paraît évident que la cellule devrait être vide).

    Donc désolé Gorfael, mais je ne crois pas que votre hypothèse puisse être validée.

    Encore une fois sans aucune polémique : "errare humanum est" d'après mes restes de latin que je n'ai jamais appris.

    Amicalement.

  8. #8
    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 le forum
    Si, si, j'aime bien paul et miquet
    C'était pas une critique (quoique), mais sûrement pas une attaque.
    Je disais simplement que je préfère ta réponse :
    " " = espace
    par contre
    "" = rien ou vide
    la différence peut être là.

    à celle d'alsimbad :
    elle est juste là, je confirme

    Aucun élément ne permet de le certifier (même si je pense comme vous deux que la solution est bien là). À force d'écumer les forums, je me suis aperçu que quelque fois (heureusement), la logique n'est pas forcément au rendez-vous.
    Et comme alsimbad est plutôt du coté dépanneur que dépanné, il fallait qu'il ait un peu plus de doutes. Des fois, le problème est extérieur au code. Ne serait-ce que parfois, le code donné n'est qu'un extrait de la macro.

    Mais effectivement, je n'avais sans doute pas à l'écrire, et je vous demande de m'en excuser.
    J'attends de tous les intervenants dans un sujet où je réponds, que s'ils trouvent une imprécision ou une erreur (impossible ^^), ils me le signalent. Je suis encore (malheureusement) perfectible

    A+

  9. #9
    Nouveau membre du Club
    Inscrit en
    Janvier 2007
    Messages
    4
    Détails du profil
    Informations forums :
    Inscription : Janvier 2007
    Messages : 4
    Par défaut pb vba excel
    Merci à tous de vous être casser la tête sur mon problème.
    J'ai remercié JACQUES François mais je me suis rendu copte qu'il y e avait d'autres
    Encore une fois merci
    Cordialement
    Thierry

+ 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, 09h52
  2. Impossible de terminer une boucle infinie
    Par vincent tariel dans le forum Multithreading
    Réponses: 11
    Dernier message: 27/02/2012, 16h34
  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, 11h27
  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, 01h04
  5. evenement pour terminer une boucle
    Par ZaaN dans le forum MFC
    Réponses: 1
    Dernier message: 06/12/2005, 10h26

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