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 :

Problème de déclaration d'API compatible 64bit et 32 bit [XL-2010]


Sujet :

Macros et VBA Excel

  1. #1
    Membre du Club
    Homme Profil pro
    Inscrit en
    Septembre 2012
    Messages
    7
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Septembre 2012
    Messages : 7
    Par défaut Problème de déclaration d'API compatible 64bit et 32 bit
    Bonjour,

    J'ai un petit soucis avec un code en VBA. Il doit pouvoir fonctionner via VBA 7 et via les versions antérieures.

    Il s'agit de récupérer les dimensions de l'écran via une API. Au moment de la déclaration de l'API, j'ai fait une déclaration conditionnée par la version de VBA utilisée, mais Excel n'arrive pas à compiler le code : j'ai une erreur me disant qu'il faut mettre à jour le code pour qu'il fonctionne sur un système 64bit, ce qui est précisément ce que j'essaie de faire...

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    Option Explicit
     
    'Déclaration de l'API
    #If VBA7 Then
        Private Declare PtrSafe Function GetSystemMetrics Lib "USER32" (ByVal nIndex As Long) As Long
    #Else
        Private Declare Function GetSystemMetrics Lib "USER32" (ByVal nIndex As Long) As Long
    #End If
     
    '####################################################
    '####################################################
    Function Taille_Ecran()
    '----------Commentaire----------------------------------------------------
    '
    'Permet de récupérer la tailler de l'écran de l'utilisateur. En sortie, une liste de 5 paramètres :
        'Sortie (1): Largeur
        'Sortie (2): Hauteur
        'Sortie (3): rapport
        'Sortie (4): Activation scroll (vrai ou faux)
        'Sortie (5) : Erreur : vrai ou faux
     
    '----------Déclaration des variables locales---------------------------------
    Dim Largeur  As Integer
    Dim Hauteur As Integer
    Dim Rapport_HL As Double
    Dim Activation_Scroll As Boolean
    Dim Erreur_Recup_Donnee As Boolean
    Dim Tableau_Sortie() As Variant
     
    '----------Initialisation des variables locales--------------------------------
     
    Erreur_Recup_Donnee = False
    Activation_Scroll = False
    ReDim Tableau_Sortie(5)
     
    '----------Code-----------------------------------------------------------
     
    On Error GoTo Gestion_erreur
     
    Largeur = GetSystemMetrics(0)
    Hauteur = GetSystemMetrics(1)
    Rapport_HL = Largeur / Hauteur
     
    Tableau_Sortie(1) = Largeur
    Tableau_Sortie(2) = Hauteur
    Tableau_Sortie(3) = Rapport_HL
    Tableau_Sortie(4) = Activation_Scroll
    Tableau_Sortie(5) = False
     
    Taille_Ecran = Tableau_Sortie()
     
    Exit Function
     
    Gestion_erreur:
     
    Tableau_Sortie(1) = 0
    Tableau_Sortie(2) = 0
    Tableau_Sortie(3) = 0
    Tableau_Sortie(4) = False
    Tableau_Sortie(5) = True
     
    Taille_Ecran = Tableau_Sortie()
     
    End Function

    Si quelqu'un à une idée de ce qui cloche, je suis preneur ! Merci d'avance.

  2. #2
    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, voir Développer avec Office 64 bits , si ce n'est déjà fait.
    La compatibilité est ascendante ( en principe ) mais pas l'inverse.

  3. #3
    Inactif  

    Homme Profil pro
    cuisiniste
    Inscrit en
    Avril 2009
    Messages
    15 374
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : cuisiniste
    Secteur : Bâtiment

    Informations forums :
    Inscription : Avril 2009
    Messages : 15 374
    Billets dans le blog
    8
    Par défaut heu
    bonjour

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    Taille_Ecran = Tableau_Sortie(?????) ' c'est ici que ca ne va pas il faut quelque chose entre les parenthezes  aucune variable tableau commence par rien c'est forcement 0 ou plus dans ton cas se sera 1,2,3,4,5 au choix
    au plaisir
    mes fichiers dans les contributions:
    mail avec CDO en vba et mail avec CDO en vbs dans un HTA
    survol des bouton dans userform
    prendre un cliché d'un range

    si ton problème est résolu n'oublie pas de pointer : : ça peut servir aux autres
    et n'oublie pas de voter

  4. #4
    Membre du Club
    Homme Profil pro
    Inscrit en
    Septembre 2012
    Messages
    7
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Septembre 2012
    Messages : 7
    Par défaut
    Bonsoir,

    Merci pour ces réponses.

    Pour être un peu plus précis dans ma demande, le problème ne vient pas de la fonction "Taille écran". Elle renvoie bien un tableau variant avec les quelques paramètres définis dans la fonction (hauteur, largeur, etc.). je l'avais simplement mis pour contextualiser le problème.

    Le problème se pose lors de la déclaration de l'API avec une condition sur la version de VBA installée sur le système de l'utilisateur. J'étais allé voir "Développer avec Office 64 bits" et il été conseillé de faire comme ci-dessous. Le truc c'est que quand je tape la partie destinée aux versions antérieures de VBA, j'ai immédiatement un sur-lignage en rouge me disant que VBA ne peut pas compiler car il faut rajouter un "PtrSafe " après "declare". Et c'est bien là le problème, vu que que les versions antérieure ne gère pas ce "PtrSafe"...

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    'Déclaration de l'API
    #If VBA7 Then
        Private Declare PtrSafe Function GetSystemMetrics Lib "USER32" (ByVal nIndex As Long) As Long
    #Else
        Private Declare Function GetSystemMetrics Lib "USER32" (ByVal nIndex As Long) As Long
    #End If
    Pour patricktoulon: la fonction fonctionne très bien si je modifie la déclaration de l'API de sorte qu'elle ne soit plus compatible qu'avec VBA 7 (voir ci-dessous). Après, effectivement, je ne sais pas si c'est très orthodoxe comme code, mais jusqu'a présent, j'utilise souvent des fonctions qui revoient des tableaux sans jamais avoir eu de problèmes.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    'Déclaration de l'API
    '#If VBA7 Then
        Private Declare PtrSafe Function GetSystemMetrics Lib "USER32" (ByVal nIndex As Long) As Long
    '#Else
        'Private Declare Function GetSystemMetrics Lib "USER32" (ByVal nIndex As 'Long) As Long
    '#End If

  5. #5
    Membre du Club
    Homme Profil pro
    Inscrit en
    Septembre 2012
    Messages
    7
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Septembre 2012
    Messages : 7
    Par défaut
    Ok...

    Alors je me rends compte que des fois, il ne faut pas se préoccuper les message d'erreurs.

    Quand sous VBA7 on tape :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    'Déclaration de l'API
    #If VBA7 Then
        Private Declare PtrSafe Function GetSystemMetrics Lib "USER32" (ByVal nIndex As Long) As Long
    #Else
        Private Declare Function GetSystemMetrics Lib "USER32" (ByVal nIndex As Long) As Long
    #End If
    La ligne 5 apparaît en rouge avec un message d'erreur disant :

    "Erreur de compilation

    Le code contenu dans ce projet doit être mis à jour pour fonctionner sur les systèmes 64 bits. Vérifier et mettez à jour les instructions Declare, puis marquez-les avec l'attribut PrtSafe."

    La VRAI erreur consiste à ne pas tester le code, puisqu'en fait, malgré cette erreur de compilation, ça tourne très bien tant en 64 bit qu'en 32 bit....

    Bref.

    Merci tout de même à vous pour vos réponses!

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

Discussions similaires

  1. problème de déclaration d'API
    Par wexperience dans le forum VB 6 et antérieur
    Réponses: 2
    Dernier message: 26/09/2008, 09h06
  2. (Problème) Utilisation de l'API mySQL [Delphi 2005 Perso]
    Par will-scs dans le forum Bases de données
    Réponses: 2
    Dernier message: 08/08/2005, 18h26
  3. Réponses: 11
    Dernier message: 29/04/2005, 19h45
  4. [VB.NET] Problème pour Marshaliser une API
    Par lamalice dans le forum Windows Forms
    Réponses: 2
    Dernier message: 04/03/2005, 10h01
  5. Problème de déclaration de segment avec use32
    Par le mage tophinus dans le forum Assembleur
    Réponses: 2
    Dernier message: 10/01/2003, 10h17

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