Macros Office 2019 vs Office 2011 et Chemins d'accès

r e m y

Membre vénérable
Club MacG
4 Novembre 2000
41 522
4 324
60
St Germain en Laye - FRANCE
Bonjour à tous

Il y a un bon moment que je ne suis pas passé sur ces forums.
J'y reviens aujourd'hui pour un problème de macros Excel et de chemins d'accès aux fichiers.

J'ai des fichiers Excel contenant des macros que j'utilise alternativement sur un vieux Mac limité à MacOS X ElCapitan et ne pouvant donc utiliser qu'Office 2011 et sur un Mac récent sous Mojave et Office 2019.

Avec Office 2011 le séparateur dans les chemins d'accès aux fichiers est : alors que depuis Office 2016, le séparateur est /

Comment modifier mes macros pour qu'elles fonctionnent aussi bien sous Excel 2011 qu'Excel 2019

On m'a conseillé d'utiliser la "propriété PathSeparator de l'objet application"... Concrètement, quelle ligne ajouter? et puis-je le faire dans le classeur de macros ThisWorkbook pour que ça s'applique à toutes les macros du classeur?

Un grand merci d'avance, et en passant... Une très belle année 2019 à tous!
 

Aliboron

Chercheur de son
Club MacG
1 Janvier 2008
14 268
1 062
Toulouse.cong
faq.office.macintosh.free.fr
Avec Office 2011 le séparateur dans les chemins d'accès aux fichiers est : alors que depuis Office 2016, le séparateur est /

Comment modifier mes macros pour qu'elles fonctionnent aussi bien sous Excel 2011 qu'Excel 2019

On m'a conseillé d'utiliser la "propriété PathSeparator de l'objet application"... Concrètement, quelle ligne ajouter ? et puis-je le faire dans le classeur de macros ThisWorkbook pour que ça s'applique à toutes les macros du classeur ?
Il n'y a pas que le séparateur. Mais, en effet, un premier point utile, c'est bien de faire appel à la constante Application.PathSeparator dans les macros. Mais il faudra aussi adapter le début des chemins d'accès qui sera, selon le cas de type "Macintosh HD:Users:" ou "/Users/". Comme tu t'en doutes, ça complique forcément un peu la tâche, il va falloir remettre la main à la pâte et adapter les macros. Par exemple en créant une variable MonSep = Application.PathSeparator à utiliser partout où ce sera nécessaire. Mais probablement aussi en passant par de la compilation conditionnelle, basée sur la version d'Excel concernée. Un petit exemple de macro :
Bloc de code:
Sub TestVersion()
    MonSep = Application.PathSeparator
    #If MAC_OFFICE_VERSION >= "15" Then
        ' code pour les versions 2016 et 2019, exemple :
        MsgBox ("Excel 2016 ou 2019 !")
        MonChemin = "/Users/nomabrégé/"
    #Else
        ' code pour les versions 2011 et 2004, exemple :
        MsgBox ("Excel 2011 voire moins...")
        MonChemin = "Macintosh HD:Users:nomabrégé:"
    #End If
    Workbooks.Open MonChemin & "Desktop" & MonSep & "Mon dossier" & MonSep & "Mon classeur.xlsx"
End Sub

Pas mal d'informations utiles sur les pages de Ron de Bruin...

Et bonne année, bien sûr ! ;)
 

r e m y

Membre vénérable
Club MacG
4 Novembre 2000
41 522
4 324
60
St Germain en Laye - FRANCE
Merci beaucoup Aliboron.
Je vais potasser ça et voir à créer ce code conditionnel testant la version d'Excel en tête de mes macros et les modifier une à une pour utiliser ensuite la variable "MonChemin" (ou quel que soit le nom que je choisirai).

Une très bonne année à tous encore une fois

(et je retourne sous ma tente :coucou: Macomaniac)
 

r e m y

Membre vénérable
Club MacG
4 Novembre 2000
41 522
4 324
60
St Germain en Laye - FRANCE
J'ai bien progressé et je devrais résoudre mon petit problème de compatibilité 2011/2019 de mes macros.

J'ai un petit souci collatéral toutefois...

Dans les multiples essais d'ouverture de l'un des fichiers tantôt sur Excel 2011 tantôt sur Excel 2019, alors que le fichier était ouvert par 2019, Excel a planté puis s'est réouvert en proposant de récupérer le fichier. Ce que j'ai fait.
Depuis dès que je tente de l'ouvrir par Excel 2011, j'ai un message "ce fichier est verrouillé en modification par un autre utilisateur. Voulez vous l'ouvrir en lecture seule".
Pour ne plus avoir ce message et l'ouvrir normalement, je dois soit modifier le nom du fichier, soit le changer d'emplacement sur le disque dur.

Il doit y avoir quelque part, soit un fichier temporaire soit un fichier de préférence d'excel (créé lors du plantage d'Excel 2019 mais auquel accède également Excel 2011) qui garde trace du chemin d'accès complet de ce fichier ayant connu un crash d'Excel. Je ne trouve pas où.

(Pour info, je fais mes tests sur un seul et même Mac ayant les 2 version 2011 et 2019 installées)

Ce n'est pas très grave car en ayant modifié le nom du fichier j'ai retrouvé un accès normal, mais j'aimerais comprendre et trouver comment faire le ménage au cas où ce problème se reproduise un jour.

Une idée?
 
Dernière édition:

r e m y

Membre vénérable
Club MacG
4 Novembre 2000
41 522
4 324
60
St Germain en Laye - FRANCE
Une simple macro testant la version d'Excel pour définir le séparateur me pose problème

