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 :

goto qui ne marche pas indéfiniment


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Homme Profil pro
    Etude
    Inscrit en
    Mars 2014
    Messages
    13
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Afrique Du Sud

    Informations professionnelles :
    Activité : Etude

    Informations forums :
    Inscription : Mars 2014
    Messages : 13
    Par défaut goto qui ne marche pas indéfiniment
    Bonjour,

    Je cherche a faire un truc assez simple mais qui marche pas. Je veux qu'a chaque fois que l'instruction i="a" est rencontree on aille au label "err" or ce qui se passe c'est que la premiere fois que cette instruction est rencontree on va bien a err mais au second passage j obtiens une erreur. Pourant je continue a faire du error handling puisque j ai pas fait on error goto 0. J ai un fusil a une balle et je veux une kalash avec un nombre de balles infinie...


    Merci !

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    Dim i As Integer
    err:
     
        For i = 0 To 0
     
        Next i
     
        On Error GoTo err
     
        i = "a"

  2. #2
    Expert confirmé
    Avatar de MarcelG
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juillet 2009
    Messages
    3 449
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 68
    Localisation : France, Maine et Loire (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Finance

    Informations forums :
    Inscription : Juillet 2009
    Messages : 3 449
    Billets dans le blog
    7
    Par défaut
    Bonjour et bienvenu sur le Forum,

    J ai un fusil a une balle et je veux une kalash avec un nombre de balles infinie.
    Quand même pas à ce point!

    Ton étiquette Erreur est placée avant ton GoTo
    Quant à ta boucle, 0 to 0..

    Quoi qu'il en soit, il serait plus efficace de retourner le code complet en précisant le message d'erreur et la ligne en anomalie (surlignée en jaune).

  3. #3
    Membre averti
    Homme Profil pro
    Etude
    Inscrit en
    Mars 2014
    Messages
    13
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Afrique Du Sud

    Informations professionnelles :
    Activité : Etude

    Informations forums :
    Inscription : Mars 2014
    Messages : 13
    Par défaut
    Merci de ta réponse. J'ai modifié le code en conséquence et le problème est le même. Honnêtement le code au complet n'a rien à voir avec le problème que j'expose. Je dirai même que par pure curiosité je veux comprendre ce on error goto car normalement tant que j'ai pas fait on error goto 0 il doit continuer à gérer l erreur....

    Une idée ?
    Merci
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    On Error GoTo err
        Dim i As Integer
    err:
     
        For i = 0 To 1
     
        Next i
     
        i = "a"

  4. #4
    Membre averti
    Homme Profil pro
    Etude
    Inscrit en
    Mars 2014
    Messages
    13
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Afrique Du Sud

    Informations professionnelles :
    Activité : Etude

    Informations forums :
    Inscription : Mars 2014
    Messages : 13
    Par défaut
    pour répondre a ta question, la ligne en cause est évidemment i="a" et le message renvoyé est "type mismatch" car integer n est pas string. C est un cas d école qui sera implémenté dans un code beaucoup plus compliqué et que je n ai aps le droit de poster nul part...

  5. #5
    Expert confirmé
    Avatar de MarcelG
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juillet 2009
    Messages
    3 449
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 68
    Localisation : France, Maine et Loire (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Finance

    Informations forums :
    Inscription : Juillet 2009
    Messages : 3 449
    Billets dans le blog
    7
    Par défaut
    Dans ce cas bien sûr, si i est déclarée en Integer, alors tu ne peux lui affecter une valeur String.

    L'étiquette Err doit être évidemment placée après le code générant une erreur.

    Avec ce peu d'éléments, il est difficile, du moins à mon humble niveau, d'en dire plus.

    Pour information, tu peux consulter ce tutoriel Gestion des erreurs

  6. #6
    Membre averti
    Homme Profil pro
    Etude
    Inscrit en
    Mars 2014
    Messages
    13
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Afrique Du Sud

    Informations professionnelles :
    Activité : Etude

    Informations forums :
    Inscription : Mars 2014
    Messages : 13
    Par défaut
    l affectation d un stringa un integer donne une erreur d'apres le dernier code postee. Le fait que la label erreur soit apres ne regle pas mon pb car je l ai essayer. Si je tombe sur la reponse, je la posterai pour d autres personnes...

    Merci pour ton temps.

  7. #7
    Invité
    Invité(e)
    Par défaut
    Bonsoir,

    Tu as testé que ton imprimante était bien en ligne mais manque de chance au moment de l'envoyer elle tombe en panne?

    Tu as des coupures réseau intempestifs ?

    Qu'est ce qui justifie l'utilisation du on error et pas de qualifier les données que tu fournis à ton programme ?

  8. #8
    Expert confirmé
    Homme Profil pro
    aucune
    Inscrit en
    Avril 2016
    Messages
    7 563
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 84
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : aucune

    Informations forums :
    Inscription : Avril 2016
    Messages : 7 563
    Par défaut
    Bonjour,
    Juste pour satisfaire ma curiosité :
    C'est quoi, cette variable i de type integer, à laquelle on attribue une chaîne de caractères (un seul, en fait) et qu'on utilise de toutes manières pas ?

  9. #9
    Expert confirmé
    Homme Profil pro
    Inscrit en
    Août 2010
    Messages
    3 453
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Août 2010
    Messages : 3 453
    Par défaut
    Bonjour,

    Je pense que notre ami est entrain de tester le gestionnaire d'erreur

  10. #10
    Expert confirmé
    Homme Profil pro
    aucune
    Inscrit en
    Avril 2016
    Messages
    7 563
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 84
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : aucune

    Informations forums :
    Inscription : Avril 2016
    Messages : 7 563
    Par défaut
    Bonjour Theze
    Ah oui. Je vois.
    Ce serait alors du genre (plus digeste) :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    Dim i As Integer
        Dim J As Integer
        On Error Resume Next
        Do While J < 20
          i = "a"
          J = J + 1
          If err Then MsgBox J & "  " & err.Description: err.Clear
        Loop
        On Error GoTo 0

  11. #11
    Expert confirmé
    Homme Profil pro
    Inscrit en
    Août 2010
    Messages
    3 453
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Août 2010
    Messages : 3 453
    Par défaut
    Je pense que Amir2121 s'interroge sur le fait que le gestionnaire ne gère l'erreur qu'une fois mais pour qu'il continu à gérer les erreurs suivantes il faut nettoyer le gestionnaire avec Clear !

  12. #12
    Inactif  

    Homme Profil pro
    cuisiniste
    Inscrit en
    Avril 2009
    Messages
    15 374
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : cuisiniste
    Secteur : Bâtiment

    Informations forums :
    Inscription : Avril 2009
    Messages : 15 374
    Billets dans le blog
    8
    Par défaut re
    Bonjour
    puisque la gestion d'erreur est sensée opérer dans la boucle autant la mettre dedans
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    Sub test()
        Dim i As Integer
        Dim J As Integer
        Do While J < 20
            J = J + 1
            On Error Resume Next
            i = "a"
            If Err Then MsgBox J & "  " & Err.Description: Err.Clear
            Err.Clear ' ou On Error GoTo 0
        Loop
     
    End Sub
    le "on error resume next " passe a la ligne suivante donc le message s'affiche et ensuite l'erreur est effacée de la memoire avec "err.clear" ou meme " On Error GoTo 0"
    mes fichiers dans les contributions:
    mail avec CDO en vba et mail avec CDO en vbs dans un HTA
    survol des bouton dans userform
    prendre un cliché d'un range

    si ton problème est résolu n'oublie pas de pointer : : ça peut servir aux autres
    et n'oublie pas de voter

  13. #13
    Expert éminent Avatar de Menhir
    Homme Profil pro
    Ingénieur
    Inscrit en
    Juin 2007
    Messages
    16 037
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Finistère (Bretagne)

    Informations professionnelles :
    Activité : Ingénieur
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2007
    Messages : 16 037
    Par défaut
    Citation Envoyé par Amir2121 Voir le message
    Pour repondre a ta question legitime, le i="a" est en fait dans mon programme un ordre de selection dans un fichier word a qui on aura donne l'ordre (par un shell) de s'ouvrir. Il se trouve que tant que le fichier word n est pas ouvert on aura une erreur a l'ordre selection. Je ne veux pas utiliser un "wait" ou sleep d un nombre de seconde que j aurai choisi. Je veux creer une boucle d attente qui attend TANT qu on a une erreur a une certaine instruction.
    Au lieu de procéder ainsi avec une méthode vraiment pas propre, je te conseille de procéder ainsi :

    1 - Vérifier que le fichier existe en utilisant une fonction Dir() (si le nom de fichier est obtenu par une boite de dialogue, cette phase n'est pas utile).
    2 - Ouvrir le fichier avec un GetObject() qui ne nécessite pas de boucle d'attente.
    https://docs.microsoft.com/fr-fr/off...bject-function
    Ne pas oublier de mettre un Set devant pour placer la référence du fichier ouvert dans une variable (voir les exemples fournis dans le lien).

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

Discussions similaires

  1. Méthode getSize() qui ne marche pas
    Par mush_H dans le forum Agents de placement/Fenêtres
    Réponses: 15
    Dernier message: 20/03/2005, 01h29
  2. [SWING] KeyListener qui ne marche pas
    Par kindool dans le forum AWT/Swing
    Réponses: 2
    Dernier message: 10/01/2005, 19h04
  3. Iptables configuration qui ne marche pas....
    Par The_Nail dans le forum Sécurité
    Réponses: 7
    Dernier message: 03/02/2004, 14h27
  4. Réponses: 3
    Dernier message: 08/09/2003, 15h06
  5. Réponses: 9
    Dernier message: 07/05/2003, 12h57

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