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 :

[64 bit] Excel VBA & OpenGL


Sujet :

Macros et VBA Excel

  1. #1
    Invité
    Invité(e)
    Par défaut
    Bonjours tout le monde,

    Je suis nouveau sur le forum.

    Je voudrai m'initier à l'OPENGL sur Excel bien que je sois novice en terme de VBA (j'ai commencé il y a 2 mois environ), je connais bien Excel (Tableur) en lui-même et j'ai assez vite appris le VBA (à un niveau de novice j'entends).

    J'ai donc regardé "l'excellent" article dispo sur ce site même intitulé :
    Découvrez OpenGL 1.1 en VB6/VBA

    Seulement voilà, je bloque dès le début.
    "Impossible de charger la librairie freeglut"

    Pas moyen de charger freeglut.dll
    Enfaite, je ne sais pas où placer cette dll

    J'ai bien remplacé le "CurrentProject.Path" par "ThisWorkBook.Path", mais rien n'y fait.

    Donc, où faut il placer cette dll pour que le VBA l'a trouve ?

    Merci.


    P.S.: Je précise que je suis en x64 et que j'ai bien remplacé les "Declare" par "Declare PtrSafe" qui est nécessaire en x64.

    J'ai une petite question subsidiaire:

    Peut-on faire appel à DirectX sous Excel VBA ?
    Dernière modification par AlainTech ; 13/06/2013 à 06h48. Motif: Fusion de 2 messages

  2. #2
    Membre expert
    Profil pro
    Inscrit en
    Février 2007
    Messages
    2 267
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2007
    Messages : 2 267
    Points : 3 663
    Points
    3 663
    Par défaut
    Bonjour,

    quand tu parles de x64 tu parles de windows ou d'excel ?
    Pour excel il faut installer la version 32 bits même si tu as windows 64 bits.
    Excel 64 bits est réservée à des besoins bien spécifiques : bases de données énormes et à plein d'incompatibilités.
    Par exemple impossible d'utiliser les contrôles classiques qui ont des ocx souvent en 32 bits.
    Ton problème rejoint sans doute ces restrictions si tu as installé cette version.

    eric

  3. #3
    Invité
    Invité(e)
    Par défaut
    Bonjour,
    Merci pour cette réponse.

    Il s'agit de Excel 2013 64 bit. On ne peux pas préciser la version lors de la création du message, ce qui est dommage puisque il y a XL-2010-x64 et XL-2013-x64 en plus des autres versions.

    Donc, il y aurai de forte chance pour que ça provienne du 64 bit ?

    Si je saute l'étape du chargement de freeglut.dll, j'ai:
    erreur 48
    Fichier introuvable: freeglut'

    Dans l'article, il est dit qu'en mettant freeglut dans un certain répertoire (Lequel ?), il n'est pas nécessaire de charger freeglut.

    Enfaite, je ne sais pas de quel répertoire ils parlent lorsqu'ils disent:

    Placez la librarie freeglut.dll dans le même répertoire que l'application Office ou le projet VB6.
    ou

    Notez qu'on a placé la librairie freeglut.dll dans le même répertoire que l'application.
    Pour appeler les fonctions de cette librairie, il faut donc d'abord la charger.
    Si on avait placé cette librairie dans le répertoire système de Windows, il n'aurait pas été nécessaire de la charger.

  4. #4
    Membre émérite
    Homme Profil pro
    Inscrit en
    Décembre 2011
    Messages
    1 186
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Décembre 2011
    Messages : 1 186
    Points : 2 502
    Points
    2 502
    Par défaut
    Bonjour,


    Citation Envoyé par Nouveau2 Voir le message
    Dans l'article, il est dit qu'en mettant freeglut dans un certain répertoire (Lequel ?), il n'est pas nécessaire de charger freeglut.

    Enfaite, je ne sais pas de quel répertoire ils parlent lorsqu'ils disent:
    Il est possible que les appels à la DLL échoue du fait que la version Excel est une version 64 bits.
    Mais pour l'instant, le problème est que l'application ne trouve pas la DLL.

    Pour information, sur tout système Windows (ce qui suit est vrai pour Excel, mais aussi pour tous les exécutables)
    les DLL sont d'abords cherchées dans le dossier où se trouve l'application lancée (donc ici dans le dossier où se trouve Excel),
    puis dans un des dossiers du PATH.

    A vérifier, mais pour un XL2013 64 bits :
    - le dossier où se trouve Excel doit être %programfiles%\Microsoft Office\Office16
    - pour voir les dossiers du PATH, tu peux faire :
    touches <Windows> + <R>
    tape echo %path% puis <Entrer>

    Donc :
    - soit tu modifie la variable d'environnement PATH pour y ajouter ton propre dossier de travail,
    (voir le Panneau de configuration Système -> Paramètres avancés -> Variables d'environnement)
    - soit tu copie la DLL dans un dossier couramment utilisé C:\Windows\System32.

    Chacune de ces méthodes doit fonctionner pour que VBA trouve la DLL.

    A+

    P.S. Un p'tit conseil pour avoir plus de chance d'avoir une réponse sur le forum :
    un message à 0 réponses à plus de chance d'être vu. Donc vas-y molo sur les <UP>

  5. #5
    Membre expert
    Profil pro
    Inscrit en
    Février 2007
    Messages
    2 267
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2007
    Messages : 2 267
    Points : 3 663
    Points
    3 663
    Par défaut
    Bonjour,

    sans rien retirer à ce qu'à dit BlueMonkey au sujet des path, je te conseille fortement de désinstaller office 64 bits et d'installer office 32 bits. Tu as 2 packs différents, il faut télécharger le bon.
    A lire : http://technet.microsoft.com/fr-fr/l.../ee681792.aspx

    eric

  6. #6
    Invité
    Invité(e)
    Par défaut
    Merci beaucoup beaucoup pour vos réponse.

    Enfaite rien ne marchait, j'avais mis freeglut.dll dans casiment tous les répertoires, et après beaucoup d'acharnement et de recherche, j'ai téléchargé 2 autres versions de freeglut, et à l'instant même, sans même y croire vraiment, j'ai réussi à avoir une fenêtre qui s'ouvre, mais uniquement en ayant lancé la Macro en hométant la 1ère ligne de code (chargement de freeglut). Je ne sais pas encore pourquoi ça à marché. J'ai fait comme conseillé dans le fichier d'aide de freeglut, placé 2 répertoire dans
    C:\Program Files\Common Files\MinGW
    C:\Program Files\Common Files\MSVC
    en mettant le lib et le include donné avec freeglut, mais c'est lorsque j'ai mis le freeglut x64 dans le SysWOW que ça à marché. Marché entre guillemet pour l'instant, mais ce qui comptais pour moi était d'avoir au minimum une fenêtre qui s'ouvre.


    La 1ère étape du code sinon ne fonctionne pas, il faut passer directement à la 2ème ligne (' Initialisation de la librairie).


    P.S.: La fenêtre est apparu 1 seul fois, je l'ai fermé, puis ne veux plus réapparaitre, mais il n'y a plus d'erreur de code sur la 2ème ligne (' Initialisation de la librairie), puis 3ème, mais aucune fen^tre ne s'ouvre, même en fermant le fichier Excel, puis en le réouvrant ensuite.

    Je vais creuser un peu plus.

    @eriiic,

    Non, le 64 bit est très bien. et j'ai des simulations personnelles futurs, qui lorsque je commencerai à bien me servir du VBA, dépasseront les 2 Go permis par le x86. L'une de mes simu me prends déjà 700 Mo en RAM alors que je souhaiterai ajouter 4 à 16 fois plus de données dans mes feuilles de calculs.

    Mais merci du conseil cela dit.

    Bon, j'ai supprimé la dll en version x64 du SysWOW64, et ça marchait encore, puis je l'ai supprimer du Systeme32 et ça ne marche plus. Donc ça venait de la version de la dll. Celle qu'il faut est la version 2.8.1 issu du freeglut 2.8.1 MinGW Package situé dans le répertoire:
    freeglut-MinGW-2.8.1-1.mp\freeglut\bin\x64
    qu'il faut ensuite mettre dans le C:\Windows\System32


    P.S.:
    Finalement, j'ai essayé avec l'autre version (freeglut 2.8.1 MSVC Package), et voici ce que j'ai:

    Elle marche même après l'avoir fermé. Je vais creuser pour la suite des événements.

    A+
    Images attachées Images attachées  
    Dernière modification par AlainTech ; 13/06/2013 à 06h49. Motif: Fusion de 2 messages

  7. #7
    Membre expert
    Profil pro
    Inscrit en
    Février 2007
    Messages
    2 267
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2007
    Messages : 2 267
    Points : 3 663
    Points
    3 663
    Par défaut
    Re,

    Non, le 64 bit est très bien
    Ok, tant que tu es au courant de ses plus et de ses moins pour faire le bon choix.

    Si ça peut t'éclairer au niveau des dll, sur un système 64 bits :
    - c:\windows\system32\ pour les dll et ocx 64 bits
    - c:\windows\syswow64\ pour les dll et ocx 32 bits

    C'est troublant et ça parait être à l'envers mais syswow64 veut dire 'Windows 32-bit on Windows 64-bit'.

    eric

  8. #8
    Invité
    Invité(e)
    Par défaut
    Oui, c'est vrai qu'en y réflichissant, le SysWOW64 est un émulateur 32 bit vers 64 bit pour rendre compatible les applications 32 bit sur un système 64 bit (enfin, si je ne me trompe pas).

    Maintenant, il va falloir gérer et placer les types de variables LongLong ou LongPtr là où il en faut, et pour l'instant, c'est pas gagné. J'ai l'impression aussi que ce ne sera pas suffisant.

    Certains qui s'essayeront à l'OPENGL sous Excel 64 bit seront dans la mouïse comme moi avec les déclaration, en effet le 64 bit requière la mention PtrSafe après le mot "Declare", mais ce n'est pas tout, sous 64 bit, certaines variable requière un LongPtr au lieu d'un Long qui peut prendre en 64 bit des valeurs LongLong introduit avec le 64 bit.

    1/ Lire le dossier incontournable Découvrez OpenGL 1.1 en VB6/VBA

    2/ Télécharger freeglut 2.8.1 MSVC Package dans lequel se trouvera un dossier x64.

    3/ Télécharger Le pack de module VB pour OpenGL issue du Tutoriel (de l'étape 1).

    4/ Mettre freeglut.dll (celui situé dans le dossier 64 bit issue de l'étape 2) dans:
    C:\Windows\System32

    5/ Lorsque vous importerez les 3 Modules du Pack (de l'étape 3) dans 3 Modules Excel VBA (ModOpenGL_1_1, ModOpenGLFreeGlut.bas, et ModOpenGLTools), il faudra modifier tous les Declare par Declare PtrSafe.
    Un editeur de texte fait l'affaire, mais à la main, c'est la galère.

    2 exemples dans le Module ModOpenGLFreeGlut (' Window-Specific Callback Registration Functions):
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    Public Declare Sub glutDisplayFunc Lib "freeglut" (ByVal fnPtr As Long)
    Public Declare Function glutCreateWindow Lib "freeglut" (ByVal title As String) As Long
    doit devenir après modif:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    Public Declare PtrSafe Sub glutDisplayFunc Lib "freeglut" (ByVal fnPtr As LongPtr)
    Public Declare PtrSafe Function glutCreateWindow Lib "freeglut" (ByVal title As String) As LongPtr
    Si sur la déclaration de GlutDisplayFunc, vous ne remplacez pas (ByVal fnPtr As Long) par (ByVal fnPtr As LongPtr), un message d'erreur VBA :
    "erreur de compilation: incompatibilité de type"
    apparaitra.

    Sur l'autre fonction "glutCreateWindow", si le As Long n'est pas remplacé par As LongPtr, cela fera tout simplement beuguer Excel, et il fermera.

    6/ Reste à utiliser ensuite les bons type de variable sur toutes les lignes de code. Toutes les Long ne doivent pas être remplacer par tout par LongPtr de manière systématique (c'est ça le pire). Mais si au lancement d'une ligne, le VBA affiche:
    " Erreur de compilation, Incompatibilité de type"
    C'est certainement qu'un type de variable n'est pas bon.

    D'une manière général, tous les "ByVal fnPtr As Long" devront être remplacé par "ByVal fnPtr As LongPtr", je pense aussi que tous les "ByVal hdc As Long" devront être "ByVal hdc As LongPtr" également (mais pas encore testé).


    Voilà, bonne chance pour ceux qui utiliseront le x64.
    Images attachées Images attachées  
    Dernière modification par AlainTech ; 13/06/2013 à 06h50. Motif: Fusion de 2 messages

  9. #9
    Membre expert
    Profil pro
    Inscrit en
    Février 2007
    Messages
    2 267
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2007
    Messages : 2 267
    Points : 3 663
    Points
    3 663
    Par défaut
    Merci pour ta compil.
    En complément une page de msdn qui présente ces nouveaux types et les modifs à faire pour tourner sur Win64 bits :
    http://msdn.microsoft.com/library/office/gg264421.aspx

    eric

  10. #10
    Invité
    Invité(e)
    Par défaut
    En français:
    http://msdn.microsoft.com/fr-fr/libr.../gg264421.aspx
    http://msdn.microsoft.com/fr-fr/libr...ice.14%29.aspx


    Lire aussi les quelques milliers de lignes de ce fichier texte peut apporter une aide http://www.microsoft.com/en-us/downl...s.aspx?id=9970

    Exemples de modif selon Microsoft (pas encore essayé):
    32 bit:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    ' Gdi32
    Private Declare Function ChoosePixelFormat Lib "gdi32" (ByVal hdc As Long, ppfd As PIXELFORMATDESCRIPTOR) As Long
    Private Declare Function SetPixelFormat Lib "gdi32" (ByVal hdc As Long, ByVal iPixelFormat As Long, ppfd As PIXELFORMATDESCRIPTOR) As Long
    Private Declare Function SwapBuffers Lib "gdi32" (ByVal hdc As Long) As Long
    64 bit:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    ' Gdi32 (selon Microsoft : Win32API_PtrSafe)
    Declare PtrSafe Function ChoosePixelFormat Lib "gdi32" Alias "ChoosePixelFormat" (ByVal hDC As LongPtr, pPixelFormatDescriptor As PIXELFORMATDESCRIPTOR) As Long
    Declare PtrSafe Function SetPixelFormat Lib "gdi32" Alias "SetPixelFormat" (ByVal hDC As LongPtr, ByVal n As Long, pcPixelFormatDescriptor As PIXELFORMATDESCRIPTOR) As Long
    Declare PtrSafe Function SwapBuffers Lib "gdi32" Alias "SwapBuffers" (ByVal hDC As LongPtr) As Long
    Même si je pense que ça pourrai être plutôt:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    ' Gdi32 (potentiellement x64)
    Declare PtrSafe Function ChoosePixelFormat Lib "gdi32" Alias "ChoosePixelFormat" (ByVal hDC As LongPtr, pPixelFormatDescriptor As PIXELFORMATDESCRIPTOR) As LongLong
    Declare PtrSafe Function SetPixelFormat Lib "gdi32" Alias "SetPixelFormat" (ByVal hDC As LongPtr, ByVal n As Long, pcPixelFormatDescriptor As PIXELFORMATDESCRIPTOR) As LongLong
    Declare PtrSafe Function SwapBuffers Lib "gdi32" Alias "SwapBuffers" (ByVal hDC As LongPtr) As LongLong
    Ou bien As LongPtr au lieu du LongLong.
    Je n'ai pas creusé plus.

    http://www.jkp-ads.com/articles/apideclarations.asp

    Il faudrai pour bien faire arriver à trouver une méthode automatique qui permettrai de faire les déclarations avec des #if Win64 then, #if VBA7 then et essayer de trouver une liste des types de données qui requière une modif parce que tous ne sont pas en LongPtr.

    Qu'est-ce que les Alias sinon ?

  11. #11
    Membre habitué
    Homme Profil pro
    Technicien maintenance
    Inscrit en
    Juillet 2012
    Messages
    94
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Technicien maintenance
    Secteur : Industrie

    Informations forums :
    Inscription : Juillet 2012
    Messages : 94
    Points : 173
    Points
    173
    Par défaut
    D'après msdn, il s'agit d'un moyen pour renommer les fonctions/méthodes incluses dans un DLL dans son code. En appelant la fonction la fonction SwapBuffers par exemple, le code sait qu'il faut aller chercher l'alias (en l'occurence le nom est identique, mais il pourrait être différent).

  12. #12
    Invité
    Invité(e)
    Par défaut
    Oups, je pensais t'avoir répondu.

    Merci pour l'info. Désolé de ne pas t'avoir répondu plus tôt.
    Dernière modification par AlainTech ; 15/06/2013 à 13h35. Motif: Suppression de la citation

  13. #13
    Invité
    Invité(e)
    Par défaut
    Bonjours,

    J'ai un petit problème concernant l'appel des touches clavier et souris.
    Dans cette phrase:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Public Const GLUT_KEY_F1 = &H1&
    Le " &H1& " correspond au chiffre 1 ?

    C'est ce qui m'a semblé. En quel langage correspond &H1& ? Est-ce les même chiffres en 32 bit et en 64 bit ?

    Dans mon freeglut_std.h (que je n'utilise pas car c'est un autre langage encore), j'ai:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    #define  GLUT_KEY_F1                        0x0001
    Sinon, dans cette phrase:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Public Declare PtrSafe Sub glutJoystickFunc Lib "freeglut" (ByVal fnPtr As LongPtr, ByVal pollInterval As LongPtr)
    A quoi correspond le fnPtr ? Qu'est-ce que comprend le VBA en lisant ça, ça le renvoie vers quoi ?

    Merci.
    Dernière modification par Domi2 ; 18/06/2013 à 07h36. Motif: Lien non pérenne

  14. #14
    Invité
    Invité(e)
    Par défaut
    Bonjour,

    Est-ce qu'un modérateur pourrai transférer ce topic vers ce forum http://www.developpez.net/forums/f53...hiques/opengl/ s'il vous plais ? Histoire d'avoir un peu plus de réponse. Je crains que ce forum ne sois pas adapté.

  15. #15
    Membre expert
    Profil pro
    Inscrit en
    Février 2007
    Messages
    2 267
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2007
    Messages : 2 267
    Points : 3 663
    Points
    3 663
    Par défaut
    Bonjour,

    Le " &H1& " correspond au chiffre 1 ?
    Oui, c'est simplement la notation pour indiquer que le nombre est écrit en hexadécimal. C'est vrai que pour 1 ça ne saute pas aux yeux :-)

    Pour le reste comme tu changes de sujet pourquoi ne pas démarrer une nouvelle question dans l'autre forum ?

    eric

  16. #16
    Invité
    Invité(e)
    Par défaut
    Salut,

    Merci, c'est ce que vais faire alors.

Discussions similaires

  1. [Excel VBA] Boucler sur un userform
    Par tpv72 dans le forum Macros et VBA Excel
    Réponses: 1
    Dernier message: 21/09/2005, 01h57
  2. [Excel][VBA][Java] Appeler un objet java
    Par ay_pepito dans le forum Macros et VBA Excel
    Réponses: 5
    Dernier message: 29/07/2005, 15h46
  3. [excel vba]case à cocher dans excel pour plusieurs lignes
    Par fcoisb dans le forum Macros et VBA Excel
    Réponses: 4
    Dernier message: 02/03/2005, 11h23
  4. EXcel VBA analyse de sharpe
    Par vanima dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 22/02/2005, 13h07
  5. [Excel - VBA] Problème de suppression de lignes...
    Par beholder2 dans le forum Macros et VBA Excel
    Réponses: 8
    Dernier message: 28/01/2005, 17h27

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