Developpez.com

Plus de 14 000 cours et tutoriels en informatique professionnelle à consulter, à télécharger ou à visionner en vidéo.

FAQ MS-AccessConsultez toutes les FAQ

Nombre d'auteurs : 140, nombre de questions : 926, dernière mise à jour : 30 mars 2017 

 
OuvrirSommaireVBADébogage et problèmes divers


Un point d'arrêt dans le code permet de stopper son exécution, permettant ainsi de contrôler son bon déroulement.
Pour ajouter un point d'arrêt, placez le curseur sur la ligne concernée et appuyez sur la touche F9.
Quand l'exécution passe sur cette ligne, elle est interrompue. Vous pouvez alors décider de continuer en mode "Pas à pas" (F8) ou de reprendre une exécution normale (F5).


Lorsque vous fermez VBA, les points d'arrêt sont perdus. Pour utiliser des points d'arrêt enregistrés avec le code, utilisez l'instruction VBA Stop.


Exemple :

 
Sélectionnez

Msgbox "A"
Stop
Msgbox "B"
Mis à jour le 29 août 2006  par Team Access


La fenêtre de débogage (aussi appelée fenêtre d'exécution) permet de consulter le déroulement du code VBA.
Elle permet par exemple de lancer du code VBA vous donnant ainsi la possibilité de tester le comportement de votre code.


Par exemple, la syntaxe Debug.Printvariable affiche le contenu de variable.


Pour afficher cette fenêtre, rendez-vous dans VBA, menu Affichage, Fenêtre Exécution.

Mis à jour le 29 août 2006  par Team Access

Lien : Comment déboguer une requête générée par code ?


Le débogage d'une requête codée dans VBA passe bien souvent par l'utilisation de debug.print SQLdelarequête. Pour plus de détails, vous pouvez consulter le tutoriel de cafeine :
Initiation - Débogage : requêtes écrites par VBA.

Mis à jour le 29 août 2006  par Team Access

Lien : Qu'est-ce que la fenêtre de débogage ?

Allez dans un module (page où on écrit le code VBA).
Dans la barre de menus d'Access cliquez sur Outils puis Références.
S'il manque une bibliothèque ou une DLL elle sera marquée comme telle dans la liste déroulante.
Il suffit alors de la copier dans le répertoire "system32" de l'ordinateur et de taper : REGSVR32 C:\WINDOWS\SYSTEM32\maDLL.DLL ou REGSVR32 C:\WINDOWS\SYSTEM32\monOCX.OCX.
Le produit est alors enregistré dans la base de registre et reconnu par le système (sous NT il faut taper WINNT au lieu de WINDOWS).

Créé le 29 décembre 2003  par Team Access

Lors de calculs, vous rencontrez fréquemment cette erreur. Elle survient souvent lorsqu'une des variables composant le calcul a la valeur Null. Pour que le calcul ne prenne pas en compte le champ vide en question, et ainsi éviter ce message, il suffit d'utiliser la fonction Nz().
Cette fonction est également utilisable dans les requêtes SQL.
Exemple :

 
Sélectionnez
MsgBox Nz(ZoneDeTexte) + 1
Créé le 29 décembre 2003  par Team Access

Ce message d'erreur apparaît par exemple sur :

 
Sélectionnez
Dim labase As DAO.Database

Il s'agit probablement d'une dll manquante.
Dans le code VBA : allez dans le menu "Outils/références" et cochez Microsoft DAO 3.x Object library.

Créé le 29 décembre 2003  par Demco

Lien : Pourquoi une erreur d'exécution '13' 'Incompatiblité de type' ?
Lien : Définition et manipulation de données avec DAO par Tofalu
Lien : Comment déclarer une référence dans MS Access ?

Il ne faut mettre les '()' que lorsque vous attendez un résultat à utiliser ultérieurement.

Ainsi quand vous écrivez :

 
Sélectionnez
MaFonction(Paramètre1, Paramètre2) 

Vous lui demandez de renvoyer une valeur, mais vous ne lui dites pas où mettre ce résultat.

Il est plus correct d'écrire :

 
Sélectionnez
Result =  MaFonction(Paramètre1, Paramètre2)

En effet une fonction renvoie une valeur, il faut donc la stocker quelque part. Ici, le résultat est stocké dans la variable Result.

Si vous n'attendez pas de réponse, il suffit de ne pas mettre les parenthèses :

 
Sélectionnez
MaProcedure txtErreur, txtErreurVar

Ceci fonctionne également pour les MsgBox().

Créé le 1er avril 2004  par Maxence HUBICHE

Si vous utilisez un Recordset et la bibliothèque DAO :
dans un module (là où vous tapez le code VBA), faites : Outils/références et cochez Microsoft DAO 3.x Object Library.

Créé le 3 septembre 2004  par Demco

Lien : Définition et manipulation de données avec DAO par Tofalu
Lien : Comment déclarer une référence dans MS Access ?

 
Sélectionnez
  'Permet d'afficher l'ensemble des erreurs de l'application par ce biais

Public Sub SUB_Display_Error(intErrNumber As Integer, strErrDescription As String _
    , strErrSource As String, strErrModule As String, strErrFonction As String)

    On Error GoTo SUB_Display_Error

            MsgBox "Erreur : " _
            & intErrNumber & Chr(13) & " Description : " _
            & strErrDescription & Chr(13) & " Source : " & strErrSource & Chr(13) & _
            " Module : " & strErrModule & Chr(13) & " Fonction : " & _
            strErrFonction, vbCritical

    Exit Sub

SUB_Display_Error:

    MsgBox "Erreur : " & Err.Number & Chr(13) & "Description : " & Err.Description & Chr(13) & _
                    "Source : " & Err.Source & Chr(13) & _
                    "Module : General_Module Démarrage" & Chr(13) & _
                    "Fonction : Public Sub SUB_Display_Error(intErrNumber As " & _
                    "Integer, strErrDescription As String, strErrSource As String, " & _
                    "strErrModule As String, strErrFonction As String)", vbCritical

End Sub
Créé le 3 septembre 2004  par Frank

Ceci peut être provoqué par un problème de références, par exemple lors de l'utilisation d'un autre PC alors que tout fonctionne bien sur le poste d'origine.

  • Allez dans un module.
  • Allez dans Outils/Références.
  • Décochez les références marquées "MANQUANTE" (s'il y en a).
  • Recochez les références que vous devriez avoir (si vous en avez décoché).
  • Décochez au minimum une référence et validez la boîte de références, avant d'aller la recocher...
Créé le 10 mai 2005  par Maxence HUBICHE

Ceci est une option normalement activée par défaut. Pour l'activer, si elle ne fonctionne pas, allez dans VBA, puis dans le menu Outils, Option, cocher la case Complément automatique des instructions.

Créé le 10 mai 2005  par Petogaz

Souvent la barre de progression fonctionne très bien du moment que le traitement n'est pas trop gros. Si ça dépasse un certain temps, le curseur de la souris se change en sablier, la fenêtre ne se met plus à jour et la barre de progression non plus.

Un simple DoEvent dans le code avant Mise à jour de la barre de progression arrangera cela.

Créé le 10 mai 2005  par FRED.G

Ce message d'erreur peut s'afficher lorsque vous travaillez avec des requêtes imbriquées.
La règle est que la sous-requête imbriquée ne doit sélectionner qu'un seul champ (celui sur lequel s'applique la condition).

Créé le 10 mai 2005  par Demco

Vérifiez que les touches spéciales d'accès sont disponibles.

Pour cela :
Menu Outils/Démarrage, la case Utiliser les touches spéciales d'accès doit être cochée.

Créé le 20 novembre 2005  par ARO

Vous pouvez utiliser la méthode suivante :

 
Sélectionnez

DoCmd.RunCommand acCmdDebugWindow
Créé le 29 novembre 2006  par =JBO=

Pour référencer les objets d'une autre base (base A) dans une base B, il faut lui établir une référence. Dans VBA (menu Outils/Références...).

Une fois la référence établie, vous verrez que vous avez accès à tous les modules normaux mais pas aux modules de classe.

Pour résoudre ce problème vous devez :

1. Modifier la portée de la classe pour la rendre publique.
Dans l'IDE VBA, sélectionnez la classe, et dans la fenêtre des propriétés, modifiez la propriété [Instancing] avec la valeur [2. PublicNotCreatable].
Access permet de choisir entre les portées [Private] Ou [Public not creatable]. Cette dernière signifie que les instances de la classe peuvent être utilisées par n'importe quelle application Access qui référence la base A, avec une grosse limitation : seul le code contenu dans la base A est autorisé à instancier la classe (en clair, l'instruction New clsTest n'est pas valide en-dehors de la base A) ;

2. Étant donné que la classe n'est pas instanciable ailleurs que depuis A, il faut créer une méthode publique dans un module (pas un module de classe) qui instanciera l'objet et retournera une référence vers celui-ci.
C'est cette méthode qui sera appelée dans B.

Dans A :

 
Sélectionnez

Public Function NewTitre() As clsTitre
    Set NewTitre = New clsTitre
End Function

Dans B :

 
Sélectionnez

Function test()
    Dim oTitre As clsTitre
 
    Set oTitre = Newtitre()
End Function
Créé le 29 novembre 2006  par =JBO=

Lien : Introduction à la POO illustrée par VB6

Parce que du code VBA est en cours d'exécution.
Ceci peut arriver quand une procédure événementielle est exécutée, suite au déclenchement de l'événement Timer d'un formulaire, ou encore s'il y a un appel à une procédure de l'application Access via OLE automation.
Dans l'environnement de développement Visual Basic (IDE) la barre de titre affiche [Exécution en cours] pour signaler que du code est en cours d'exécution.

Créé le 29 novembre 2006  par =JBO=
  

Les sources présentées sur cette page sont libres de droits et vous pouvez les utiliser à votre convenance. Par contre, la page de présentation constitue une œuvre intellectuelle protégée par les droits d'auteur. Copyright © 2013 Developpez Developpez LLC. Tous droits réservés Developpez LLC. Aucune reproduction, même partielle, ne peut être faite de ce site et de l'ensemble de son contenu : textes, documents et images sans l'autorisation expresse de Developpez LLC. Sinon vous encourez selon la loi jusqu'à trois ans de prison et jusqu'à 300 000 € de dommages et intérêts.