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 :

Gestion des erreurs, plantage si 2 erreurs successives [XL-2010]


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
    AMATEUR
    Inscrit en
    Février 2016
    Messages
    15
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : AMATEUR
    Secteur : Communication - Médias

    Informations forums :
    Inscription : Février 2016
    Messages : 15
    Par défaut Gestion des erreurs, plantage si 2 erreurs successives
    Bonjour à tous,
    Après bien des recherches et ne trouvant pas la réponse à un problème je me résous à éditer ce message.

    J'ai reproduit le problème dans ce petit 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
     
    Sub TestErreurs()
     
    On Error GoTo GestionErreurs
    Dim i As Integer
    i = "Toto"
    'i = 12
    Debug.Print "Ici on a d'autres instructions"
    Debug.Print "-------------------------"
    Debug.Print "-------------------------"
    Debug.Print "-------------------------"
    Debug.Print "-------------------------"
     
    Suite:
    Windows("test.xlsx").Activate
     
    MsgBox "Suite de la procédure"
     
    On Error GoTo 0
    Exit Sub
     
    GestionErreurs:
     
        Select Case Err.Number
            Case 13
            'MsgBox "Il s'agit d'une incompatibilité de type"
            i = 3
            GoTo Suite
     
     
            Case 9
            MsgBox "Ce classeur n'est pas ouvert !"
            Resume Next
     
            Case Else
            MsgBox Err.Number & "  " & Err.Description
     
        End Select
     
    End Sub
    Le but est de créer une première erreur gérée par le "Select Case" Case 13 qui renvoie à l'étiquette Suite :
    (une variable de type "Integer" ne peut recevoir une valeur de type "String")
    Cette partie de la gestion d'erreurs fonctionne

    Puis de créer une seconde erreur en appelant un fichier qui n'existe pas (normalement Case 9 du "Select Case")

    Et là, la gestion des erreurs ne fonctionne pas

    Si par contre on attribue une valeur cohérente d'entier à "i", l'erreur due au fichier qui n'existe pas est prise en compte.
    étonnant non ?

    Cordialement
    GG

  2. #2
    Invité
    Invité(e)
    Par défaut
    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
     
    Sub TestErreurs()
     
    On Error GoTo GestionErreurs
    Dim i As Integer
    i = "Toto"
    'i = 12
    Debug.Print "Ici on a d'autres instructions"
    Debug.Print "-------------------------"
    Debug.Print "-------------------------"
    Debug.Print "-------------------------"
    Debug.Print "-------------------------"
     
    Suite:
    Windows("test.xlsx").Activate
     
    MsgBox "Suite de la procédure"
     
    On Error GoTo 0
    Exit Sub
     
    GestionErreurs:
     
        Select Case Err.Number
            Case 13
            'MsgBox "Il s'agit d'une incompatibilité de type"
            i = 3
            GoTo Suite
     
     
            Case 9
            MsgBox "Ce classeur n'est pas ouvert !"
     
            Case Else
            MsgBox Err.Number & "  " & Err.Description
     
        End Select
     err.clear
     Resume Next
     
    End Sub

  3. #3
    Membre averti
    Homme Profil pro
    AMATEUR
    Inscrit en
    Février 2016
    Messages
    15
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : AMATEUR
    Secteur : Communication - Médias

    Informations forums :
    Inscription : Février 2016
    Messages : 15
    Par défaut Merci pour cette réponse très rapide
    Bonjour et merci pour cette réponse très rapide.

    Malheureusement le problème est toujours le même.
    Au moment du déclenchement de la 2ème erreur j'ai toujours le pop-up VBA " Erreur d'exécution '9' : L'indice n'appartient pas à la sélection"

    D'autre part le code en pas à pas ne passe jamais par les lignes 38-39 (ajoutées par vos soins)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    err.clear
    Resume Next

    La question reste donc entière !

    Cordialement,

    GG

  4. #4
    Membre émérite
    Homme Profil pro
    Directeur
    Inscrit en
    Avril 2003
    Messages
    724
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Directeur

    Informations forums :
    Inscription : Avril 2003
    Messages : 724
    Par défaut
    Remplacez Goto Suite par Resume Suite
    NB: attention à ne pas tomber das une boucle sans fin avec un code de ce genre!

    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
    Sub TestErreurs()
     
        On Error GoTo GestionErreurs
        Dim i As Integer
        i = "Toto"
        'i = 12
        Debug.Print "Ici on a d'autres instructions"
        Debug.Print "-------------------------"
        Debug.Print "-------------------------"
        Debug.Print "-------------------------"
        Debug.Print "-------------------------"
     
    Suite:
     
        Windows("test.xlsx").Activate
     
        MsgBox "Suite de la procédure"
     
        ' NB: Exit Sub fait automatiquement le On Error Goto 0
        Exit Sub
     
    GestionErreurs:
     
            Select Case err.Number
                Case 13
                    MsgBox "Il s'agit d'une incompatibilité de type"
                    i = 3
                    Resume Suite
                Case 9
                    MsgBox "Ce classeur n'est pas ouvert !"
                Case Else
                    MsgBox err.Number & "  " & err.Description
            End Select
         err.Clear
         Resume Next
     
    End Sub

  5. #5
    Membre averti
    Homme Profil pro
    AMATEUR
    Inscrit en
    Février 2016
    Messages
    15
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : AMATEUR
    Secteur : Communication - Médias

    Informations forums :
    Inscription : Février 2016
    Messages : 15
    Par défaut
    Bonjour,
    Un grand merci à Philippe PONS pour ses explications.
    Le problème est réglé et j'en ai appris un peu plus sur la gestion des erreurs.
    De retour d'une formation où la gestion des erreurs a été abordée j'essaie de mettre en place les acquis et tente de remplacer toutes les vilaines procédures de contournement mises en place jusqu'alors.
    C'est pourquoi j'ai utilisé ce type de structure de gestion des erreurs.

    J'ignorais qu'on pouvait utiliser le "Resume" avec une étiquette et que "Exit Sub" fait automatiquement le "On Error Goto 0 "

    Un petit mot sur le "err.Clear" dont on ne m'a pas parlé en formation.

    D'après ce qui est indiqué dans l'aide (F1) :

    La méthode Clear est appelée automatiquement dès que l'une des instructions suivantes est exécutée :
    • Tout type d'instruction Resume
    • Exit Sub, Exit Function, Exit Property
    • Toute instruction On Error


    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
     
    Sub TestErreurs()
     
    On Error GoTo GestionErreurs
    Dim i As Integer
    i = "Toto"
    'i = 12
     
    Debug.Print "Ici on a d'autres instructions"
    Debug.Print "-------------------------"
    Debug.Print "-------------------------"
    Debug.Print "-------------------------"
    Debug.Print "-------------------------"
     
    Suite:
     
    Windows("test.xlsx").Activate
    MsgBox "Suite de la procédure"
     
    'NB: Exit Sub fait automatiquement le On Error Goto 0
    'On Error GoTo 0
    Exit Sub
     
    GestionErreurs:
     
        Select Case Err.Number
            Case 13
            'MsgBox "Il s'agit d'une incompatibilité de type"
            i = 3
            Resume Suite
     
     
            Case 9
            MsgBox "Ce classeur n'est pas ouvert !"
            Resume Next
     
            Case Else
            MsgBox Err.Number & "  " & Err.Description
     
    '       Le fichier d'aide indique :
                'La méthode Clear est appelée automatiquement dès que l'une des instructions suivantes est exécutée :
                'Tout type d'instruction Resume
                'Exit Sub, Exit Function, Exit Property
                'Toute instruction On Error que le .cleat se fait automatiquement
           Err.Clear
        End Select
     
    End Sub
    Dans ce cas précis, il semblerait bien qu'elle ne soit pas indispensable.

    Cordialement

    GG

  6. #6
    Invité
    Invité(e)
    Par défaut
    Bonjour,

    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
    Sub TestErreurs()
     On Error GoTo GestionErreurs
     
    For i = 8 To 13
    Err.Raise i, , CStr(i)
    Next
    Exit Sub
    GestionErreurs:
     
        Select Case Err.Number
            Case 13
                MsgBox "Err de type"
            Case 9
            MsgBox "Ce classeur n'est pas ouvert !"
            Case Else
            MsgBox Err.Number & "  " & Err.Description
     
        End Select
      Err.Clear
      Resume Next
    End Sub

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

Discussions similaires

  1. Gestion des sorties standards et d'erreurs en Perl/Tk
    Par djibril dans le forum Interfaces Graphiques
    Réponses: 14
    Dernier message: 25/11/2009, 17h34
  2. [VB6] Gestion des erreurs dans une dll
    Par zimba-tm dans le forum VB 6 et antérieur
    Réponses: 8
    Dernier message: 02/08/2004, 11h20
  3. [XSLT]Est ce qu'il y'a la gestion des erreur en xslt ?
    Par miloud dans le forum XSL/XSLT/XPATH
    Réponses: 2
    Dernier message: 04/02/2004, 17h19
  4. [LG]gestion des erreurs
    Par frontin dans le forum Langage
    Réponses: 3
    Dernier message: 29/11/2003, 22h41

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