IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Macros et VBA Excel Discussion :

DLL appellée par VBA


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Homme Profil pro
    Inscrit en
    Juillet 2007
    Messages
    153
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Royaume-Uni

    Informations professionnelles :
    Secteur : Finance

    Informations forums :
    Inscription : Juillet 2007
    Messages : 153
    Par défaut DLL appellée par VBA
    Bonjour,

    Je m'excuse d'avance si je me suis planté d'endroit de post... c'est assez flou comme sujet.

    J'en appelle à vous pour me trouver toutes les idées (même incohérante) qui pourraient expliquer mon problème :
    J'ai écrit une DLL en C++ que j'appelle via une procédure en VBA.
    A priori, la fonction marche, j'ai fait pas mal de tests sur plein de données....

    Maintenant, je l'ai mise en production dans une grosse boucle en VBA, et je l'appelle à la chaine, plusieurs centaines de fois.

    Le souci, c'est qu'au bout d'un certain nombre d'appel (variant entre 1 et 500), il arrive à Excel de completement cracher. (Message de rapport d'erreur windows... etc)

    J'ai exclu par test le reste du programme: apparament, c'est au niveau de la DLL que ça plante, et cela ne viens pas de mes paramètres d'entée.

    Une idée : n'importe quoi... ça m'aiderai d'en discuter ^^

  2. #2
    Membre Expert
    Homme Profil pro
    Ingénieur systèmes et réseaux
    Inscrit en
    Avril 2008
    Messages
    875
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Ingénieur systèmes et réseaux
    Secteur : Conseil

    Informations forums :
    Inscription : Avril 2008
    Messages : 875
    Par défaut
    Renseignes toi sur le net sur la création de fichiers XLL. Sur le site du support Microsoft il y a un tutoriel pour en créer. Peut être que ce format sera plus adapté à Excel.

    Et si j'étais toi je ferai un test de boucle avec ta dll dans un projet pur VB et non dans l'hôte Excel pour tenter de déterminer si le problème viens de ta DLL ou d'Excel lui même quand il gère la dll.

    Autre chose: déclare toutes tes variables en VB (ajoute "Option Explicit" en haut de tes feuilles de codes). En production j'ai repéré des merdes incoyables sur les grosses boucles en VB avec des indices non déclarés (saut d'indice par exemple).

    Dans ton code (DLL et VBA) assures toi de bien libérer tes variables quand tu n'en as plus besoin, en particulier les objets.

    Est ce que ton code fait appel à la pile?

    Sinon il te restera à examiner les types de données de chaque variable car ils ne sont pas identiques en VB et C++. En vb pas de notion de variables signées ou non, par exemple. Un mauvais passage de paramètre peut tout faire foirer.

    J'espère que quelques trucs pourront t'aider là dedans car les problèmes de DLL sont assez ardus.

  3. #3
    Membre confirmé
    Homme Profil pro
    Inscrit en
    Juillet 2007
    Messages
    153
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Royaume-Uni

    Informations professionnelles :
    Secteur : Finance

    Informations forums :
    Inscription : Juillet 2007
    Messages : 153
    Par défaut
    Merci pour ta réponse

    J'ai fait enormément de test, mais le truc plantant assez rarement, je n'ai encore pas réussi à identifier quand est-ce que ça plantait exactement.

    J'ai fait 1000 appels successifs avec les même données => plante pas
    J'ai enregistrés les données juste avant l'appel, pour pouvoir le refaire avec les même, et lorsque ça plante 1 fois, ça ne replante pas avec les même entrées.

    Je vais essayer de déclarer avec "Option Explicit" les variables que je passes en paramètre, c'est une bonne idée.

    Un autre truc : En effet, dans mon code C++, je fais des malloc (uniquement type simple - int, double), mais étrangement, l'appel de la fonction "free" fait systématiquement planter la fonction, je n'ai donc aucun free, et mes allocations sont fait immédiatement au début de la première fonction. Une idée de pourquoi (parce que j'aime pas laisser mes variables dans le vent :s)

    Normalement, les correspondances de type ont été respecté, dans la mesure ou je n'utilise que des int/Long et double/Double

  4. #4
    Membre Expert
    Homme Profil pro
    Ingénieur systèmes et réseaux
    Inscrit en
    Avril 2008
    Messages
    875
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Ingénieur systèmes et réseaux
    Secteur : Conseil

    Informations forums :
    Inscription : Avril 2008
    Messages : 875
    Par défaut
    en plus si tu laisses tes variables dans le vent j'imagine qu'en effet ça fait quelques résidus que ne doit pas aimer le code. Il y a un garbage collector en c++ j'imagine?

    Et non je ne vois pas pourquoi il ne veut pas que tu libères les variables.


    te reste la piste du XLL:

    http://support.microsoft.com/kb/178474


    tiens j'ai trouvé ça aussi

    http://msdn.microsoft.com/en-us/library/bb687861.aspx

  5. #5
    Membre confirmé
    Homme Profil pro
    Inscrit en
    Juillet 2007
    Messages
    153
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Royaume-Uni

    Informations professionnelles :
    Secteur : Finance

    Informations forums :
    Inscription : Juillet 2007
    Messages : 153
    Par défaut
    Bonjour,

    J'ai regardé les liens que vous m'avez fourni sur les XLL, et un peu au délà sur le net, mais j'ai l'impression d'avoir déjà fait quelques recherches à ce sujet (il y a longtemps), donc avant de me lancer dans un periple de débug sans nom, je me pose la question suivante :
    Dans le tutorial en question, on utilise des fichiers du "SDK pour Excel 97" valable pour Visual C++ 6.0 ... En cherchant un peu plus loin sur le net, on peut aussi trouver de la doc sur "comment faire un XLL pour Excel 2007" avec "SDK pour Excel 2007" et VS 2005.

    Moi, je suis sous VS 2008, et Excel 2003. De mémoire, je n'avais pas réussi à même compiler le source fourni dans le SDK 97, mais ma mémoire peut me jouer des tours et si vous me dites que c'est cencé être compatible, je m'y jeterai tête baissée :p

  6. #6
    Membre confirmé
    Homme Profil pro
    Inscrit en
    Juillet 2007
    Messages
    153
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Royaume-Uni

    Informations professionnelles :
    Secteur : Finance

    Informations forums :
    Inscription : Juillet 2007
    Messages : 153
    Par défaut
    Bonjour,

    Je reviens à nouveau vers vous avec mon histoire de DLL et soudainement un gros doute. Déjà, j'ai fait énormement de recherche et vais donc vous faire partager quelques liens qui m'ont été très utlise.

    Explication extrèmement détaillée, et ne se contente pas de parler du comment mais aussi du pourquoi.
    http://xcell05.free.fr/pages/prog/api-c.htm

    En anglais, mais excellent tutorial pour les versions adapté à 2007. Je n'ai pas encore réussi à utiliser son travail pour faire marcher sur 2003, mais ça doit pas être très loin.
    http://blogs.msdn.com/andreww/archiv...h-vs-2008.aspx

    Pas mal de documentation (anglais aussi) sur comment configurer son Visual Studio pour faire une XLL.
    http://www.codematic.net/Excel-devel...dk-install.htm


    Mais la question qui me tracasse :
    J'ai bien le sentiment qu'une XLL est une librairie qui est appellée dans Excel, et en aucun cas en VBA :s
    Si c'est le cas, la XLL n'est pas du tout la solution à mon problème, car mes données sont chargé d'un serveur web via une interface VBA, et donc jamais "écrite" dans le fichier Excel.
    Je me trompe ?

  7. #7
    Expert confirmé
    Avatar de Qwazerty
    Homme Profil pro
    La très haute tension :D
    Inscrit en
    Avril 2002
    Messages
    4 122
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France

    Informations professionnelles :
    Activité : La très haute tension :D
    Secteur : Service public

    Informations forums :
    Inscription : Avril 2002
    Messages : 4 122
    Par défaut
    Salut
    Je n'ai pas de réponse en se qui concerne les XLL, par contre j'ai déjà eu soucis similaire de bug aléatoire sur un programme Delphi (sur un composant).
    Le crache ne se produisait jamais au même endroit ni au même moment, je mettais donc orienté vers un soucis de stockage en mémoire, je n'ai plus l'erreur exact en tête, mais j'avais forcé l'utilisation de la mémoire en utilisant des boucles et des savetomemory, (2Go de ram) autant dire que c'était toujours aléatoire, mais j'ai fini par trouver en faisant comme ça, il y a peut etre de meilleur solution pour utiliser la mémoire, comme les soft de test des barrettes.

    Je ne suis pas super claire, mais c assez flou, je ne me souvient plus trop du soucis. J'espère t'avoir donné une nouvelle piste.

    A++
    Qwaz

    MagicQwaz := Harry Potter la baguette en moins
    Le monde dans lequel on vit
    Ma page perso DVP
    Dernier et Seul Tutoriel : VBA & Internet Explorer
    Dernière contribution : Lien Tableau Structuré et UserForm
    L'utilisation de l’éditeur de message

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. windows script appelé par VBA excel
    Par nysduc dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 05/04/2011, 10h31
  2. Appeler une dll C# depuis VBA
    Par doudblast dans le forum Général Dotnet
    Réponses: 4
    Dernier message: 17/08/2009, 15h07
  3. [VBA-Excel] fonction appelée par plusieurs bouton : quel bouton ?
    Par thierryyyyyyy dans le forum Macros et VBA Excel
    Réponses: 7
    Dernier message: 27/06/2007, 18h24
  4. Réponses: 2
    Dernier message: 18/06/2007, 09h43
  5. [VB6] création dll win32 et appel par un autre programme
    Par Tankian85 dans le forum VB 6 et antérieur
    Réponses: 1
    Dernier message: 10/03/2006, 08h21

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo