Se connecter avec Microsoft
S'identifier ou créer un compte.
Bonjour,
Sélectionnez un autre compte.
Vous avez plusieurs comptes
Choisissez le compte avec lequel vous voulez vous connecter.

Contenu TechKnow en ligne

Question : Du code VBA a été écrit pour comparer deux valeurs monétaires. Voici un exemple de ce code :

If ccur(cost) > ccur(1000) then

Lorsque cette ligne de code s’exécute, elle entraîne un message d’erreur d’incompatibilité de type de données ou d’incompatibilité de type. Les Windows devise sont actuellement définies par le symbole anglais « poids » du symbole monétaire. Si je change le symbole monétaire en « $ », le code s’exécute correctement. Que se passe-t-il ici et existe-t-il une manière de contourner ce problème ?


Réponse : Dans VBA, la fonction Ccur() respecte toujours les paramètres monétaires du Panneau de configuration lors de l’évaluation de ce champ. Étant donné que l’implémenter VBA Dynamics passe toujours ses valeurs de champ sous forme de chaînes, vous aurez ce problème chaque fois qu’une valeur monétaire ne correspond pas aux paramètres de devise dans Windows.


Dans le fichier d’aide VBA, il indique que les fonctions de conversion de type de données doivent être utilisées au lieu de Val pour fournir des conversions internationales d’un type de données à un autre. Par exemple, lorsque vous utilisez la fonction CCur(), différents séparateurs de décimale, différents séparateurs de milliers et différentes options monétaires sont correctement reconnus en fonction des paramètres régionaux de votre ordinateur.


Dans le cadre de cette compréhension, notez ce qui se produit au sujet de l’exploitation de Microsoft Dynamics GP :

  • CCur(« œ1000 ») est égal à une insérialité de type (c’est-à-dire, si cette chaîne n’est pas une devise valide) si le paramètre devise Windows n’est pas réglé sur « livre ».

  • Si elle est définie sur « livre », la valeur CCur( « œ1000 ») retourne la valeur 1 000, mais la valeur CCur(« 1000 $ ») est égale à une erreur de type inféré.

La meilleure façon de gérer les devises en provenance de VBA serait d’écrire une fonction qui convertit en valeur numérique (ou devise) toute chaîne de symboles non numériques en valeurs monétaires. Par exemple, comme ceci :

If CurrencyValueFromDynField(cost) > ccur(1000) then

où la fonction nommée CurrencyValueFromDynField est définie comme suit. Ce code gère correctement les nombres négatifs qui ont des signes moins de début ou de fin, qui sont entourés de crochets ou qui sont entourés d’espaces entre le symbole monétaire et le nombre.

Public Function CurrencyValueFromDynField(FieldString As String) As Currency
Dim i As Integer
Dim TempChar, TempString As String

' Strip off all non-numeric characters
TempString = ""
For i = 1 To Len(FieldString)
TempChar = Mid(FieldString, i, 1)
If InStr("1234567890.,-()", TempChar) > 0 Then
TempString = TempString & TempChar
End If
Next
FieldString = TempString

' Return the numeric value of the string (as a currency data type )
CurrencyValueFromDynField = CCur(FieldString)
End Function

Cet article était TechKnowknow Document ID:10036

Besoin d’aide ?

Vous voulez plus d’options ?

Explorez les avantages de l’abonnement, parcourez les cours de formation, découvrez comment sécuriser votre appareil, etc.

Les communautés vous permettent de poser des questions et d'y répondre, de donner vos commentaires et de bénéficier de l'avis d'experts aux connaissances approfondies.

Ces informations vous ont-elles été utiles ?

Dans quelle mesure êtes-vous satisfait(e) de la qualité de la langue ?
Qu’est-ce qui a affecté votre expérience ?
En cliquant sur Envoyer, vos commentaires seront utilisés pour améliorer les produits et services de Microsoft. Votre administrateur informatique sera en mesure de collecter ces données. Déclaration de confidentialité.

Nous vous remercions de vos commentaires.

×