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 :

Erreur Variable d'objet non définie


Sujet :

VBA Access

  1. #1
    Membre à l'essai
    Homme Profil pro
    Inscrit en
    Octobre 2012
    Messages
    20
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Octobre 2012
    Messages : 20
    Points : 16
    Points
    16
    Par défaut Erreur Variable d'objet non définie
    voila j'ai créer une classe de gestion d'erreur qui viens m'écrire le tout dans un fichier
    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
    Option Compare Database
     
    Private oFichierlog
     
    '-------------------------------------
    '
    'Classe erreur voir http://warin.developpez.com/access/erreur/tutoriel1/
    '
    '------------------------------------
    Public Sub Instancier(strnomfichier As String)
    On Error GoTo GestionErreur
      'Instancie un objet FileSystemObject
      Dim oFso As New FileSystemObject
      'Ouvre le fichier texte en mode ajout
      Set oFichierlog = oFso.OpenTextFile(strnomfichier, ForAppending, True)
      oFichierlog.WriteLine " Nouvelle Instanciation le " & Now & " "
      GoTo Fin
    GestionErreur:
      MsgBox "Impossible d'instancier le gestionnaire d'erreurs", vbCritical
    Fin:
    End Sub
     
     
    Public Sub EnregistrerErreur(intErrNumber As Integer, _
     ByVal strUser As String, strErrMessage As String, Optional strNomProc = "")
    On Error GoTo GestionErreur
      If Not oFichierlog Is Nothing Then
        oFichierlog.WriteLine "[" & Now & "] Procédure : " & _
         strNomProc & " Utilisé Par " & strUser & " -> Erreur N°" & intErrNumber & " :" & strErrMessage
         MsgBox " nouvelle erreur généré dans le fichier log des erreurs"
      Else
        MsgBox "Le gestionnaire d'erreur n'est pas instancié", vbCritical
      End If
      GoTo Fin
    GestionErreur:
      MsgBox "Impossible d'écrire dans le fichier du gestionnaire d'erreur.", vbCritical
    Fin:
    End Sub
     
     
    Public Sub Fermer()
    Class_Terminate
    End Sub
     
     
    Private Sub Class_Terminate()
    On Error GoTo GestionErreur
      oFichierlog.Close
      Set oFichierlog = Nothing
    GestionErreur:
    End Sub
    ceci est initialisé avec une macro exec qui me lance ceci
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    Public oGestErreur As GestionnaireErreur
    Global varUser As String
     
    Public Function Macro_Autoexec()
    Dim strLogFileName As String
    x = Log_Demarrage("Initialisation du log des erreurs", 1)
        'Récupère le nom du fichier de base de données et lui ajoute l'extension .log
        strLogFileName = Left(CurrentDb.Name, Len(CurrentDb.Name) - 4) & ".log"
        Set oGestErreur = New GestionnaireErreur
        oGestErreur.Instancier strLogFileName
        varUser = CurrentUser()
    End Function
    Lors d'une erreur je fais donc ceci
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    oGestErreur.EnregistrerErreur err.Number, varUser, err.Description, "description de l'endroit"
    cela fonctionne très bien mais parfois dans le vba des formulaires quand je l'appel ainsi il me met une erreur d’exécution " n 91 variable objet ou variable bloc with non définie "

    des idées ?

  2. #2
    Expert confirmé
    Homme Profil pro
    retraité
    Inscrit en
    Juin 2012
    Messages
    3 183
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : retraité
    Secteur : Associations - ONG

    Informations forums :
    Inscription : Juin 2012
    Messages : 3 183
    Points : 5 515
    Points
    5 515
    Par défaut
    Une idée comme ça:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    oGestErreur.EnregistrerErreur err.Number, nz(varUser,"?"), nz(err.Description,"?"), "description de l'endroit"
    Bonne continuation.

  3. #3
    Membre à l'essai
    Homme Profil pro
    Inscrit en
    Octobre 2012
    Messages
    20
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Octobre 2012
    Messages : 20
    Points : 16
    Points
    16
    Par défaut
    Non désolé aucun changement avec cette modification

  4. #4
    Rédacteur/Modérateur
    Avatar de argyronet
    Homme Profil pro
    Panseur de bobos en solutions ETL
    Inscrit en
    Mai 2004
    Messages
    5 123
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Panseur de bobos en solutions ETL
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2004
    Messages : 5 123
    Points : 12 169
    Points
    12 169
    Billets dans le blog
    5
    Par défaut
    Bonjour,

    Si tu as une erreur 91, c'est que ta classe n'est plus instanciée à moment donné dans ton projet.

    Ce que tu peux faire, c'est mettre un espion sur l'ensemble du projet avec l'expression :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    GestionnaireErreur Is Nothing
    avec Arrêt si la valeur change...

    Tu sauras de suite où ça flanche.

    @EricDgn : Un string n'est jamais NULL

    Argy
    Ce qui donne son sens à la communication, c´est la réponse que l´on obtient. Si vous n´obtenez pas la réponse voulue, communiquez différemment.

    Ils comptent sur vous...
    Web Site@Mail
    Tutoriels : Déployez vos applications Access 2010 à 2019 */* Réalisez un Assistant de présaisie...
    MDB Viewer : Visionneuse Access v4.0
    *** Je recherche des profils (2 ans min.) Java EE, Fullstack, Front, .Net, Mobile... pour CDI ***

  5. #5
    Membre à l'essai
    Homme Profil pro
    Inscrit en
    Octobre 2012
    Messages
    20
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Octobre 2012
    Messages : 20
    Points : 16
    Points
    16
    Par défaut
    Je suis toujours perdu la fonction ne prend toujours pas je comprend pas pour quoi j'ai bien fait exactement la même chose que dans le tuto dispo sur le site quoi ...

  6. #6
    Rédacteur/Modérateur
    Avatar de argyronet
    Homme Profil pro
    Panseur de bobos en solutions ETL
    Inscrit en
    Mai 2004
    Messages
    5 123
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Panseur de bobos en solutions ETL
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2004
    Messages : 5 123
    Points : 12 169
    Points
    12 169
    Billets dans le blog
    5
    Par défaut
    As-tu suivi mes recommandations ?

    Argy
    Ce qui donne son sens à la communication, c´est la réponse que l´on obtient. Si vous n´obtenez pas la réponse voulue, communiquez différemment.

    Ils comptent sur vous...
    Web Site@Mail
    Tutoriels : Déployez vos applications Access 2010 à 2019 */* Réalisez un Assistant de présaisie...
    MDB Viewer : Visionneuse Access v4.0
    *** Je recherche des profils (2 ans min.) Java EE, Fullstack, Front, .Net, Mobile... pour CDI ***

  7. #7
    Membre à l'essai
    Homme Profil pro
    Inscrit en
    Octobre 2012
    Messages
    20
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Octobre 2012
    Messages : 20
    Points : 16
    Points
    16
    Par défaut
    oui oui j'ai mis les espions et je sais ce qui se passe en revanche je ne sais pas pour quoi sa se passe comme ça.

    J'explique si je met mes espion sur mon oGestErreur il est instancié au moment de de l'entré dans la méthode EnregistrerErreur ainsi que mon oFichierlog ( path du document ou écrire) si non ils n’existent pas ( ors du contexte). Mais par fois j'ai une erreur sur ce fichier ofichierlog le plus souvent qui n’existe pas ou d'autre erreur, encore une fois variable de bloque non déclarée ou encore objet requis. Les erreurs varies sans que je comprenne pour quoi et le pire c'est que parfois je n'ai pas de problème sans rien changer donc j'avoue que sa me perd et me désespère un peut.

    par exemple la maintenant j'ai erreur 424 objet requis et si je regarde dans le détail c'est quand je passe dans la fonction qui écrit dans le fichier texte ou sa ne passe pas car mon oFichierlog Is nothing

  8. #8
    Expert confirmé
    Homme Profil pro
    retraité
    Inscrit en
    Juin 2012
    Messages
    3 183
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : retraité
    Secteur : Associations - ONG

    Informations forums :
    Inscription : Juin 2012
    Messages : 3 183
    Points : 5 515
    Points
    5 515
    Par défaut
    Un peu tardif, mais vu l'absence d'autre réponse, je suggérerais de retirer tous les On Error GoTo car ceux-ci empêchent de voir la ligne exacte sur laquelle se produit l'erreur.
    Personnellement, j'utilise On Error GoTo pour les seuls cas où je sais quelle erreur va se produire pour une instruction précise, avec remise à On Error GoTo 0 juste après cette instruction.
    Cdt.

  9. #9
    Rédacteur/Modérateur
    Avatar de argyronet
    Homme Profil pro
    Panseur de bobos en solutions ETL
    Inscrit en
    Mai 2004
    Messages
    5 123
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Panseur de bobos en solutions ETL
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2004
    Messages : 5 123
    Points : 12 169
    Points
    12 169
    Billets dans le blog
    5
    Par défaut
    Humm, non, je ne suis pas d'accord...
    Un On Error Goto n'empêche pas d'intercepter l'erreur si celui-ci est bien monté...

    Tu peux faire un truc du style :
    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
     
    Option Explicit
     
    Private Const MODE_DEBUG                               As Boolean = True 'False en Prod
     
    Public Sub Main()
     
        On Error GoTo L_ErrMain
        '[...]
        '[...]
        '[...]
        '[...]
        '[...]
        On Error GoTo 0
    L_ExMain:
        Exit Sub
     
    L_ErrMain:
        If MODE_DEBUG Then
            Debug.Print "Main : " & Err.Description
            Stop: Resume
        Else
            MsgBox Err.Description, vbExclamation, Err.Source
            Resume L_ExMain
        End If
    End Sub
    Cela te permet de prendre la main sur la procédure qui a levée l'erreur.

    Par ailleurs, tu peux même employer l'instruction Erl pour pointer la ligne de code en erreur, si peu que tes procédures et fonctions soient nanties d'une numérotation idoine.

    Mais contruire une architecture bien gérée au niveau des erreurs nécessite du recul et une bonne approche du comportement possible de ton code.

    Argy
    Ce qui donne son sens à la communication, c´est la réponse que l´on obtient. Si vous n´obtenez pas la réponse voulue, communiquez différemment.

    Ils comptent sur vous...
    Web Site@Mail
    Tutoriels : Déployez vos applications Access 2010 à 2019 */* Réalisez un Assistant de présaisie...
    MDB Viewer : Visionneuse Access v4.0
    *** Je recherche des profils (2 ans min.) Java EE, Fullstack, Front, .Net, Mobile... pour CDI ***

  10. #10
    Expert confirmé
    Homme Profil pro
    retraité
    Inscrit en
    Juin 2012
    Messages
    3 183
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : retraité
    Secteur : Associations - ONG

    Informations forums :
    Inscription : Juin 2012
    Messages : 3 183
    Points : 5 515
    Points
    5 515
    Par défaut
    Pas d'objection. Comme indiqué, le On Eroor GoTo doit être bien monté.
    Personnellement, je trouve que c'est se compliquer la vie pour pas grand chose, et effectivement ce n'est ni "propre", ni "professionnel", mais simple et efficace.
    Cordialement.

Discussions similaires

  1. Renvoi d'erreur Variable Objet non définie
    Par ADbtr dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 05/06/2010, 14h16
  2. Erreur 91 variable objet non définie
    Par kmarcel dans le forum VB 6 et antérieur
    Réponses: 6
    Dernier message: 23/04/2008, 13h17
  3. Erreur 91 variable objet non défini
    Par sebeni dans le forum Général VBA
    Réponses: 3
    Dernier message: 07/05/2007, 11h12
  4. Réponses: 4
    Dernier message: 16/06/2006, 00h27

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