L'informatique à votre portée
L'informatique prêt-à-porter

Faites appel à moi

pour vos formations chez vous pour les dpts 59, 62, 80, 81, 31, 82 et 11 ou à distance

pour vos développements bureautiques (tout Office)

Communauté partenaire Microsoft

Débogage

Définition

Haut

Le débogage représente toutes les actions que vous effectuez pour tester et corriger votre programme. En effet, malgré toute l'attention que vous aurez apportée à votre travail, il résidera toujours des erreurs que vous pourrez détecter au cours de cette phase du travail. Certains programmeurs estiment que pour la construction d'un programme 10% du temps est consacré à la conception tandis que le débogage en utilise 90%.
Il vous permettra de débusquer :

  • Les erreurs de compilation qui se produisent lors de la frappe du code, les erreurs de ponctuation, mot clé mal orthographié, propriété ou méthode n'existant pas pour l'objet. Certaines de ces erreurs sont détectées par VBA au cours de la frappe, mais d'autres le sont au moment de la compilation (transformation de votre code en code exécutable) effectuée lorsqu'il est exécuté pour la 1ère fois.
    Exemple :
    Sub NouvelleFlle
         Worksheets.New
                ' devrait être Worksheets.Add
    End Sub
  • Les erreurs d'exécution qui se produisent pendant l'exécution du code. Elles sont essentiellement dues à des données erronées, des dépassement de capacités des types de données, des erreurs dues à l'utilisateur. VBA vous signale l'erreur pendant l'exécution avec un message parfois peu explicite.
    Exemple :
    Function Double(X As Byte) As Byte
         Double= X * 2
    End Function

    Dans tous les cas où X est supérieur à 127, ce programme provoque une erreur de dépassement de capacité (Double étant de type Byte, il ne peut accepter des valeurs supérieurs à 255).
  • Les erreurs logiques qui ne génèrent pas d'erreur. Mais le programme ne produit pas le résultat prévu. Ce sont les erreurs les plus difficiles à détecter.
    Exemple :

    Function FrancEuro(dF as Double) as Double
         FrancEuro = dF / 6.55957
    End Function

    Ici la fonction renvoie toujours une valeur mais elle n'est pas valide, en effet l'opération aurait du être :
     FrancEuro = dF * 6.55957
   Impression Impression

Les moyens mis à votre disposition

Haut

Option Explicit

Cette instruction, Option Explicit, placée en haut de chaque module, impose de définir explicitement chaque variable du module, quelque soit leur emplacement (intérieur ou extérieur à une procédure). Cela implique donc que vous devez déclarer chacune de vos variables en début de module ou en début de procédure avec au minimum le mot clé Dim.
L'utilisation de cette instruction permet alors :
  • à VBA, de vous signaler une variable comme non déclarée, lorsque vous avez fait une faute de frappe sur celle-ci.
  • de vérifier au cours de la frappe, cette orthographe :
    • déclarer vos variables avec 1 ou plusieurs majuscules, exemple : strUnTexte
    • tapez votre code en minuscule
    • lorsque vous passez à la ligne suivante, les majuscules se mettent automatiquement, vous vérifiez ainsi la bonne orthographe de votre code.

      Tapez

      Sub Essai()
          Dim strUnText As String

      End Sub

      Tapez avant End Sub

      Passez à la ligne suivante, cela s'affiche ainsi :

          struntext="Voici le texte"

           strUnText = "Voici le texte"

  • d'en profiter pour indiquer précisément le type de données de la variable. Sinon, elles sont considérées comme Variant, qui fonctionne moins rapidement. Vous pouvez déclarer plusieurs variables sur une même ligne séparées par une virgule, mais vous devez alors indiquer le type de données pour chacune d'elles.
    Exemple :
    Dim strText1 as String, strText2 as String, iNb as Integer
           Dim strText1 as String, strText2, iNb déclare les données ainsi :
                  strText1 de type String, strText2 et iNb de type Variant
           Dim strText1 , strText2 as String déclare les données ainsi :
                  strText1 de type Variant, strText2 de type String

Pour placez systématiquement Option Explicit dans tous les prochains modules : dans l'éditeur VBA, sélectionnez Options dans le menu Outils. Puis dans l'onglet Éditeur, cochez l'option Déclaration des variables obligatoires. Puis Ok.

La barre d'outils Débogage

Lorsqu'une procédure ne produit pas le résultat escompté, un des moyens pour vérifier votre code est son exécution ligne par ligne. Vous pouvez ainsi constater le déroulement de votre programme et vérifier le contenu des variables et propriétés des objets.
La barre d'outils Débogage contient plusieurs boutons permettant d'exécuter ou arrêter le programme :

  • Le bouton Exécuter Sub/UserForm permet de lancer l'exécution d'une procédure, vous pouvez également utiliser la touche F5,
  • Le bouton Arrêt permet d'arrêter le programme en cours, mais il est souvent difficile à atteindre. En conséquence, utilisez plutôt la combinaison de touches Ctrl+Pause,
  • Le bouton Réinitialiser permet de reprendre le programme à son début. Ce bouton n'est atteignable qu'en mode Arrêt.

L'exécution en pas à pas

