Précédent   Forum des professionnels en informatique > Logiciels > Microsoft Office > Excel > Macros et VBA Excel
Macros et VBA Excel Vos questions relatives aux macros Excel, à l'utilisation de VBA et à l'automatisation de vos classeurs Excel.
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
Vieux 30/06/2009, 11h25   #1
Invité de passage
 
Inscription : février 2009
Messages : 6
Détails du profil
Informations forums :
Inscription : février 2009
Messages : 6
Points : 1
Points : 1
Par défaut Récupérer un char 3 étoiles et un double 2 étoiles d'une DLL en VBA ?

Bonjour le forum,

Tout d'abord, veuillez m'excuser par avance si mes 2 questions ci-dessous ont déjà été posées, mais je n'ai rien trouvé pour l'instant sur le forum...

J'ai 2 questions urgentes :

QUESTION 1 :
J'ai une fonction en C qui me retourne en sortie un char *** (un pointe vers un tableau de chaîne de caractères ? - je précise que je suis nul en C...).
Voici sa déclaration de base :
Code :
long RecupListe(char ***MaListe)
Cette fonction me retourne donc une liste de chaîne de caractères.
J'aimerais pouvoir l'inclure dans une DLL, du style :
Code :
extern "C" __declspec(dllexport) long __stdcall RecupListe(char ***MaListe)
Puis ensuite, l'appeler depuis VBA dans Excel pour afficher les éléments de cette liste dans la colonne que je veux.
J'ai pour l'instant déclaré la fonction en VBA de la façon suivante :
Code :
Public Declare Function RecupListe Lib "maDLL.dll" Alias "_RecupListe@8" (ByRef lptArray As Long) As Long
où 'lptArray serait un pointeur vers la liste...
Pouvez-vous me répondre en me donnant un exemple adapté aux déclarations que j'ai faites ci-dessus SVP ?
Doit-on utiliser des SAFEARRAY, des instructions 'VarPtrStringArray', autre chose ?

QUESTION 2 :
Dans le même principe, j'ai une fonction C qui passe en arguments de sortie des double **, du style :
Code :
extern "C" __declspec(dllexport) long __stdcall RecupValeurs(double **LeTemps, double **LaValeur)
J'aimerais dans ce cas pouvoir appeler la fonction depuis Excel en VBA, et afficher dans 2 colonnes le temps et la valeurs correspondante...

Avez-vous un exemple adapté SVP ?
Il se pourrait qu'il manque des infos pour que vous puissiez me dépanner rapidement, donc n'hésitez pas à me demander plus de détails s'il le faut.

Merci beaucoup par avance pour votre aide précieuse !

Note : Je précise que je ne pourrai pas envoyer les bouts de code correspondants, car l'exemple que j'ai fourni ci-dessus ne représente pas la réalité, et je ne peux pas envoyer l'original...

Dernière modification par AlainTech ; 03/07/2009 à 05h42. Motif: Balises [code]
beafrancky est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 30/06/2009, 14h21   #2
Membre Expert
 
Avatar de aalex_38
 
Inscription : septembre 2007
Messages : 1 570
Détails du profil
Informations forums :
Inscription : septembre 2007
Messages : 1 570
Points : 1 709
Points : 1 709
Bonjour,

Citation:
j'ai une fonction C
Ici c'est le forum VBA Excel !!!
__________________
aalex_38 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 30/06/2009, 14h31   #3
Invité de passage
 
Inscription : février 2009
Messages : 6
Détails du profil
Informations forums :
Inscription : février 2009
Messages : 6
Points : 1
Points : 1
Bonjour,
Oui justement je compte pouvoir appeler ma fonction présente dans ma DLL depuis du code VBA sous Excel, afin d'afficher les résultats dans une grille Excel.
Or, j'ai besoin de toutes les étapes, y compris la partie C en amont, avec les __stdcall.
Me suis-je vraiment trompé de forum ? Dommage, c'est quand même fortement en relation avec Excel et VBA...
Peut-on quand même me conseiller un bout de code ? S'il n'y a que la partie VBA (puisqu'on dirait que le code C est proscrit), ca me suffira peut-être.
Merci.

Dernière modification par AlainTech ; 03/07/2009 à 05h43. Motif: Suppression de la citation
beafrancky est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 30/06/2009, 14h48   #4
Membre Expert
 
Avatar de aalex_38
 
Inscription : septembre 2007
Messages : 1 570
Détails du profil
Informations forums :
Inscription : septembre 2007
Messages : 1 570
Points : 1 709
Points : 1 709
Citation:
puisqu'on dirait que le code C est proscrit
Que veux tu dire par là.

En VBA tu peux utiliser des dll, c'est ça que tu veux faire, j'ai du mal à comprendre le but de ta macro sous excel ?
__________________
aalex_38 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 30/06/2009, 17h10   #5
Invité de passage
 
Inscription : février 2009
Messages : 6
Détails du profil
Informations forums :
Inscription : février 2009
Messages : 6
Points : 1
Points : 1
Cher Aalex,

Merci pour l'interet que tu portes à ma question, même si j'avoue que je ne sais pas quel est le meilleur endroit pour poster ma demande...

Je reprends donc mon besoin :

Depuis Excel, mon bout de code VBA est censé appeler une fonction présente dans une DLL, qui doit me retourner un tableau de chaînes de caractères en sortie, pour que par exemple je boucle sur ce tableau en VBA, et que j'affiche le contenu résultat dans une colonne d'un de mes onglets Excel.

Or, l'argument de la fonction C appelée via la DLL est un char ***...

Et je ne sais pas comment :
1. Transformer ma fonction C pour qu'elle soit comprise par VBA (SAFEARRAY ?).
2. Déclarer les arguments de ma fonction dans VBA (Declare Function...). Dois-je déclarer un tableau de string ?
3. Appeler la fonction pour remplir mon tableau via la fonction de ma DLL. Dois-je passer en argument de sortie de ma fonction le premier élément de mon tableau ?

C'est pour cela que j'ai posté ma demande dans VBA, mais effectivement je peux aussi demander dans un autre forum (C par exemple).

Sinon, as-tu des idées ?
Et est-ce qu'il serait possible dans ce cas de me transmettre les bouts de code qui vont bien, par rapport à mon exemple du départ ?

Merci et encore désolé si je pollue un peu le forum avec mon mix C-VBA...

Dernière modification par AlainTech ; 03/07/2009 à 07h16. Motif: Suppression de la citation
beafrancky est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité
Outils de la discussion



Fuseau horaire GMT +1. Il est actuellement 20h08.


 
 
 
 
Partenaires

Hébergement Web