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 :

[VBA-E]Probleme "goto"


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé
    Profil pro
    Inscrit en
    Février 2006
    Messages
    932
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France

    Informations forums :
    Inscription : Février 2006
    Messages : 932
    Par défaut [VBA-E]Probleme "goto"
    Salut,

    j'ai un petit souci avec une instruction "Goto" (je doit certainement mal l'utiliser )

    Voici mon 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
     
    For iLigne = 1 To MaPlage.End(xlDown).Row
            If Cells(iLigne, 3) = 1 Then GoTo TELECHARGER1
            If Cells(iLigne, 3) = 2 Then GoTo TELECHARGER2
            If Cells(iLigne, 3) = 3 Then GoTo TELECHARGER3
     
    TELECHARGER1:
        blabla...
     
    TELECHARGER2:
        blabla....
     
    TELECHARGER3:
        blabla....
    Next
    Le soucis est que si je me trouve dans le cas "1" (TELECHARGER1) , il me fait quand meme les 2 suivants (TELECHARGER2 et TELECHARGER3) enfin j'en ai bien l'impression...

    comment dire qu'une fois qu'il a fait ce qu'il y a dans le cas, qu'il reparte dans le "for" pour voir la ligne suivant de Maplage.

    j'ai tenté de mettre des "next" à la fin de chaque cas mais il n'aime pas...

  2. #2
    Inactif  
    Avatar de ouskel'n'or
    Profil pro
    Inscrit en
    Février 2005
    Messages
    12 464
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2005
    Messages : 12 464
    Par défaut
    Hello Erzats, t'a déjà oublié Exit for ?

  3. #3
    Inactif  
    Avatar de ouskel'n'or
    Profil pro
    Inscrit en
    Février 2005
    Messages
    12 464
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2005
    Messages : 12 464
    Par défaut
    Alors tu n'utilises pas Goto car avec Goto dans une boucle, tu vas saturer la Pile et planter ton programme.
    Avec un select case sur la variable qui définit ton goto, tu auras un programme propre... Arrête de faire des trucs qui se font pas
    Si tu as besoin d'aide sur select case, tu dis

  4. #4
    Membre émérite
    Avatar de Theocourant
    Profil pro
    Inscrit en
    Janvier 2005
    Messages
    618
    Détails du profil
    Informations personnelles :
    Âge : 47
    Localisation : France

    Informations forums :
    Inscription : Janvier 2005
    Messages : 618
    Par défaut
    Citation Envoyé par Elstak
    coucou chmod,

    bah oui pour le moment c'est ce que je fais mais comme il y a pas mal de code pour chaque cas, je trouvais cette presentation plus claire mais bon si c'est à éviter... je vais éviter
    Dans ce cas sépare tes traitements dans différentes sub :
    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
    For iLigne = 1 To MaPlage.End(xlDown).Row
            If Cells(iLigne, 3) = 1 Then TELECHARGER1
            If Cells(iLigne, 3) = 2 Then TELECHARGER2
            If Cells(iLigne, 3) = 3 Then TELECHARGER3
    Next
     
    blabla...
     
    End Sub (ou End Function)
     
    Sub TELECHARGER1()
        blabla...
    End Sub
     
    Sub TELECHARGER2()
        blabla....
     End Sub 
     
    Sub TELECHARGER3()
        blabla....
    End Sub
    +

    Théo

    [EDIT] J'ai corriger une erreur du code (zava oublié de retirer les goto )

  5. #5
    Inactif  
    Avatar de ouskel'n'or
    Profil pro
    Inscrit en
    Février 2005
    Messages
    12 464
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2005
    Messages : 12 464
    Par défaut
    Hello Théo, tu ne trouves pas qu'un Select case est plus propre ?
    Pas de if, pas d'appel à d'autre procédure...

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
    For iLigne = 1 To MaPlage.End(xlDown).Row
            Select case Cells(iLigne, 3)
                  Case 1
                        blabla... 1
                  Case 2
                        blabla... 2
                  Case 3
                        blabla... 3
                  Case Else
                      msgbox "N'existe pas"
            End select
    Next
    Juste une idée

  6. #6
    Membre émérite
    Avatar de Theocourant
    Profil pro
    Inscrit en
    Janvier 2005
    Messages
    618
    Détails du profil
    Informations personnelles :
    Âge : 47
    Localisation : France

    Informations forums :
    Inscription : Janvier 2005
    Messages : 618
    Par défaut
    Citation Envoyé par ouskel'n'or
    Hello Théo, tu ne trouves pas qu'un Select case est plus propre ?
    Pas de if, pas d'appel à d'autre procédure...
    [/code]

    Juste une idée
    Eh bien pas forcément car comme il le dit lui-même, les parties de programme sont importantes au niveau nombre de lognes donc pour éclaicir la structure du programme, personnellement, j'utiliserais des appels à procédures.

    +

    Théo

  7. #7
    Inactif  
    Avatar de ouskel'n'or
    Profil pro
    Inscrit en
    Février 2005
    Messages
    12 464
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2005
    Messages : 12 464
    Par défaut
    Plus clair, pour ma part, je ne trouve pas, mais ce n'est là qu'un point de vue, par contre des appels à procédures sont plus lents, c'est certain.
    Mais bon, ainsi Elstak a le choix.
    MAIS PAS DE GOTO DANS UNE BOUCLE ! JAMAIS !
    Et ce n'est pas un point de vue

    A+

  8. #8
    Membre éclairé
    Profil pro
    Inscrit en
    Février 2006
    Messages
    932
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France

    Informations forums :
    Inscription : Février 2006
    Messages : 932
    Par défaut
    Recoucou,

    Voilà j'ai essayé ce code et j'ai une erreur "else sans if"

    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
     
    For iLigne = 1 To MaPlage.End(xlDown).Row
        If MenuGeneral.PasDeVerif = True Then
            Select Case 1
        Else
            Select Case Cells(iLigne, 3)
        End If
     
            Case 1            
                'Verification de type1 (aucune vérif)     
            Case 2
                'Verification de type2                       
            Case 3
                'Verification de type3
     
            End Select
    Next
    Il y a des "if" dans me Verification mais j'ai bien regardéet je les ferme tous.

    si je ne laisse que

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    Select Case Cells(iLigne, 3)
    je n'ai aucun souci (si je vire ma conditionnelle...). Une idée sur la facon dont il faudrait l'écrire??

    Ps : ce que je veux c'est que si une case est cochée, il fasse toujours le cas 1

  9. #9
    Membre éclairé
    Profil pro
    Inscrit en
    Février 2006
    Messages
    932
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France

    Informations forums :
    Inscription : Février 2006
    Messages : 932
    Par défaut
    Citation Envoyé par ouskel
    Si tu as besoin d'aide sur select case, tu dis
    J'ai besoin d'aide

    C'est ce que je voulais faire en fait à la base....

    Citation Envoyé par ouskel
    ]
    Alors tu n'utilises pas Goto car avec Goto dans une boucle
    Tu me l'avais déjà dis en plus

    voilà sinon là je me suis debrouillé pour mettre des if où il faut et ca fonctionne mais le select case ca me plait bien

  10. #10
    Membre éclairé
    Profil pro
    Inscrit en
    Février 2006
    Messages
    932
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France

    Informations forums :
    Inscription : Février 2006
    Messages : 932
    Par défaut
    Oula, c'est la folie sur ce post !!

    bon je teste ta solution ouskel, juste un petite question :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    Select case Cells(iLigne, 3)
    le "Cells(iLigne, 3)" va directement mettre la valeur de la cellule, plus besoin de mettre de truc de ce genre là :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    If Cells(iLigne, 3) = 1
    ?

    Je pense que cetait ca mon probleme quand j'utilisai les case..

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

Discussions similaires

  1. Probleme affichage entre quotes ``
    Par corentink dans le forum Linux
    Réponses: 2
    Dernier message: 01/01/2008, 23h11
  2. [text] probleme avec simple quote
    Par bor1s dans le forum Langage SQL
    Réponses: 3
    Dernier message: 22/12/2005, 16h03

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