Les 4 boutons suivants permettent d'exécuter le code ligne par ligne de manière différente .
  • Le bouton Pas à pas détaillé permet d'exécuter le code ligne après ligne. La ligne de code devant s'exécuter apparaît en surbrillance et s'exécute après un clic sur ou appuie sur la touche F8.
  • Le bouton Pas à pas principal permet d'exécuter le code ligne par ligne mais lorsque l'instruction de la ligne est un appel à une procédure ou à une fonction, cette dernière est exécuté entièrement et non ligne par ligne.
  • Le bouton Pas à pas sortant permet de terminer la procédure en cours et s'arrêter, dans la procédure appelante, à la ligne suivante celle qui a appelé la procédure ou fonction.
    Le code est exécuté en pas à pas détaillé
    Après un clic sur Pas à pas sortant
  • Le bouton Pas à pas au curseur permet d'exécuter le code jusqu'à la ligne contenant le curseur. Ce bouton n'est pas automatiquement insérer dans la barre d'outils Débogage, mais vous le trouver dans le menu Débogage ou pouvez l'ajouter à la barre d'outils.

Le mode Arrêt

Vous êtes dans ce mode lorsqu'une des lignes de votre code est en surbrillance . Plusieurs évènements peuvent provoquer ce mode :
  • Une erreur est survenue et vous avez cliqué sur le bouton Débogage du message d'erreur.
  • Vous avez interrompu volontairement le déroulement du programme en appuyant sur les touches Ctrl+Pause.
  • Vous avez inséré un point d'arrêt dans votre code et le programme est arrivé à cette ligne. Pour insérer ou ôter un point d'arrêt :
    • Cliquez sur la ligne où le programme doit s'arrêter puis cliquez sur le bouton Basculer le point d'arrêt
    • Ou cliquez devant la ligne dans la marge grise.
      qui devient ensuite
  • Le programme a rencontré une instruction Stop.
  • Vous exécuter le code en pas à pas.

Vous pouvez alors, vérifier la valeur d'une variable ou d'une propriété, exécuter une instruction dans la fenêtre Exécution, poursuivre l'exécution du code normalement, en pas à pas ou réinitialiser la procédure ou fonction.

Vérification des variables et propriétés

VBA vous propose plusieurs moyen pour visualiser la valeur des variables et propriétés :
  • Placez votre curseur au-dessus de la variable ou la propriété, celle-ci s'affiche dans une info-bulle.
    Vérifiez au préalable si dans l'onglet Éditeur de la fenêtre Options (sélectionnez Options du menu Outils), l'option Info Express automatique est cochée.
  • Afficher la fenêtre Exécution, en cliquant sur le bouton Fenêtre Exécution , tapez un ? suivi de votre variable ou propriété d'objet, puis appuyez sur la touche Entrée :
  • Affichez la fenêtre Variables locales en cliquant sur le bouton Fenêtre Variables locales . Celle-ci affiche toutes les variables de la procédure ou fonction en cours et propriétés de l'UserForm en cours.

  • Utilisez les variables Espions, ces variables ou expressions que vous aurez désignées comme espions s'affichent dans la fenêtre Espions. Cette fenêtre affiche, en permanence, la valeur de  chacun de ces espions. Vous pouvez alors les comparer aisément. Pour désigner un espion vous devez :
    • Sélectionnez la variable ou l'expression
    • Cliquez sur le bouton Espion Express ou appuyez sur les touches Maj+F9
      OU
    • Sélectionnez la variable ou l'expression
    • Cliquez à droite et choisissez Ajouter un espion ou dans le menu Débogage, sélectionnez Ajouter un espion.
    • Dans la fenêtre qui s'ouvre vous pouvez modifier l'espion, préciser la portée de cet espion (dans sa procédure, toutes les procédures du module, tous les modules), ainsi que son type (dans notre cas, Expression espionne)
  • Les options Arrêt si la valeur est Vraie et Arrêt si la valeur change permettent d'exécuter le programme normalement, mais ce dernier passe automatiquement en mode arrêt dès que la valeur est vraie ou différente de zéro dans le 1er cas, dès que la valeur change dans le 2e cas.
  • Utilisez l'objet Debug, celui-ci représente la fenêtre Exécution et possède uniquement 2 méthodes :
    • Debug.Print listeExpression
      listeExpression correspond à une liste d'expressions à afficher dans la fenêtre Exécution, chacune de ces expressions sont séparées par une virgule.
    • Debug.Assert ExpressionBooléenne
      ExpressionBooléenne correspond à une expression renvoyant la valeur False ou True.
      Cette instruction permet de suspendre l'exécution du code si ExpressionBooléenne est fausse.
    • Exemple :

      Sub EssaiDebug()
           Dim iNb As Byte, iNbCarre As Integer
           Dim Egal5 As Boolean

           For iNb = 1 To 10
                iNbCarre = iNb * iNb
                Debug.Print iNb, iNbCarre
                If iNb = 5 Then Egal5 = True
                Debug.Assert Egal5
           Next iNb
      End Sub

      Affiche sur la fenetre Exécution les valeurs de iNb et iNbCarre.

      Le code passe en mode arrêt tant que iNb est inférieur

   Impression Impression