VBA - Problème Debug.Assert retourne faux alors que vrai est attendu

Bonjour,

Je fais des tests unitaires dans mon programme VBA pour m'assurer que mes fonctions retourne bien les valeurs attendues. Pour cela j'utilise la méthode Debug.Assert.

J'ai une fonction "convertDiameter(ex_diameter As Double, ex_tolerance As Double, tolSymb As String)" qui va convertir le diamètre d'un cercle suivant certains arguments passés en paramètres pour un logiciel. J'ai utilisé une calculatrice pour m'assurer du résultat que cette fonction devra retournée avec certaines valeurs spécifiques comme arguments et j'ai obtenu "0.0009275", ce qui est correct. Ma fonction retourne également la même valeur.

Mon problème est le suivant, l'assert indique que ma comparaison est fausse :

Debug.Assert 0.0009275 = convertDiameter(diameter, tolerance, tolSymb)

Pour ceux qui ont un doute par rapport à mes propos, voici une capture d'écran montrant les valeurs de mes variables.

probleme debug assert contenu variables

Je vous mets également mon fichier excel avec ses macros pour que vous testiez de votre côté si besoin. Mes fonctions devraient être facilement compréhensibles car elles sont commentés et le code n'est pas compliqué à comprendre.

Est-ce que quelqu'un connaît la solution à mon problème ? Si oui peut-il me la donner et me dire pourquoi on doit faire comme ça, s'il-vous-plaît ?

Merci par avance pour vos réponses et bonne journée.

Bonjour,

Tu as éventuellement un problème de "cast implicite", qui arrive lorsque les variables ne sont pas déclarées, et prennent par défaut le type "Variant" où Excel s'arrange pour y faire tenir tout et n'importe quoi.

Il faudrait coder :

Function convertDiameter(ex_diameter As Double, ex_tolerance As Double, tolSymb As String) As Double

Et si

Function convertTolerance(ByVal ex_tolerance As Integer)

tolerance n'est pas Double.

Bonjour,

Merci pour votre réponse. J'ai fais les changements nécessaires en ajoutant les "As Double" à la fin de mes 2 fonctions mais ça ne change rien et le problème persiste. Si on regarde la fenêtre "Variables locales" dans l'image ci-dessous, on voit que mes variables "resultatFonctionTolerance" et "resultatFonctionDiameter" sont bien de type "Double" et ce même avant de spécifier les fonctions en "Double".

probleme debug assert contenu variables v2

Je me demande d'où vient le problème.

Je remets le fichier avec les modifications en fichiers joints.

Encore merci pour votre réponse et bonne journée.

Si je lis bien :

https://docs.microsoft.com/fr-fr/dotnet/api/system.diagnostics.debug.assert?view=netframework-4.8

Expression conditionnelle à évaluer. Si la condition est true, aucun message d’échec n’est envoyé et la boîte de message ne s’affiche pas.

Peut-être ça ?

Attention, vous regardez la méthode "Assert" du langage .NET, en VBA l'assert ne permet pas autant de paramètres.

Dès que la condition de l'assert en VBA est fausse, le code s'arrête à la ligne où se situe le problème (comme sur l'image ci-dessous)

probleme debug assert demonstration

Ok, dans ce cas, je pense qu'il y a une erreur ici :

Function convertTolerance(ByVal ex_tolerance As Integer) As Double

    'Convertit la tolérance en millième
    convertTolerance = ex_tolerance / 1000
    'Retourne la conversion de la tolérance pour SE
    convertTolerance = convertTolerance / 2000

End Function

Tu ne peux pas mettre deux fois le retour sur convertTolerance

J'ai fais la modification pour la fonction "convertTolerance", elle ne retourne qu'une fois. Puis j'ai aussi changé son paramètre qui était un Integer en Double

Function convertTolerance(ex_tolerance As Double) As Double
    'Convertit la tolérance en millième et pour Solid Edge
    convertTolerance = (ex_tolerance / 1000) / 2000
End Function

Mais le résultat est toujours le même, le problème persiste.

Super. A présent, tu peux remplacer tous les Double par des Variant.

Voir ici :

Bonjour,

J'ai fait les changements que vous m'avez proposez en remplaçant tous les "Double" en "Variant". ça a fonctionné. J'ai donc essayé de changer les retours et les paramètres des fonctions de "Double" à "Variant" tout en laissant mes variables interne à la fonction en "Double" comme ci-dessous. Et de nouveau ça à fonctionné

Function convertDiameter(ex_diameter As Variant, ex_tolerance As Variant, tolSymb As String) As Variant

    'Déclaration des variables
    Dim functol As Double
    Dim diameter As Double

C'est un peu dérangeant que ma fonction doit être déclarée de cette façon car les "Variant" font un peu bricolage dans le code, j'aurais nettement préféré que tout soit en double. Je me demande toujours pourquoi ça ne fonctionnait pas alors que les retours étaient bien de type "Double".

Vous retrouverez le fichier excel et ses macros avec les changements effectués en fichier joint.

Merci pour votre aide, je change donc le problème en résolu.

Bonne journée

Rechercher des sujets similaires à "vba probleme debug assert retourne faux que vrai attendu"