OVH Cloud OVH Cloud

vba to c++

4 réponses
Avatar
Xavier
Bonjour,
Voila j'ai réalisé quelques fonction en VBA que je désire convertir en C++.
J'ai quelques (grosses) lacunes en C++ et je recherche quelques conseils
méthodologiques (voir la traduction de ce modele générale de fonction de
VB(A) à (Visual) C++

Ma fonction Général en VBA est la suivante
------------
Function FONCTION(Valeur As Double, Optional Devise = "EU")

If IsNumeric(Devise) Then
FONCTION = Devise * FONCTION_EU(Valeur / Devise)
Else
Select Case UCase(Devise)
Case "EU": FONCTION = FONCTION_EU(Valeur)
Case "FR": FONCTION = 6.55957 * FONCTION_EU(Valeur / 6.55957)
Case Else: FONCTION = "Erreur d'argument"
End Select
End If
End Function

FONCTION_EU est une autre fonction

Et mes "petits" problemes sont les suivants:
------------
1. En VBA, l'argument Devise peut prendre les valeurs "FR", "EU", ou une
valeur Numérique (le taux de conversion).
Puis je faire de même en C++? (D'apres mes maigres connaissances je doit
typer mes arguments). Faut il Eventuellement que je type l'Argument devise
en string?/char? et que je teste si je peux le convertir en Numérique

2. Comment traduire UCase (Devise) en C++ (UCase pour UpperCase en VBA).
L'arument Devise doit il etre "Char" ou "String"?

3. Comment faire pour renvoyer le résultat qui peur être ou une valeur
Numérique ou une chaine "Erreur d'argument"?
Faut il faire renvoyer 0(calcul ok) ou 1(probleme) par ma fonction et
déclarer et utiliser 2 autres arguments passé par reference (1 double et 1
char) et selon le résultat 0 ou 1 renvoyé vers ces arguments.

Tout conseil serait le bienvenu. Merci
Xavier

4 réponses

Avatar
Fabien LE LEZ
On Mon, 13 Dec 2004 19:05:19 +0100, "Xavier" :

1. En VBA, l'argument Devise peut prendre les valeurs "FR", "EU", ou une
valeur Numérique (le taux de conversion).
Puis je faire de même en C++?


Non. Enfin, pas vraiment. Disons que c'est possible, mais moins simple
qu'en un langage de script.
En C++, il n'y a jamais de conversion implicite entre chaîne et
nombre.

Le plus simple pour différentier les deux cas est de faire deux
fonctions :

double fct (double valeur, double devise)
{
return devise * FonctionEU (valeur / devise);
}

double fct (double valeur, std::string id_devise= "EU")
{
if (id_devise == "EU")
{
return fct (valeur, 1.0);
}
else if (id_devise == "FR")
{
return fct (valeur, 6.55957);
}
else
{
// Gestion d'erreur -- cf plus bas
}
}

3. Comment faire pour renvoyer le résultat qui peur être ou une valeur
Numérique ou une chaine "Erreur d'argument"?


Ça dépend d'où vient l'argument, mais le plus simple est de lancer une
exception.


--
;-)

Avatar
Olivier Azeau
Xavier wrote:
Bonjour,
Voila j'ai réalisé quelques fonction en VBA que je désire convertir en C++.
J'ai quelques (grosses) lacunes en C++ et je recherche quelques conseils
méthodologiques (voir la traduction de ce modele générale de fonction de
VB(A) à (Visual) C++

Je vois au moins 2 cas nettement distincts :


(1) Les fonctions écrites en C++ doivent être utilisable par un
environnement VB/VBA.
Dans ce cas, il vaut mieux s'orienter vers du C++/COM qui possède un
type VARIANT équivalent de ce que tu utilises en VBA et aller chercher
les réponses dans MSDN ou sur microsoft.public.vc*

(2) Le code C++ est destiné à réaliser une application indépendante.
Dans ce cas, voir les réponses de Fabien.

Avatar
Xavier
Ok Merci pour vos réponses,

Je vois au moins 2 cas nettement distincts :

(1) Les fonctions écrites en C++ doivent être utilisable par un
environnement VB/VBA.
Dans ce cas, il vaut mieux s'orienter vers du C++/COM qui possède un type
VARIANT équivalent de ce que tu utilises en VBA et aller chercher les
réponses dans MSDN ou sur microsoft.public.vc*



En fait pour completer la question, les fonctions étaient écrites en vba
pour Excel. Mais si je veux les utiliser dans tous mes classeurs (Excel 97
et sup) je dois passer par la création d' une dll en C++ (xll)(ou creer un
complement COM automation que je peux faire en VB mais ca ne fonctionnera
qu'a partir d'Excel XP). Du coup je crains que je ne puisse utiliser le type
VARIANT du C++/COM

(2) Le code C++ est destiné à réaliser une application indépendante.
Dans ce cas, voir les réponses de Fabien.
Je vais essayer d'approfondir ca à partir des exemples que je peux avoir. En

fait je récupère un type XLOper d' Excel qui peut être double, string,
tableau...Mais j'ai un peu du mal à gérer la suite en C++
Merci en tous cas des réponses fournis
Xavier

Avatar
Aurélien REGAT-BARREL
En fait pour completer la question, les fonctions étaient écrites en vba
pour Excel. Mais si je veux les utiliser dans tous mes classeurs (Excel 97
et sup) je dois passer par la création d' une dll en C++ (xll)(ou creer un
complement COM automation que je peux faire en VB mais ca ne fonctionnera
qu'a partir d'Excel XP). Du coup je crains que je ne puisse utiliser le
type

VARIANT du C++/COM


Il y a un sujet en ce moment sur xll sur
fr.comp.os.ms-windows.programmation.

--
Aurélien REGAT-BARREL