RESOLU - utiliser PTRSAFE avec excel 2007

discusagon

XLDnaute Nouveau
Bonjour,

J'ai un fichier sur un cloud que j'utilise sur différents postes et différentes versions d'excel.

Sur les postes avec excel supérieur ou égal à 2010 j'ai rencontré un problème lié à la version de Windows 32 ou 64 BIT que j'ai résolu en insérant PTRSAFE dans la déclaration des fonctions.

Or je travaille aussi occasionnellement sur un poste qui a une licence 2007 et la j'ai un code d'erreur dès l'ouverture du fichier car sur office 2007 et inférieur, PTRSAFE n'existe pas du tout.

J'ai pensé à détecter la version avec Application.Version et ça marche sur un autre fichier mais sur le fichier comportant PTRSAFE, c'est impossible à utiliser car j'ai le message d'erreur dès l'ouverture du fichier.

Des idées pour rentre mon fichier compatible pour ces différentes configurations?
 

Dranreb

XLDnaute Barbatruc
Bonjour.
Normalement avec #If VBA7 Then suvi de la version avec PtrSafe, #Else de la version sans, le tout terminé par #End If ça devrait passer. L'instruction avec peut être signalée en erreur quand même, vu qu'elle pourrait en principe complètement égarer le compilateur vu qu'il rencontre n'importe quoi de son point de vue, mais ce n'est pas gênant s'il ne s'égare pas, puisque cette partie n'est alors pas réellement compilée.
 

discusagon

XLDnaute Nouveau
Merci pour la réponse mais je n'y arrive pas.

En fait mes déclarations de fonction sont ne sont pas dans une sub mais au dessus de la sub donc je ne peux pas y insérer de condition if/then/else.

Et la popup d'erreur apparait dès que j'ouvre le fichier avant même l'ouverture des macros.

Je suis en train de pencher vers une autre solution un peu plus lourde :

1 fichier dans lequel je placerai une macro de test de version qui appelerait soit un tableur avec macro pour office 2007, soit un tableur avec macro pour versions supérieures.

Resterait ensuite à réussir à synchroniser les feuilles des deux fichiers.
 

Dranreb

XLDnaute Barbatruc
Bonjour.
Pour les directives de compilation conditionnelle, qui, comme vous l'aurez compris j'espère, doivent toujours commencer par un caractère dièse, il n'y a pas de règle par rapport à la structure du contenu, à l'intérieur ou à l'extérieur des procédures. Ça marche de haut en bas un point c'est tout, la structure de ce qui est retenu en fonction de ça est analysée après.
J'ai par exemple ça quelque part qui marche très bien :
VB:
#If MSRCochée Then
Function DicInvent(ByVal PlageOuTableau, Optional ByVal ColOrd As Long = 1, Optional ByVal ColDép As Long = 1) As Dictionary
#Else
Function DicInvent(ByVal PlageOuTableau, Optional ByVal ColOrd As Long = 1, Optional ByVal ColDép As Long = 1) As Object
#End If
Avec derrière le code de la Function unique annoncée par l'une ou l'autre instruction Sub
 

Discussions similaires

Réponses
3
Affichages
707
Réponses
17
Affichages
2 K