Déclarer une variable en fonction de la version d'excel

carlos

XLDnaute Impliqué
Supporter XLD
Bonjour,
J'ai créé un petit programme qui fonctionne sous excel 2007 mais qui bogue sur 2010 et 2013.
J'ai résolu mon problème mais la correction m'obligé a avoir 2 fichiers, un pour2007 et un autre pour 2010
Le probleme vient de la déclaration des variables différentes entre les 2 versions.

Version 2007:
Private Declare Function IsClipboardFormatAvailable& Lib "user32" (ByVal wFormat%)
Version 2010-2013
Private Declare PtrSafe Function IsClipboardFormatAvailable& Lib "user32" (ByVal wFormat%)

Si j'ouvre le fichier 2010 avec 2007 ça bogue et réciproquement
Comment faire pour n'avoir qu'un seul fichier?
Merci
Carlos
 

MJ13

XLDnaute Barbatruc
Re : Déclarer une variable en fonction de la version d'excel

Bonjour Carlos

Pour la version, tu peux tester avec:

Code:
VersionXL= Application.Version

Mais je me demande si tu ne vas pas avoir un bug sous Xl2007 avec Ptrsafe :confused:.
 

carlos

XLDnaute Impliqué
Supporter XLD
Re : Déclarer une variable en fonction de la version d'excel

Merci pour vos réponses.
Lorsque je teste :
If Vba7 Then
Private Declare PtrSafe Function IsClipboardFormatAvailable& Lib "user32" (ByVal wFormat%)
Else
Private Declare Function IsClipboardFormatAvailable& Lib "user32" (ByVal wFormat%)
End If
J'ai le message d'erreur:
Erreur de compilation.
Instruction incorrecte à l’extérieur d'une procédure.

Savez vous comment déclarer en private dans une procédure?
 

Dranreb

XLDnaute Barbatruc
Re : Déclarer une variable en fonction de la version d'excel

Bonjour.

Il n'y a pas à déclarer des procédures à l'intérieur d'autres procédures. Ça existait en PL1, ça n'a jamais existé en VBA. Toujours globales les procédures. Que ce soit par Sub, Function etc. ou par Declare.

Et puis c'est #If Vba7 Then, #Else, #End If. Ce sont des directives de compilations, pas des instructions exécutables.
 
Dernière édition:

NezQuiCoule

XLDnaute Occasionnel
Re : Déclarer une variable en fonction de la version d'excel

Attention, laissez bien les # présents dans le code, utilisez
Code:
#If VBA7 Then
Private Declare PtrSafe Function IsClipboardFormatAvailable& Lib "user32" (ByVal wFormat%)
#Else
Private Declare Function IsClipboardFormatAvailable& Lib "user32" (ByVal wFormat%)
#End If

Il faut copier ce code au début du module, à l'extérieur de toute procédure (d'où l'importance du symbole # avant les instructions)
 

Discussions similaires

Statistiques des forums

Discussions
312 195
Messages
2 086 082
Membres
103 113
dernier inscrit
jlaussenac