Lars a rencontré un problème lors de l’utilisation de la fonction ATAN2 dans une macro. Il a développé un ensemble d’instructions plutôt compliqué, pour que VBA génère une erreur lorsqu’il a essayé d’utiliser la fonction ATAN2. Il a pu simplifier la macro pour recréer le problème:

Sub Test()

Dim A As Double

Dim C As Double     Dim E As Double

A = 5908     C = 0     C = -C     E = 180 / WorksheetFunction.Pi

MsgBox E * WorksheetFunction.Atan2(C, A)

End Sub

Lorsque le code est exécuté, l’erreur est générée sur la ligne où ATAN2 est exécuté. Lars se demandait ce qui causait exactement le problème.

Le problème est apparemment lié à la façon dont vous manipulez la variable C. Vous définissez d’abord C comme zéro, puis annulez cette valeur. Il n’existe pas de zéro négatif et lorsque vous essayez d’annuler la valeur, Excel hésite apparemment lorsque cette valeur est ensuite utilisée dans la formule.

Une façon de résoudre le problème est simplement de changer la façon dont C est transformé pour tenir compte des valeurs nulles. Modifiez la macro pour qu’elle ressemble à ceci:

Sub Test()

Dim A As Double

Dim C As Double     Dim E As Double

A = 5908     C = 0     If C <> 0 Then C = -C     E = 180 / WorksheetFunction.Pi

MsgBox E * WorksheetFunction.Atan2(C, A)

End Sub

Maintenant, la macro fonctionnera très bien car vous ne faites la transformation sur C que si elle n’est pas égale à zéro.

Il apparaît également que l’erreur n’est générée que si C est défini comme une valeur à virgule flottante. Si vous cotez C comme un entier, la macro d’origine ne génère pas d’erreur. Cela pourrait indiquer que le problème est lié à la façon dont une représentation en virgule flottante du zéro négatif inexistant est représentée en interne. Étant donné que le type de données Integer traite strictement des nombres entiers, ce problème de représentation ne se produit pas.

Vous pouvez également vous débarrasser du problème si vous déclarez C comme type de données Variant, ou si vous supprimez complètement la ligne de déclaration (ce qui signifie que VBA déclare par défaut C comme Variant lors de sa première utilisation).

_Note: _

Si vous souhaitez savoir comment utiliser les macros décrites sur cette page (ou sur toute autre page des sites ExcelTips), j’ai préparé une page spéciale qui comprend des informations utiles.

lien: / excelribbon-ExcelTipsMacros [Cliquez ici pour ouvrir cette page spéciale dans un nouvel onglet de navigateur].

ExcelTips est votre source pour une formation Microsoft Excel rentable.

Cette astuce (2892) s’applique à Microsoft Excel 97, 2000, 2002 et 2003.