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 :

Déclaration d'une librairie LpSolve


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Avril 2012
    Messages
    28
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2012
    Messages : 28
    Par défaut Déclaration d'une librairie LpSolve
    Bonjour à tous et j'espère que vous arriverez à me venir en aide ... C'est la première fois que je poste sur un forum

    Voici mon problème : Pour résoudre un problème d'optimisation combinatoire je fais appel à la librairie lpsolve depuis XL. Mon problème c'est que je n'arrive pas à donner un chemin relatif ( utilisable par tous les ordinateurs ) à ma librairie :

    Voici le code de déclaration:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    Private Declare Sub lpslink Lib "E:\datas\lpslink57.dll" _
    (ByRef direction As Long, ByRef xCount As Long, ByRef objOut As Double, _
    ByRef constCount As Long, ByRef constVec As Double, ByRef intCount As Long, _
    ByRef intVec As Long, ByRef binCount As Long, ByRef binVec As Long, _
    ByRef numBinSolns As Long, ByRef objVal As Double, ByRef solution As Double, _
    ByRef presolve As Long, ByRef computeSens As Long, ByRef sensFrom As Double, _
    ByRef sensTo As Double, ByRef duals As Double, ByRef dualsFrom As Double, _
    ByRef dualsTo As Double, ByRef scalex As Long, ByRef useDense As Long, _
    ByRef denseCol As Long, ByRef denseVal As Double, ByRef denseConstNrow As Long, ByRef denseCtr As Long, _
    ByRef useRW As Long, ByRef useRWFile As String, ByRef status As Long)
    Qui est un Path relatif . Avec cette déclaration tout fonctionne ( il me trouve la bibli)
    Cependant j'aimerai plutot utiulisé une déclaration du type ( j'ai enlevé tous les paramètres de la fonction pour lisibilité )

    Private Declare Sub lpslink Lib "datas\lpslink57.dll" ( si le dll est dans le dossier datas )

    ou encore plus simplement :

    Private Declare Sub lpslink Lib "lpslink57.dll" ( si mon fichier .dll est dans le path de mon Wbook)

    ce qui selon moi semble tout à fait faisable mais ne fonctionne PAS : message d'erreur : Lp_Solve link failed error 53: fichier introuvable

    J'ai déjà passé plus de 3 heures à essayer de trouver une solution mais sans succès.
    PS: J'aimerai si possible evité de mettre la library dans le dossier de windows ( pour des raisons de droits d'admin )

    Merci beaucoup par avance

  2. #2
    Expert confirmé
    Avatar de fring
    Homme Profil pro
    Engineering
    Inscrit en
    Février 2008
    Messages
    3 900
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 62
    Localisation : Belgique

    Informations professionnelles :
    Activité : Engineering

    Informations forums :
    Inscription : Février 2008
    Messages : 3 900
    Par défaut
    Citation Envoyé par canardav77 Voir le message
    Private Declare Sub lpslink Lib "lpslink57.dll" ( si mon fichier .dll est dans le path de mon Wbook)

    ce qui selon moi semble tout à fait faisable mais ne fonctionne PAS : message d'erreur : Lp_Solve link failed error 53: fichier introuvable
    Bonjour,

    Peut-être en ajoutant le chemin de recherche des Dll via SetDllDirectory à l'ouverture du classeur. Je n'ai jamais utilisé cette fonction donc à tester

  3. #3
    Membre averti
    Profil pro
    Inscrit en
    Avril 2012
    Messages
    28
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2012
    Messages : 28
    Par défaut
    Bonjour et encore merci pour votre réponse mais j'ai quand même des difficultés à la mettre en place :

    J'ai mis

    Private Declare Function SetDllDirectory Lib "Kernel32" Alias "SetDllDirectoryA"(ByVal path As String) As Long



    en haut de mes déclaration et ensuite j'ai dans mon sub appellé la fonction :

    SetDllDirectory(ThisWorkbook.path) = SetDllDirectoryA

    Mais ça n'a pas l'air de fonctionner . En même temps je ne suis pas certain de comprendre comment utiliser la fonction.
    Pour moi le but de cette manoeuvre est de dire va chercher les library dans ThisWorkbook.Path au lieu d'aller les chercher dans Kernel32
    Mais encore une fois je ne suis sur de rien.

    Merci encore pour votre aide et éclairez moi à nouveau dans les limites de vos connaissances

    Bonne journée à tous

  4. #4
    Expert confirmé
    Avatar de kiki29
    Homme Profil pro
    ex Observeur CGG / Analyste prog.
    Inscrit en
    Juin 2006
    Messages
    6 132
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Finistère (Bretagne)

    Informations professionnelles :
    Activité : ex Observeur CGG / Analyste prog.

    Informations forums :
    Inscription : Juin 2006
    Messages : 6 132
    Par défaut
    Salut, sur MSDN ou via Gog

  5. #5
    Expert confirmé
    Avatar de fring
    Homme Profil pro
    Engineering
    Inscrit en
    Février 2008
    Messages
    3 900
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 62
    Localisation : Belgique

    Informations professionnelles :
    Activité : Engineering

    Informations forums :
    Inscription : Février 2008
    Messages : 3 900
    Par défaut
    Citation Envoyé par canardav77 Voir le message
    j'ai dans mon sub appellé la fonction :

    SetDllDirectory(ThisWorkbook.path) = SetDllDirectoryA
    Je ne suis pas le grand vaudou des APIs mais il me semble que l'appel n'est pas correct
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    SetDllDirectoryA(ThisWorkbook.Path)
    Désolé mais dans ce domaine je ne peux que te donner des pistes de recherche.

Discussions similaires

  1. déclaration d'une dll
    Par lixahk5 dans le forum MFC
    Réponses: 8
    Dernier message: 17/02/2004, 12h28
  2. Creer et utiliser une librairie externe à l'exécutable
    Par multani dans le forum Autres éditeurs
    Réponses: 7
    Dernier message: 06/11/2003, 10h11
  3. Utiliser une librairie graphique
    Par Troopers dans le forum Linux
    Réponses: 6
    Dernier message: 22/08/2003, 11h22
  4. Réponses: 5
    Dernier message: 11/03/2003, 11h49
  5. inclure une librairie *.lib
    Par darkbm dans le forum C
    Réponses: 2
    Dernier message: 16/12/2002, 22h48

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