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 d'erreurs userform excel vba


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
    Ingénieur qualité méthodes
    Inscrit en
    Février 2015
    Messages
    46
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur qualité méthodes
    Secteur : Industrie

    Informations forums :
    Inscription : Février 2015
    Messages : 46
    Par défaut Gestion d'erreurs userform excel vba
    Bonjour,

    Je rencontre un petit souci avec mes userforms concernant la gestion des erreurs. J'ai commencé par gérer les erreurs possibles en utilisant une fonction de validation des données (qui va vérifier au préalable que des numéros sont bien rentrés dans une case où doivent figurer des numéros par exemple).

    Cependant, ce n'était pas suffisant et j'ai mis des On Error GoTo mais toujours en gérant au cas par cas. Par exemple, j'avais une combobox (de 1 à 6) qui fixait la taille d'un tableau qui apparaît sur l'userform et si l'utilisateur rentrait une lettre ça plantait (comme je faisais une boucle avec ma ComboBox.value)

    Du coup j'ai mis un

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    On Error GoTo WrongValue
     
    'code
     
    WrongValue:
     
    If Err.number = 13 Then
            MsgBox "Attention chaque liste à choix doit avoir une valeur numérique"
            ComboBox2.Value = 1
            Resume Next
    End If
    Mais bon, c'est toujours très ciblé. Par exemple, dans une autre fonction, je créé des répertoires en fonction d'un chemin défini par plusieurs textbox dans mon formulaire. J'avais pas prévu qu'un espace après le contenu de la textbox allait faire planter l'application.

    Du coup, je corrige au fur et à mesure mais j'aimerais avoir une sorte de gestion d'erreur plus globale (qui ne soit pas définie dans chaque fonction ou sub) qui dise : si erreur, j'enregistre le numéro d'erreur et la ligne dans un fichier texte puis je quitte tout)

    Le problème étant surtout que quand l'utilisateur utilise par exemple le débogage ou fin dans la fenêtre d'erreur, les fichiers excel ne se ferment pas correctement et cela force l'utilisateur à tuer les process excel dans le gestionnaire de tâche pour relancer le formulaire.

    Pour l'instant j'ai contourné le problème avec un batch qui au préalable tue tous les process excel mais c'est pas super propre. J'espère avoir été clair. Merci

  2. #2
    Expert confirmé
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mai 2013
    Messages
    3 609
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

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

    Informations forums :
    Inscription : Mai 2013
    Messages : 3 609
    Par défaut
    Bonjour,

    Il y a beaucoup de questions là-dedans...
    Pour les combobox, si c'est toi qui les charge, il ne devrait pas y avoir de texte.
    Si l'utilisateur peut écrire dans le combobox, change la propriété Style pour DropDownList plutôt que DropDownCombo.

  3. #3
    Membre averti
    Homme Profil pro
    Ingénieur qualité méthodes
    Inscrit en
    Février 2015
    Messages
    46
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur qualité méthodes
    Secteur : Industrie

    Informations forums :
    Inscription : Février 2015
    Messages : 46
    Par défaut
    Oui, j'ai voulu être le plus exhaustif possible

    Merci pour la réponse, je n'ai pas pensé à vérifier les propriétés des combobox. Je vais du coup les modifier pour éviter ce genre d'erreurs.

    Pour le reste, une chose que je n'ai pas précisé et qui a son importance, c'est que je lance le formulaire par un fichier batch (lié à un vbs). Du coup, le fichier excel n'est pas visible, ce qui explique que lorsque le formulaire plante et que l'utilisateur se sert de la commande débogage ou fin (puis finit par fermer l'interface). Mon formulaire se retrouve fermé mais pas le fichier excel. (j'espère être clair)

    Au final, j'ai rajouté dans chaque sub/function, un on error goto fermeture

    Avec fermeture qui va fermer sans sauvegarder tous les classeurs ouverts. Cependant, j'aimerais garder une trace de l'erreur (dans un text file par exemple) avec le numéro de l'erreur et si possible la ligne où se situe l'erreur.

    La difficulté se situe sur le second point à savoir obtenir la ligne où ça plante. J'ai lu qu'il fallait utiliser une propriété ERL qui nécessite au préalable d'avoir numéroté son code? Je suis dans le bon?

    Merci

  4. #4
    Expert confirmé
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mai 2013
    Messages
    3 609
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

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

    Informations forums :
    Inscription : Mai 2013
    Messages : 3 609
    Par défaut
    Effectivement, la seule façon que je connaisse pour retracer la ligne est ERL.
    Pour te faciliter la vie à numéroter les lignes, il existe un outil qui le fait pour toi MZ-Tools.
    C'est un add-in qui te donne toutes sortes d'autres possibilités. Un must en ce qui me concerne...

  5. #5
    Invité
    Invité(e)

  6. #6
    Membre émérite
    Avatar de eric4459
    Homme Profil pro
    Ingénieur Gestion de Projets
    Inscrit en
    Avril 2014
    Messages
    605
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Alpes de Haute Provence (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Ingénieur Gestion de Projets
    Secteur : Industrie

    Informations forums :
    Inscription : Avril 2014
    Messages : 605
    Par défaut
    Bonjour OursTortue
    J'ai créé ce bout de code il y a quelque temps afin de pouvoir gérer les erreurs d'une macro utilisée par plusieurs personnes et qui me permettait de recevoir un mail avec les codes d'erreurs.
    Seule contrainte, il m'a fallu numéroter toutes les lignes de mon code
    J’espère que cela te sera utile et que tu pourras t'en inspirer
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    On Error Goto out
     
    out:
    59   ErrLOg = ErrLOg & "Erreur N° : " & Err.Number & "%0A" & "Description : " & Err.Description & "%0A" & "Ligne N° : " & Erl() & "%0A" & "Date : " & Date & "%0A" & "Heure : " & Time
    60
    61   ActiveWorkbook.FollowHyperlink "mailto:abc@def.com&subject=Rapport d'Erreurs&body=" & Replace(ErrLOg, " ", "%20")
    62   Err.Clear 'RAZ des erreurs
    63   ErrLOg = ""
    Eric
    "Vous n’avez cessé d’essayer ? Vous n’avez cessé d’échouer ? Aucune importance !
    Réessayez, échouez encore, échouez mieux." Samuel Beckett
    Pensez aux balises et
    Visitez les FAQ Excel et allez faire un tour ici
    Tutoriels de SilkyRoad

  7. #7
    Membre averti
    Homme Profil pro
    Ingénieur qualité méthodes
    Inscrit en
    Février 2015
    Messages
    46
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur qualité méthodes
    Secteur : Industrie

    Informations forums :
    Inscription : Février 2015
    Messages : 46
    Par défaut
    Merci messieurs

    Ça me fait de la lecture donc je vais bien lire tout ça à tête reposée et je vais essayer de faire quelque chose de propre, je reviendrais donc plus tard pour avoir vos avis.

    Les tags , le logiciel MZ-tools , le mail automatique

    Bon il me reste encore pas mal à bricoler mais merci beaucoup c'est vraiment ce que je cherchais.

    Une dernière petite question sur les tags, au lieu d'utiliser une MsgBox, est-ce que je peux utiliser des labels sur lesquels je viendrais écrire? (c'est ce que je faisais "manuellement" sans les tags et je trouve ça moins agressif qu'une spambox)
    Le code en question :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    TG = Split(This.Controls(I).Tag, ";")
    If TG(1) = "O" And Trim("" & This.Controls(I)) = "" Then
                MsgBox TG(0) & vbCrLf & "Est un champ Obligatoire !", vbExclamation, "Erreur de saisie"
    pourrait devenir quelque chose du style :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    TG = Split(This.Controls(I).Tag, ";")
    If TG(1) = "O" And Trim("" & This.Controls(I)) = "" Then
                controls("Label_error_" & TG(0) ).Caption = "Champ obligatoire, erreur de saisie"
    Je laisse encore ouvert le sujet vu que j'ai pas testé la gestion d'erreurs avec les lignes numérotées. Je reviendrais en cas de souci. Merci

  8. #8
    Invité
    Invité(e)
    Par défaut
    Bonjour,
    oui tu peux faire comme tu le veux, i n' a pas de problème.
    n'oublis pas de le replacer à "" avant traitement des erreurs

    comme je disais dans le poste originale tout est une question de convention!

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    TG = Split(This.Controls(I).Tag, ";")
     controls("Label_error_" & TG(0) ).Caption = ""
    If TG(1) = "O" And Trim("" & This.Controls(I)) = "" Then
               controls("Label_error_" & TG(0) ).Caption = "Champ obligatoire, erreur de saisie"
    Dernière modification par Invité ; 03/03/2015 à 11h50.

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

Discussions similaires

  1. [XL-2010] Erreur 1004 EXCEL VBA
    Par Invité dans le forum Macros et VBA Excel
    Réponses: 3
    Dernier message: 03/02/2014, 21h48
  2. SUMIFS--formule - erreur 13-excel VBA
    Par expertdev dans le forum Macros et VBA Excel
    Réponses: 19
    Dernier message: 11/07/2013, 17h52
  3. Gestion de nom, variable EXCEL/VBA
    Par GCASPIC10 dans le forum Macros et VBA Excel
    Réponses: 1
    Dernier message: 14/06/2010, 15h57
  4. Problème - Erreur 438 - Excel vba 2003
    Par Nanoucha dans le forum Macros et VBA Excel
    Réponses: 3
    Dernier message: 08/03/2010, 20h27
  5. [VBA]Userform Excel VBA
    Par ducater6 dans le forum Macros et VBA Excel
    Réponses: 1
    Dernier message: 22/03/2007, 23h42

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