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

VBA Discussion :

pourquoi on error goto ne fonctionne qu'une seule fois ?


Sujet :

VBA

  1. #1
    Membre expérimenté
    Profil pro
    Inscrit en
    Novembre 2006
    Messages
    1 563
    Détails du profil
    Informations personnelles :
    Âge : 61
    Localisation : France

    Informations forums :
    Inscription : Novembre 2006
    Messages : 1 563
    Points : 1 691
    Points
    1 691
    Par défaut pourquoi on error goto ne fonctionne qu'une seule fois ?
    bonjour tt le monde. je ne comprend pas pourquoi on error goto fonctionne une fois mais pas deux dans ce bout de code
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    Sub erreur()
    ligne2:
    On Error GoTo ligne1
    Feuil2.Show
    MsgBox "on ne dois jamais me voir"
    ligne1:
    GoTo ligne2
    End Sub
    userform1 n'existe pas. donc en théorie, je devrais me mettre en boucle
    mais en fait, la premiere fois qu'il doit montrer usf1, la gestion d'erreur fonctionne, on ne vois pas le msgbox, et il va a ligne1, mais a la deuxieme, il s'arrete sur l'erreur. " erreur 424, objet requis
    j'ai besoin de cette forme plutot que on error resume next parce que justement, je voudrais qu'il y ait d'autres ligne de code apres usf1.show (qui n'est qu'un exemple) au cas ou cette commande fonctionnerais sans erreur.

  2. #2
    Expert éminent sénior


    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
    Points : 20 038
    Points
    20 038
    Par défaut
    tu peu remplacer .. ton Goto Ligne2 par :


  3. #3
    Membre expérimenté
    Profil pro
    Inscrit en
    Novembre 2006
    Messages
    1 563
    Détails du profil
    Informations personnelles :
    Âge : 61
    Localisation : France

    Informations forums :
    Inscription : Novembre 2006
    Messages : 1 563
    Points : 1 691
    Points
    1 691
    Par défaut
    salut bbil
    non, ça ça marche pas, j'ai une erreur 420 " reprise sans erreur "
    et si j'écris
    On Error Resume ligne1
    là c'est une erreur de compil " attendu next"

  4. #4
    Expert éminent sénior


    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
    Points : 20 038
    Points
    20 038
    Par défaut
    tiens voilà cela fonctionne même si la méthode n'est pas "terrible"...

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    Sub erreur()
    ligne2:
    On Error GoTo ligne1
    UserForm1.Show
    MsgBox "on ne dois jamais me voir"
    Exit Sub
    ligne1:
     If MsgBox("Erreur on continu ", vbYesNo) = vbYes Then Resume ligne2
    End Sub

  5. #5
    Membre expérimenté
    Profil pro
    Inscrit en
    Novembre 2006
    Messages
    1 563
    Détails du profil
    Informations personnelles :
    Âge : 61
    Localisation : France

    Informations forums :
    Inscription : Novembre 2006
    Messages : 1 563
    Points : 1 691
    Points
    1 691
    Par défaut
    non, désolé ça ne marche pas
    voici le code exact
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    Sub déprotege()
    For i = 1 To 3
    On Error GoTo ligne1
    Worksheets("stock" & i).Unprotect Password:="motdepasse"
    MsgBox "mot de passe valide"
    range ("a1") = "youpi")
    ligne1:
    MsgBox " mot de passe invalide"
    Next i
    End Sub
    le but est de continuer la macro (youpi)si le mot de passe est valide.
    en l'occurence "motdepasse" est faux, donc je dois aller a ligne1, puis passer a i = 2 et c'est a ce momment là que la gestion d'erreur ne fonctionne pas une deuxieme fois. j'ai lu l'aide et il semble qu'il y ait une histoire de desactivation du gestionnaire d'erreur que je ne comprend pas.

  6. #6
    Expert éminent sénior


    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
    Points : 20 038
    Points
    20 038
    Par défaut
    ben je vois pas l'instruction resume..?

  7. #7
    Expert éminent sénior

    Homme Profil pro
    Inscrit en
    Août 2005
    Messages
    3 317
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Secteur : Industrie

    Informations forums :
    Inscription : Août 2005
    Messages : 3 317
    Points : 20 144
    Points
    20 144
    Par défaut
    bonjour

    Je n'ai pas bien compris le fonctionnement de ta macro mais tu peux tester:

    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
    Sub Deprotege()
    Dim i As Integer
     
    On Error Resume Next
     
    For i = 1 To 3
        Worksheets("stock" & i).Unprotect Password:="motdepasse"
     
        If Err.Number = 0 Then
            MsgBox "mot de passe valide"
            Worksheets("stock" & i).Range("A1") = "youpi"
            Else
            MsgBox " mot de passe invalide"
        End If
     
        Err.Clear
    Next i
    End Sub


    http://silkyroad.developpez.com/VBA/GestionErreurs/


    bon après midi
    michel

  8. #8
    Membre expérimenté
    Profil pro
    Inscrit en
    Novembre 2006
    Messages
    1 563
    Détails du profil
    Informations personnelles :
    Âge : 61
    Localisation : France

    Informations forums :
    Inscription : Novembre 2006
    Messages : 1 563
    Points : 1 691
    Points
    1 691
    Par défaut
    bien, merci a tout les deux
    la solution de silkyroad fonctionne, mais c'est space, je comprend pas vraiment, pourquoi il faut faire ça. j'ai essayé en utilisant seulement err.clear ou err.number = 0, mais rien a faire, au deuxieme passage, ça bloque.
    bon dimanche

  9. #9
    Nouveau membre du Club
    Homme Profil pro
    Secrétaire - Service Cantonal de la jeunesse (VS-CH)
    Inscrit en
    Mai 2013
    Messages
    25
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations professionnelles :
    Activité : Secrétaire - Service Cantonal de la jeunesse (VS-CH)
    Secteur : Service public

    Informations forums :
    Inscription : Mai 2013
    Messages : 25
    Points : 37
    Points
    37
    Par défaut
    Bonjour,

    je viens moi-même de tombé dans un prolbème similaire. Et après une recherche j'ai réussi à trouver un solution dans le MSDN.

    Enfaite il suiffis de "réinitialiser" le On Error grâce à l'écriture Exemple :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    Sub Test
    On Error Goto Sectry
    1 = 3 ' Il y a un erreur
    Sectry:
    Msgbox "Le premier essai n'a pas marché"
    On Error Goto -1
    On Error Goto Lastry
    2 = 3 ' Il y a une erreur
    Lastry:
    Msgbox "Le 2e essai n'a pas marché"
    End sub
    Ce n'est pas un code très concret mais au moins il permet de voir que on error marchera 2 fois (et même plus) dans ce cas là.

    J'espère avoir aider qqun.

    bonne journée !

  10. #10
    Expert éminent sénior
    Avatar de Marc-L
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Avril 2013
    Messages
    9 468
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2013
    Messages : 9 468
    Points : 18 677
    Points
    18 677
    Par défaut




    Bonjour,

    il y a eu une discussion récente dans le forum Excel ou son sous-forum Macros,
    cette astuce utilisée à mauvais escient peut déclencher une boucle sans fin !
    C'est parce que la vitesse de la lumière est plus rapide que celle du son que tant de gens paressent brillants avant d'avoir l'air con ! (Thomas Boishardy)

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

Discussions similaires

  1. Réponses: 5
    Dernier message: 12/10/2010, 20h49
  2. Survol ne fonctionne qu'une seule fois sur IE
    Par elekaj34 dans le forum Général JavaScript
    Réponses: 4
    Dernier message: 10/08/2009, 14h06
  3. [JSTL] foreach qui ne fonctionne qu'une seule fois
    Par Ouguiya dans le forum Taglibs
    Réponses: 16
    Dernier message: 02/08/2007, 16h17
  4. Réponses: 6
    Dernier message: 13/07/2007, 11h46
  5. [AJAX] [XMLHttp][IE]Fonction qui ne fonctionne qu'une seule fois
    Par narnou dans le forum Général JavaScript
    Réponses: 7
    Dernier message: 13/07/2007, 11h16

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