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 :

Bugs sur objet Err [XL-2007]


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
    Conseiller/formateur en risques prof.
    Inscrit en
    Mars 2012
    Messages
    41
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Conseiller/formateur en risques prof.
    Secteur : Conseil

    Informations forums :
    Inscription : Mars 2012
    Messages : 41
    Par défaut Bugs sur objet Err
    Bonjour, j'ai décidé un peu tard de mettre en place la gestion des erreurs, par contre cela plante sur l'objet Err...
    voici une des macro qui plante :
    Elle est utilisé pour mettre à jour une listebox au changement de txtRefMUT (alimenté lui même par un combo)

    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
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
     
    Private Sub txtRefMUT_Change()
    Dim a          As Variant
    Dim Sh         As Worksheet
    Dim i As Integer, j As Integer
    Dim MonTest    As Integer
    Dim Msg
        'Dim b As Variant
     On Error GoTo GestERR
     
     
        '' **** ' On Error Resume Next            '***********
      '  On Error GoTo txtRefMUT_Change_Error
        Set Sh = Sheets("Fiche N°5")
        lbInfo.ForeColor = &HC00000
        a = Sh.Range("A3:L" & Sh.[A65000].End(xlUp).Row)
        Dim B()
        Dim C()
        j = 0
        Me.lstExposition.Clear
        Me.lstExposition.ColumnCount = 13
        lstExposition.ColumnHeads = False
        MonTest = 0
        Me.lstExposition.ColumnWidths = "60;35;20;20;20;30;60;55;35;67;50;100;10"
        For i = LBound(a) To UBound(a)     'traite chaque ligne du tableau (a)
     
        '' **** '         On Error GoTo 0                               '***********
            If a(i, 2) = txtRefUT Then
                MonTest = 1 + MonTest
                j = j + 1
                ReDim Preserve B(1 To 13, 1 To j)
                B(1, j) = a(i, 1)
                B(2, j) = a(i, 2)
                B(3, j) = a(i, 3)
                B(4, j) = a(i, 4)
                B(5, j) = a(i, 5)
                B(6, j) = a(i, 6)
                B(7, j) = a(i, 7)
                B(8, j) = a(i, 8)
                B(9, j) = a(i, 9)
                B(10, j) = a(i, 10)
                B(11, j) = a(i, 11)
                B(12, j) = a(i, 12)
                B(13, j) = i + 2
            End If
        Next i
        If MonTest = 0 Then
            lbInfo.Caption = "Aucune donnée pour ce choix"
            lbInfo.ForeColor = &H800000
            lstExposition.Clear
     
        ElseIf MonTest = 1 Then
        'lstExposition.Clear
            Me.lstExposition.AddItem
            Me.lstExposition.List(0, 0) = B(1, j)    'N°RiskHM
            Me.lstExposition.List(0, 1) = B(2, j)    'MUT
            Me.lstExposition.List(0, 2) = B(3, j)     
            Me.lstExposition.List(0, 3) = B(4, j)     
            Me.lstExposition.List(0, 4) = B(5, j)     
            Me.lstExposition.List(0, 5) = B(6, j)    
            Me.lstExposition.List(0, 6) = B(7, j)     '<<<< je pense bug ici si manque de données
            Me.lstExposition.List(0, 7) = B(8, j)     
            Me.lstExposition.List(0, 8) = B(9, j)     
            Me.lstExposition.List(0, 9) = B(10, j)     
            Me.lstExposition.List(0, 11) = B(12, j)     
            Me.lstExposition.List(0, 12) = B(13, j)    
            lbInfo.Caption = "1 ITEM pour cette Option"
            lbInfo.ForeColor = &HFF00FF
        Else
            C = Application.Transpose(B)
            Me.lstExposition.List = C
            lbInfo.Caption = "ATTENTION  =>>  " & MonTest & "  <<   ITEM à évaluer pour cette Option MUT"
            lbInfo.ForeColor = &HFF00FF
        End If
     
    Exit Sub
     
    GestERR:
    Err.Clear          '<<< = BUG
    Resume Next
    '    On Error GoTo 0
    '    Exit Sub
     
    'txtRefMUT_Change_Error:
    '    Exit Sub
    '    MsgBox "Error " & Err.Number & " (" & Err.Description & ") in procedure txtRefMUT_Change of Feuille F_Item"
    'Msg = "L'erreur # " & Str(Err.Number) & " a été générée par " & Err.Source & Chr(13) & Err.Description
       ' MsgBox Msg, , "Erreur", Err.HelpFile, Err.HelpContext
     
    End Sub
    En fait la macro fonctionne bien sans la gestion d'erreur, sauf lors d'info manquante lors du remplissage de ma list.

    c'est la raison pour laquelle j'ai ajouter la gestion d'erreur.
    mais maintenant celle ci bloque sur l'objet Err, je ne comprend pas, j'ai le message Erreur compil. Qualificateur incorrect.
    Idem sur Err.Number...
    Sur les autres macro ou j'ai voulu rajouter une gestion ce ce type c'est le meme problème. avec un autre code comme celui-ci
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    On Error GoTo GestERR
    ' 
    'Mon code
    ' 
    Exit Sub
     
    GestERR:
    Err.Clear      '<<<= même bug ici
    Resume Next
    J'en profite pour remercier le forum pour toutes les info que j'ai trouvé sur la gestion d'erreur. Magrés tout je ne trouve rien sur ce problème.
    Qu'en pensez vous ?

  2. #2
    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
    Je ne vois aucune raison de réception de ton message d'erreur.
    Es-tu certain de ne pas avoir déclaré ailleurs une variable que tu aurais nommée Err ?

  3. #3
    Invité
    Invité(e)
    Par défaut
    Bonjour,
    Vue que tu ne gère en aucun cas les erreur, mais que tu laisser ton programme faire ce qu'il veut !

    Un On Error resume next devrait faire l'affaire!

  4. #4
    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 dysorthographie
    L'utilisation de On Error Resume Next est presque toujours préférable.
    Citation de l'aide VBA à ce propos :
    Note Il est préférable d'utiliser l'instruction On Error Resume Next et non l'instruction On Error GoTo pour traiter des erreurs générées à l'occasion de l'accès à d'autres objets. La vérification de la propriété Err après chaque interaction avec un objet évite en effet toute ambiguïté sur l'objet auquel le code accède. Vous saurez ainsi avec certitude quel objet a placé le code d'erreur dans la propriété Err.Number, et quel est celui qui a généré l'erreur à l'origine (indiqué dans la propriété Err.Source).
    Il est par ailleurs curieux de faire suivre la méthode Err.clear d'une Instruction Resume (cette dernière appelant elle-même automatiquement la méthode Clear)
    Citation :
    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
    Mais tout ceci n'explique pas le message d'erreur qu'il reçoit et qui est un comportement pour le moins anormal.
    Je persiste donc à penser que :
    - soit il a nommé maladroitement Err une variable ailleurs dans le code actif (y compris, donc si dans un addin ou une auto_Open)
    - soit son application Excel.Exe a subi une mésaventure et doit être réparée.

    EDIT : j'aurais comme tout premier réflex de mettre un simple bouton de commande avec ce seul code :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Private Sub CommandButton1_Click()
      Err.Clear
    End Sub
    Qui ne devrait provoquer aucun message d'erreur , dans des conditions normales (pas de variable existant par ailleurs avec Err pour nom et application Excel Exe non corrompue)

  5. #5
    Invité
    Invité(e)
    Par défaut
    Ce qui expliquerai c'est si le fichier a été créé sur un version et utilisé sur un autre.

    Librairie manquante!

  6. #6
    Rédacteur
    Avatar de Philippe Tulliez
    Homme Profil pro
    Formateur, développeur et consultant Excel, Access, Word et VBA
    Inscrit en
    Janvier 2010
    Messages
    13 176
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Formateur, développeur et consultant Excel, Access, Word et VBA

    Informations forums :
    Inscription : Janvier 2010
    Messages : 13 176
    Billets dans le blog
    53
    Par défaut Tutoriel - Gestion des erreurs
    Bonjour,
    Je te conseille la lecture de cet excellent tutoriel sur ce sujet La gestion des erreurs dans Excel
    Philippe Tulliez
    Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément. (Nicolas Boileau)
    Lorsque vous avez la réponse à votre question, n'oubliez pas de cliquer sur et si celle-ci est pertinente pensez à voter
    Mes tutoriels : Utilisation de l'assistant « Insertion de fonction », Les filtres avancés ou élaborés dans Excel
    Mon dernier billet : Utilisation de la fonction Dir en VBA pour vérifier l'existence d'un fichier

  7. #7
    Rédacteur
    Avatar de Philippe Tulliez
    Homme Profil pro
    Formateur, développeur et consultant Excel, Access, Word et VBA
    Inscrit en
    Janvier 2010
    Messages
    13 176
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Formateur, développeur et consultant Excel, Access, Word et VBA

    Informations forums :
    Inscription : Janvier 2010
    Messages : 13 176
    Billets dans le blog
    53
    Par défaut
    Bonjour Unparia,
    L'utilisation de On Error Resume Next est presque toujours préférable.
    Je partage ton avis et privilégie également cette instruction lorsque c'est possible. Cependant et curieusement le Resume ne réagit pas après un Resume Next

    Procédure 1 qui ne renvoie pas à la ligne où l'erreur a été détectée
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    Sub t1()
     Dim resultat As Double, i As Double
     On Error Resume Next
     resultat = 10 / i
     If Err Then
      i = 2: Resume
     End If
     On Error GoTo 0
     MsgBox resultat
    End Sub
    Procédure 2 utilisant un On Error GoTo
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    Sub t2()
     Dim resultat As Double, i As Double
     On Error GoTo errHandler
     resultat = 10 / i
     On Error GoTo 0
     MsgBox resultat
    Exit Sub
    errHandler:
     If Err Then i = 2: Resume
    End Sub
    Philippe Tulliez
    Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément. (Nicolas Boileau)
    Lorsque vous avez la réponse à votre question, n'oubliez pas de cliquer sur et si celle-ci est pertinente pensez à voter
    Mes tutoriels : Utilisation de l'assistant « Insertion de fonction », Les filtres avancés ou élaborés dans Excel
    Mon dernier billet : Utilisation de la fonction Dir en VBA pour vérifier l'existence d'un fichier

  8. #8
    Invité
    Invité(e)
    Par défaut
    Bonjour
    Personnellement je suis d'avis de bannir le.on error surtout quand on ne sait pas le gérer!

    L'affichage de la fenêtre de débugage et préférable a un résultat bizarre!

    Dans d'autres langage on appel ça une exception! Et son emploi doit donc être exceptionnel.

    Je veux imprimer un document mais l'imprimante est défaillante , j'ai testé ca présence, mais un messages indépendant de ma volonté s'affiche!

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    'code...
    On error resume next
    Imprimer
    If err then msgbox err.description
    On error goto 0
    'fin de code...
    Ici on métrise que l'erreur d'impression indépendante de ma volonté!

    Pour le restr du code je métrises et je fais des tests pour qualifier les données!

  9. #9
    Membre averti
    Homme Profil pro
    Conseiller/formateur en risques prof.
    Inscrit en
    Mars 2012
    Messages
    41
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Conseiller/formateur en risques prof.
    Secteur : Conseil

    Informations forums :
    Inscription : Mars 2012
    Messages : 41
    Par défaut
    Bonjour à vous 3,
    grand merci pour votre éclairage.
    1/ Je vais rechercher si je n'ai pas mis un Err quelque part dans mon programme qui commence à être un peu long.
    2/ je vais aussi fermer quelques outils (addin) ou une auto_Open
    3/ il est aussi possible Excel.Exe doit être réparée, il bug de temps à autre, mais comment faire ?
    4/ en fait mon objectif est de suivre la mise en route de l'application, ne ne pas afficher les erreur pour l'utilisateur, mais d'inscrire les erreurs dans un fichier texte, raison de l'usage de Err.

    Je cherche et reviens vers vous une fois le bug réglé.

    Merci encore à vous

  10. #10
    Membre Expert
    Inscrit en
    Septembre 2007
    Messages
    1 142
    Détails du profil
    Informations forums :
    Inscription : Septembre 2007
    Messages : 1 142
    Par défaut
    Bonjour,

    Je comprends ta démarche qui est intéressante car les utilisateurs te donnerons rarement le contexte.
    Si je peux me permettre dans ton enregistrement n'oublies pas le nom de la procédure coupable : c'est très utile.

    Bonne suite

  11. #11
    Membre averti
    Homme Profil pro
    Conseiller/formateur en risques prof.
    Inscrit en
    Mars 2012
    Messages
    41
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Conseiller/formateur en risques prof.
    Secteur : Conseil

    Informations forums :
    Inscription : Mars 2012
    Messages : 41
    Par défaut
    Bonjour,
    Merci pour le conseil, effectivement je pense mettre le nom de la procédure, la feuille concerné ou USF, le N° de l'erreur, la Description la date et l'heure.
    Cordialement

  12. #12
    Invité
    Invité(e)
    Par défaut
    c'est se compliquer la vie que de vouloir fournir le contexte (procédure,variable qu'importe)!

    le N° de l'erreur n'aporte pas une information. pertinente! la description de l'erreur oui!

    https://www.developpez.net/forums/d1...a/#post8942857

  13. #13
    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 (re-bonjour, en fait)
    S'intéresser à la méthode Raise (rubrique Raise, méthode de l'aide VBA). Elle permet beaucoup de choses qui peuvent simplifier la vie et la lecture d'un responsable informatique ou de l'auteur d'une application qui veut savoir ce qui a bien pu se produire.

  14. #14
    Expert confirmé

    Homme Profil pro
    Curieux
    Inscrit en
    Juillet 2012
    Messages
    5 169
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Curieux
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Juillet 2012
    Messages : 5 169
    Billets dans le blog
    5
    Par défaut
    oui oui

    spéciale dédicace à l'erreur 1664 de Robert

  15. #15
    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 joe.levrai
    t'as oublié le lien, que voilà donc :
    https://www.developpez.net/forums/d1...on-error-goto/
    (Tu as une sacrée mémoire).
    Ne manque que la possibilité d'indiquer la source de l'erreur, en plus. Mais en fait, tout cela ne peut résulter que d'une maîtrise PARFAITE (par son créateur) de l'application développée.

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

Discussions similaires

  1. bug sur un objet Gdi
    Par ____22 dans le forum MFC
    Réponses: 9
    Dernier message: 09/09/2009, 22h09
  2. [Debutant VC++.net] Obtenir un pointeur sur objet
    Par SteelBox dans le forum MFC
    Réponses: 6
    Dernier message: 17/06/2004, 18h36
  3. Bug sur glColor3i !
    Par ZiZouJH dans le forum OpenGL
    Réponses: 23
    Dernier message: 04/06/2004, 10h21
  4. Bug sur la prorpiété required d'un TField avec ADO ???
    Par denrette dans le forum Bases de données
    Réponses: 6
    Dernier message: 04/11/2003, 11h04
  5. Page de rapport de bug sur le site de Sun
    Par piff dans le forum Général Java
    Réponses: 1
    Dernier message: 03/03/2003, 18h12

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