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 Access Discussion :

Voir la source dans Err.Raise ?


Sujet :

VBA Access

  1. #1
    Modérateur

    Homme Profil pro
    Inscrit en
    Octobre 2005
    Messages
    15 331
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations forums :
    Inscription : Octobre 2005
    Messages : 15 331
    Points : 23 786
    Points
    23 786
    Par défaut Voir la source dans Err.Raise ?
    Bonjour à tous et merci de votre temps et de votre aide.

    J'ai un truc qui m'agace lorsque j'utilise Err.Raise

    ex :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    Private Sub TestErreur()
        Const NOM_PROC As String = "TestErreur()"
     
        Call Err.Raise(5, NOM_PROC, "test erreur")
    End Sub
    Le contenu de NOM_PROC n'est pas affiché dans la fenêtre qui s'ouvre.
    Access met juste :
    Microsoft Visual Basic
    Erreur d'exécution 5 :
    Test erreur

    Nul part je ne vois TestErreur.
    J'ai essayé avec une chaîne à la place de la constante et j'ai obtenu le même résultat.
    J'ai copié l'exemple de l'aide, ici aussi, même résultat, la source n'est pas affichée.

    Est-ce que j'ai raté quelque chose ?

    L'idée est de fournir, facilement (c-à-d sans faire de développement supplémentaire), un message explicatif à mon utilisateur en précisant dans quel module et procédure l'erreur c'est produite.

    On peut faire un truc du 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
    Public Sub AfficherErreurStandard(prmErr As ErrObject, Optional prmMess As String = "")
        DoCmd.Hourglass False
        Dim mess As String
     
        If prmMess <> "" Then
            mess = prmMess
            mess = mess & vbNewLine & vbNewLine
        End If
     
        mess = mess & "Erreur : " & prmErr.Number & ", " & prmErr.description
     
        If Err.source <> "" Then
            mess = mess & vbNewLine & "Dans " & Err.source & "."
        End If
     
        mess = mess & vbNewLine & vbNewLine & "ATTENTION : Si un traitement était en cours il a sans doute été interrompu et les données affichées pourraient ne pas être correctes."
        Call MsgBox(mess, vbExclamation)
    End Sub
    Vous voulez une réponse rapide et efficace à vos questions téchniques ?
    Ne les posez pas en message privé mais dans le forum, vous bénéficiez ainsi de la compétence et de la disponibilité de tous les contributeurs.
    Et aussi regardez dans la FAQ Access et les Tutoriaux Access. C'est plein de bonnes choses.

  2. #2
    Expert confirmé

    Homme Profil pro
    consultant développeur
    Inscrit en
    Mai 2005
    Messages
    2 878
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : consultant développeur
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2005
    Messages : 2 878
    Points : 4 754
    Points
    4 754
    Par défaut
    Bonjour, René

    pour ma part j'appelle la procédure
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
    Public Sub ErrHandler(routineName As String)
    ' Purpose: Generic error handler.
     
        Dim sTitle As String, sError As String
     
        Dim currentObject As String
        currentObject = Application.CurrentObjectName
     
        sTitle = "Erreur n° " & err.Number & " dans [" & currentObject & "] : " & routineName
        Beep
        MsgBox err.Description, vbExclamation, sTitle
     
    End Sub
    que j'appelle ainsi
    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
    'Exemple :
    Private Sub cmdSaveAs_Click()
     
    Const ROUTINE_NAME = "cmdSaveAs_Click()"
     
      On Error GoTo Err_0
     
        Const frmName = "FSaveSpec22"
        DoCmd.OpenForm frmName, WindowMode:=acDialog
     
    Exit_0:
        Exit Sub
     
    Err_0:
        Call ErrHandler(ROUTINE_NAME)
        Resume Exit_0
    End Sub
    Cdlt
    "Always look at the bright side of life." Monty Python.

  3. #3
    Expert confirmé Avatar de nico84
    Homme Profil pro
    Consultant/développeur ERP
    Inscrit en
    Mai 2008
    Messages
    3 088
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Consultant/développeur ERP
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2008
    Messages : 3 088
    Points : 5 204
    Points
    5 204
    Par défaut
    Bonjour à tous,

    Pour ma part j'ai choisi d'écrire les erreurs dans un journal car le plus souvent l'utilisateur zappe le message et je me paie le luxe de numéroter toutes les lignes pour connaître précisément celle qui buggue :
    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
    'message dans le journal des erreurs
    Public Sub message(T, Optional visu = True)
    If Not Mode_debug Then On Error GoTo err:
    Dim cd As Long
    100 DoCmd.Hourglass False
    101 If Not IsNull(T) Then
    102   If visu And Not Mode_batch Then MsgBox T, vbExclamation, ""
    105   cd = Nz(DMax("cd_log", "messages"), 0)
    108   Sr = "INSERT INTO messages (cd_log,qui,quand,version,quoi) VALUES (" & cd & ",'" & Nz(User_init, "X") & "','" & Now & "','" & Vf & "','" & Apo2(Nz(T, ""), 240) & "');"
    110   CurrentDb.Execute Sr, dbFailOnError
        End If
        Exit Sub
    err:
    120 If visu And Not Mode_batch Then MsgBox "Enregistrement du message d'erreur impossible(" & Erl & ") : " & vbCr & "'" & Nz(User_init, "X") _
        & "','" & Now & "','" & Vf & "','" & Apo2(Nz(T, "")) & "'", , "Erreur"
    122 If Mode_batch Then application.Quit '16.0d fin prématurée (la fin normale est dans menu.quitte)
    End Sub
    Qui s'utilise comme ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    Public Function Get_libelle_classe(ByVal n) As String
    If Not Mode_debug Then On Error GoTo err:
    Dim rado As New ADODB.Recordset
    102 rado.Open "SELECT libelle_classe FROM classes WHERE classe=" & Nz(n, 0), cnx, adOpenStatic
    104 If rado.EOF Then Get_libelle_classe = "" Else Get_libelle_classe = Nz(rado!libelle_classe, "")
        rado.Close: Set rado = Nothing
        Exit Function
    err: Call message("Erreur " & err.Number & "/" & Erl & " dans api_BE.Get_libelle_classe(" & Nz(n) & ") : " & err.description)
    End Function
    Utilisez Planet, gestion d'entreprise gratuite pour TPE / PME

  4. #4
    Invité
    Invité(e)
    Par défaut
    Bonjour,
    j'ai chercher je ne sais quel option pour l'affichage de la fenêtre de degugage avec cette information sans succès!

    c'est pourtant bien pratique! je ne pense pas que ça vient du Err.Raise mais d'une option quelconque!

    Code pas trouvé mieux : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    Sub test()
    NOM_PROC = "toto"
    Call Err.Raise(5,NOM_PROC , "test erreur" & Chr(10) & Chr(10) & "NOM_PROC : " & NOM_PROC)
    End Sub

    Il faut peut-être chercher du côté de la substitution du err par un userform?
    Code ??????? : Sélectionner tout - Visualiser dans une fenêtre à part
    set err=userform
    Dernière modification par Invité ; 28/09/2016 à 17h09.

  5. #5
    Expert confirmé

    Homme Profil pro
    consultant développeur
    Inscrit en
    Mai 2005
    Messages
    2 878
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : consultant développeur
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2005
    Messages : 2 878
    Points : 4 754
    Points
    4 754
    Par défaut
    Peut-être que ceci répondra un peu mieux à ta question :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    Private Sub TestErreur()
        Const NOM_PROC As String = "TestErreur()"
        Dim s As String
        s = Application.CurrentObjectName & ": " & NOM_PROC & vbCrLf & vbCrLf & "Test d'erreur"
        Call Err.Raise(9995, , s)
    End Sub
    cdlt
    "Always look at the bright side of life." Monty Python.

  6. #6
    Rédacteur/Modérateur

    Avatar de Jean-Philippe André
    Homme Profil pro
    Développeur VBA/C#/VB.Net/Power Platform
    Inscrit en
    Juillet 2007
    Messages
    14 595
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : Canada

    Informations professionnelles :
    Activité : Développeur VBA/C#/VB.Net/Power Platform
    Secteur : Finance

    Informations forums :
    Inscription : Juillet 2007
    Messages : 14 595
    Points : 34 271
    Points
    34 271
    Par défaut
    Salut,
    L'idee sinon serait potentiellement de faire une association numero erreur (0 a 999)+ numero proc (1000 a XXX, multiples de 10000 par exmeple)
    Cycle de vie d'un bon programme :
    1/ ça fonctionne 2/ ça s'optimise 3/ ça se refactorise

    Pas de question technique par MP, je ne réponds pas

    Mes ouvrages :
    Apprendre à programmer avec Access 2016, Access 2019 et 2021

    Apprendre à programmer avec VBA Excel
    Prise en main de Dynamics 365 Business Central

    Pensez à consulter la FAQ Excel et la FAQ Access

    Derniers tutos
    Excel et les paramètres régionaux
    Les fichiers Excel binaires : xlsb,

    Autres tutos

Discussions similaires

  1. [XL-2010] Tableau - Voir les changements dans la source de données ?
    Par marot_r dans le forum Excel
    Réponses: 1
    Dernier message: 06/08/2015, 20h01
  2. Réponses: 1
    Dernier message: 09/05/2014, 19h25
  3. Site ASP.NET : voir ses pages dans le dossier source
    Par Johann7751 dans le forum ASP.NET
    Réponses: 1
    Dernier message: 13/07/2010, 17h32

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