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

  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 é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

  7. #7
    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..

  8. #8
    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

  9. #9
    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+

  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
    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

  11. #11
    Expert éminent


    Profil pro
    Inscrit en
    Juin 2003
    Messages
    14 008
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 14 008
    Par défaut
    si j'ai bien compris .. si
    MenuGeneral.PasDeVerif = True tu ne ve rien faire...

    ecrit
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    If MenuGeneral.PasDeVerif = False then
      select Case ...
    ...
      End Select
    end if
    à la limite tu rajoute un else ... si tu as quelquechose à faire ... si pasverif = True..

  12. #12
    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
    Citation Envoyé par Tu
    For iLigne = 1 To MaPlage.End(xlDown).Row
    If MenuGeneral.PasDeVerif = True Then
    Select Case 1
    Else
    Select Case Cells(iLigne, 3)
    N'importe quoi !
    Si Cells(iLigne, 3) n'existe pas, tu as le Case Else où tu peux traiter
    Mais un select est forcément après Select case
    Select Case ne fait pas de rétroactivité...

    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) and MenuGeneral.PasDeVerif
            Case 1  and  True           
                'Verification de type1 (aucune vérif)     
            Case 2
                'Verification de type2                       
            Case 3
                'Verification de type3
            Case else
                msgbox "Rien de bon !"
            End Select
    Next
    Je n'ai pas testé mais peut-être peux-tu le faire pour nous (mais on n'est pas loin
    Je le fais de mon côté

    A+

  13. #13
    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
    Testé, ok !

    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 MacroQuiFaitTrue()
    PasDeVerif = True
    For iLigne = 1 To 3
            Select Case iLigne And PasDeVerif
                Case 1 And True
                    MsgBox "Verification de type1 (aucune vérif)"
                Case 2
                    'Verification de type2
                Case 3
                    'Verification de type3
                Case Else
                    MsgBox "Rien de bon !"
            End Select
    Next
    A+

  14. #14
    Expert éminent


    Profil pro
    Inscrit en
    Juin 2003
    Messages
    14 008
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 14 008
    Par défaut
    ouskel'n'or , bizarre ta syntaxe... bon c'est vrai qu'on à le bon résultat car en VB, ( iLigne And False ) donne 0 ... et comme le cas 0 n'existe pas dans ton select case on passe par else....
    mais enfin je préfére ma façon de l'écriture

  15. #15
    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
    Oulala vous m'embrouillez

    bon je vois bien ton code ouskel mais je comprend pas bien je pense.
    Deja toi dans ton code tu as changé, tu prend le N° de ligne et non la valeur (enfin aucun souci à ce niveau je l'adapte).

    Mais il ne fera le cas 1 que si la valeur de la ligne vaut 1 et pasdeverif=true, ce n'est pas ce que je veux.

    Il y a 2 cas.

    • Pas de verif = false
    Alors on fait le cas qui correspond à la valeur de la celulle de la ligne iLigne

    • Pasdeverif = true
    Alors on fait le cas 1 quelque soit la valeur qu'il y a dans la celulle iLigne

    Voilà j'espere que c'est plus clair

  16. #16
    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
    Citation Envoyé par Tu
    Voilà j'espere que c'est plus clair
    C'est mieux !

    Je reprends donc 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
    Sub MacroQuiFaitTrue()
    PasDeVerif = false
    For iLigne = 1 To 3
            Select Case iLigne And PasDeVerif or iLigne 
                Case 1 And True
                    MsgBox "Verification de type1 (aucune vérif)"
                Case 2
                    'Verification de type2
                Case 3
                    'Verification de type3
                Case Else
                    MsgBox "Rien de bon !"
            End Select
    Next
    End sub
    Tu testes mais de mon côté, ça roule

    A+

  17. #17
    Membre éclairé Avatar de malhivertman1
    Inscrit en
    Avril 2005
    Messages
    337
    Détails du profil
    Informations forums :
    Inscription : Avril 2005
    Messages : 337
    Par défaut
    Citation Envoyé par ouskel'n'or
    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 MacroQuiFaitTrue()
    PasDeVerif = True
    For iLigne = 1 To 3
            Select Case iLigne And PasDeVerif
                Case 1 And True
                    MsgBox "Verification de type1 (aucune vérif)"
                Case 2
                    'Verification de type2
                Case 3
                    'Verification de type3
                Case Else
                    MsgBox "Rien de bon !"
            End Select
    Next
    Ici ouskel'n'or a mis dans le select ta valeur iligne et le boolean pasdeverif donc tu peux faire un case avec true et un avec false

    Select Case iLigne And PasDeVerif
    Case 1 And True
    MsgBox "Verification de type1 (aucune vérif)"
    Case 1 And False
    'Verification de type2
    etc....
    End Select
    Enfin je pense

  18. #18
    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
    Oui, si tu veux séparer les deux cas, malhivertman1 a raison

    Just mon grain de sel

    A+

  19. #19
    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
    Ok dodo,

    Là ca fait bien ce que je veux que ca fasse

    Merci

  20. #20
    Expert éminent


    Profil pro
    Inscrit en
    Juin 2003
    Messages
    14 008
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 14 008
    Par défaut
    Citation Envoyé par malhivertman1
    Ici ouskel'n'or a mis dans le select ta valeur iligne et le boolean pasdeverif donc tu peux faire un case avec true et un avec false



    Enfin je pense
    non ... car ..

    écrire Case 1 and true c'est pareil qu'écrire Case (1 and true) donc Case 1
    et
    Case 1 and False donne Case 0 puisque (1 and False ) = 0 = (2 And False )= (3 and false ) = ( 4 and false ) .....

+ Répondre à la discussion
Cette discussion est résolue.
Page 1 sur 2 12 DernièreDernière

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