Sub TestVersion()
MonSep = Application.PathSeparator
#If MAC_OFFICE_VERSION < "15" Then
MonSep = ":"
#Else
MonSep = "/"
#End If
Workbooks.Open Filename:="Disque dur" & MonSep & "Users" & MonSep & "comptetest" & MonSep & "Desktop" & MonSep & "Test.xls"
End Sub

Si j'ouvre le fichier avec Excel 2011, la macro fonctionne et ouvre le fichier Test.xls
Si je l'ouvre avec Excel 2019, j'obtiens un message d'erreur
ErrorVBA400.jpg

Qu'est-ce qui ne lui plaît pas? Je n'ai pas choisi le bon séparateur avec / ?
 

Aliboron

Chercheur de son
Club MacG
1 Janvier 2008
14 268
1 062
Toulouse.cong
faq.office.macintosh.free.fr
Dans un chemin d’accès POSIX, on ne met pas le nom du disque de démarrage. C’est du type /Users/comptetest/Desktop/Test.xlsx.
Raison pour laquelle, dans mon exemple, j’avais inclus la variable "MonChemin" dans la partie conditionnelle...

Dans ton exemple, tu y as mis le séparateur, ce qui est totalement inutile, puisqu’il est déjà défini en premier par MonSep = Application.PathSeparator. Il est donc forcément adapté au contexte.

En fait tu pourrais faire une simple condition :
Bloc de code:
Sub TestVersion()
   MonSep = Application.PathSeparator
   If MonSep = "/" Then
        ' code pour les versions 2016 et 2019, exemple :
        MsgBox ("Excel 2016 ou 2019 !")
        MonChemin = "/Users/comptetest/Desktop/Test.xlsx"
   Else
        ' code pour les versions 2011 et 2004, exemple :
        MsgBox ("Excel 2011 voire moins...")
        MonChemin = "Disque dur:Users:comptetest:Desktop:Test.xlsx"
   End If
   Workbooks.Open Filename:=MonChemin
End Sub
Ça suffit largement pour une macro simple. dans un contexte plus complexe, c'est moins bien qu'une partie en compilation conditionnelle (plus économe en ressources lors de l'exécution).
 
Dernière édition:

r e m y

Membre vénérable
Club MacG
4 Novembre 2000
41 522
4 324
60
St Germain en Laye - FRANCE
C'était bien le fait de mettre le "Disque dur" dans le chemin qui ne lui plaisait pas.
Parfait ça fonctionne.

Il ne me reste plus qu'un message d'alerte que je voudrais bien ne pas voir s'afficher au moment où Excel 2019 ouvre le fichier (Excel 2011 ne pose pas de question)
AlerteExcel2019.jpg
 

r e m y

Membre vénérable
Club MacG
4 Novembre 2000
41 522
4 324
60
St Germain en Laye - FRANCE
Mon fichier de test (test.xls) est un fichier vierge... je l'ai enregistré en xlsx et je n'ai plus d'erreur de la part d'Excel 2019. Il doit être allergique au xls.
Pas grave, je n'utilise plus aucun fichier xls.
Merci des conseils.
Bon dimanche
 

SyMich

Membre actif
13 Février 2018
278
49
55
J'ai bien progressé et je devrais résoudre mon petit problème de compatibilité 2011/2019 de mes macros.

J'ai un petit souci collatéral toutefois...

Dans les multiples essais d'ouverture de l'un des fichiers tantôt sur Excel 2011 tantôt sur Excel 2019, alors que le fichier était ouvert par 2019, Excel a planté puis s'est réouvert en proposant de récupérer le fichier. Ce que j'ai fait.
Depuis dès que je tente de l'ouvrir par Excel 2011, j'ai un message "ce fichier est verrouillé en modification par un autre utilisateur. Voulez vous l'ouvrir en lecture seule".
Pour ne plus avoir ce message et l'ouvrir normalement, je dois soit modifier le nom du fichier, soit le changer d'emplacement sur le disque dur.

Il doit y avoir quelque part, soit un fichier temporaire soit un fichier de préférence d'excel (créé lors du plantage d'Excel 2019 mais auquel accède également Excel 2011) qui garde trace du chemin d'accès complet de ce fichier ayant connu un crash d'Excel. Je ne trouve pas où.

(Pour info, je fais mes tests sur un seul et même Mac ayant les 2 version 2011 et 2019 installées)

Ce n'est pas très grave car en ayant modifié le nom du fichier j'ai retrouvé un accès normal, mais j'aimerais comprendre et trouver comment faire le ménage au cas où ce problème se reproduise un jour.

Une idée?

Je trouve ce vieux message en faisant des recherches sur votre nouveau problème avec GateKeeper et les macros Excel...

Pour votre fichier qu'Excel affirme être déjà en cours d'utilisation, via le Terminal, passez dans le dossier contenant votre fichier (avec la commande cd ) puis faite un ls -a pour lister tous les fichiers présents
Vous de riez voir un fichier invisible portant pratiquement le nom du fichier en question (avec un point ou un tilde en début de nom, je ne sais plus)
Effacez ce fichier invisible et ça devrait résoudre votre souci.
 

r e m y

Membre vénérable
Club MacG
4 Novembre 2000
41 522
4 324
60
St Germain en Laye - FRANCE
Merci SyMich, je vérifierai ce soir (en rentrant à la maison) si un fichier invisible est la cause de ce petit problème.
Merci pour la suggestion
 

r e m y

Membre vénérable
Club MacG
4 Novembre 2000
41 522
4 324
60
St Germain en Laye - FRANCE
Merci SyMich! c'était exactement ça
Une fois el fichier invisible supprimé, j'ai pu redonner le bon nom à mon fichier et Excel ne se plaint plus qu'il est déjà utilisé
:up: