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 :

Boucle For tournant a l'infini


Sujet :

Macros et VBA Excel

  1. #1
    Membre habitué
    Profil pro
    Inscrit en
    Juin 2010
    Messages
    9
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2010
    Messages : 9
    Par défaut Boucle For tournant a l'infini
    Bonjour a tous,

    Contexte:
    J'essaie de recréer un Gantt entre 1 et 5 lignes dans Excel.
    Normalement j'ai 2 dates (début - fin) mais dans le cas de milestones je n'en ai plus qu'une, c est pourquoi j'ai crée un bout de code sur la gestion d'erreurs.

    Problème:
    La variable "lengant" définit le nombre de ligne a boucler (entre 1 et 5).
    La boucle For est censé restreindre la boucle a son max : 5.
    Le problème est que la boucle continue a tourner a l'infini. Je n'arrive pas a la terminer a "lengant". Pourquoi ?

    Merci de m'aider

    Code:
    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
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
     
    On Error GoTo except:
     
    For idxline = 1 To 5
     
    If idxline = lengant + 1 Then GoTo suite:
     
        strLabel = "Finish" & idxline
        Application.Goto Reference:=strLabel
        firstCellRow = ActiveCell.Row
        firstCellCol = ActiveCell.Column
        strLabel = "Start" & idxline
        Application.Goto Reference:=strLabel
        lastCellRow = ActiveCell.Row
        lastCellCol = ActiveCell.Column
     
    X:
        Range(Cells(firstCellRow, firstCellCol), Cells(lastCellRow, lastCellCol)).Select
        With Selection.Interior
                .ColorIndex = 37
                .Pattern = xlSolid
        End With
        Selection.Borders(xlDiagonalDown).LineStyle = xlNone
        Selection.Borders(xlDiagonalUp).LineStyle = xlNone
            With Selection.Borders(xlEdgeLeft)
                .LineStyle = xlContinuous
                .Weight = xlThin
                .ColorIndex = xlAutomatic
            End With
            With Selection.Borders(xlEdgeTop)
                .LineStyle = xlContinuous
                .Weight = xlThin
                .ColorIndex = xlAutomatic
            End With
            With Selection.Borders(xlEdgeBottom)
                .LineStyle = xlContinuous
                .Weight = xlThin
                .ColorIndex = xlAutomatic
            End With
            With Selection.Borders(xlEdgeRight)
                .LineStyle = xlContinuous
                .Weight = xlThin
                .ColorIndex = xlAutomatic
            End With
     
     Next idxline
     
    except:
        codestrLabel = Left(strLabel, 4)
        idxstrLabel = Right(strLabel, 1)
     
        If codestrLabel = "Fini" Then
            Application.Goto Reference:="Start" & idxstrLabel
        ElseIf codestrLabel = "Star" Then
            Application.Goto Reference:="Finish" & idxstrLabel
        End If
     
        lastCellRow = ActiveCell.Row
        lastCellCol = ActiveCell.Column
        firstCellRow = lastCellRow
        firstCellCol = lastCellCol
        Err.Clear
        Resume X:

  2. #2
    Expert confirmé Avatar de jfontaine
    Homme Profil pro
    Contrôleur de Gestion
    Inscrit en
    Juin 2006
    Messages
    4 756
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51
    Localisation : France, Sarthe (Pays de la Loire)

    Informations professionnelles :
    Activité : Contrôleur de Gestion

    Informations forums :
    Inscription : Juin 2006
    Messages : 4 756
    Par défaut
    Bonjour,

    Si j'ai bien compris, tu connais le nombre de boucle a faire grace a ta variable lengant.

    As tu essayé ceci

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    For idxline = 1 To lengant

  3. #3
    Membre Expert Avatar de Godzestla
    Homme Profil pro
    Chercheur de bonheur
    Inscrit en
    Août 2007
    Messages
    2 403
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    Localisation : Belgique

    Informations professionnelles :
    Activité : Chercheur de bonheur
    Secteur : Industrie

    Informations forums :
    Inscription : Août 2007
    Messages : 2 403
    Par défaut
    Bonjour,

    en plus de Jfontaine (, 2 choses me gènent :

    1 ) resume X qui te ramène dans la boucle .. Ca pue à plein nez le bouclage infini.

    2) La sortie de la boucle par goto n'est jamais indiquée. Utilise EXIT FOR à la place (voir aide en ligne sur FOR).

    Bonne journée.

  4. #4
    Membre habitué
    Profil pro
    Inscrit en
    Juin 2010
    Messages
    9
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2010
    Messages : 9
    Par défaut
    Merci pour vos réponses,

    Est-ce que la gestion de l'exception dans la boucle du For ne provoque pas une rupture de la boucle quand l'exception est levée malgré le Resume X dans le bloc d'erreur.

    En effet, idxline prend une valeur supérieure a 5, malgré tout la boucle For continue.

    Merci d'avance,

  5. #5
    Membre Expert Avatar de Godzestla
    Homme Profil pro
    Chercheur de bonheur
    Inscrit en
    Août 2007
    Messages
    2 403
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    Localisation : Belgique

    Informations professionnelles :
    Activité : Chercheur de bonheur
    Secteur : Industrie

    Informations forums :
    Inscription : Août 2007
    Messages : 2 403
    Par défaut
    Re,

    c'est très possible.

    Ne peux-tu pas te passer de cette gestion d'exception ?
    De plus même s'il n'y a pas d'erreur, il me semble que ton code passe par le Resume x, qui donc renvoie dans la boucle, et puis repasse dans le resume x.

    Tu comprends ?

    Tu viens de réinventer le chat qui se bouffe la queue je crois.

Discussions similaires

  1. Réponses: 1
    Dernier message: 11/06/2014, 12h44
  2. Réponses: 25
    Dernier message: 31/03/2014, 16h57
  3. Boucle For Next infinie sur enregistrement des pieces jointes
    Par moumerico dans le forum Général VBA
    Réponses: 4
    Dernier message: 25/08/2010, 09h43
  4. Boucle for et RegExp infinie
    Par nikolaus dans le forum Général JavaScript
    Réponses: 2
    Dernier message: 06/10/2009, 16h32
  5. [langage] boucle "for" modification du pas
    Par K-ZimiR dans le forum Langage
    Réponses: 4
    Dernier message: 29/04/2004, 11h54

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