"enregistrer sous" code VBA avec office 2011 excel mac, prob

goufra

Membre junior
14 Novembre 2010
27
2
78
Bonjour,
Mon application excel 2010 fonctionne sous mac sauf sauvegarder sous
Pour comprendre comment fonctionne Mac avec office 2011, j’ai demandé à mon correspondant

1/ de créer un répertoire « Facture » et y placer le fichier « nomchemin.xlsm »

Avec ActiveWorkook.fullname, j’ai obtenu le chemin
Sans titre:Users:flo:Desktop:FACTURE:nomchemin.xlsm

2/ de placer le fichier « étude » dans un répertoire qu’il compte utiliser.

Avec ActiveWorkook.fullname, j’ai obtenu le chemin
Sans titre:Users:flo:Documents:XR multi-light 11.13.48:Etude.xlsm

j’ai créé un code pour effectuer une sauvegarde du fichier etude sous le nom
1094etude.xlsm dans le répertoire facture

J’ai essayé ces 3 codes aucun ne fonctionne
sub essai2()
dim x as string
x = "Sans titre:Users:flo:Desktop:Facture:1094etude.xlsm"
ActiveWorkbook.SaveCopyAs Filename:=x
end sub

x = "hd:flo:Desktop:Facture:1094etude.xlsm "
ActiveWorkbook.SaveCopyAs Filename:=x

x = "hd:Desktop:Facture:1094etude.xlsm"
ActiveWorkbook.SaveCopyAs Filename:=x

Dans l’attente que vous corrigiez mon erreur, je vous souhaite une bonne journée ensoleillée
JC Goufra
 

Aliboron

Chercheur de son
Modérateur
Club MacG
1 Janvier 2008
14 021
972
Toulouse.cong
faq.office.macintosh.free.fr
Je ne suis pas en situation de vérifier dans le détail pour le moment. Mais on peut déjà dire que le chemin d'accès
Bloc de code:
"Sans titre:Users:flo:Desktop:Facture:1094etude.xlsm"
est correct (contrairement aux deux autres exemples).

Je crains plutôt un souci de compatibilité de l'instruction SaveCopyAs. Si c'est ça, tu peux le contourner en faisant d'abord une copie du classeur puis en l'enregistrant. Je verrai ce que je peux en dire (si possible ce soir).

Tu peux trouver des informations utiles pour la programmation VBA Excel/Windows sur les pages dédiées de Ron de Bruin, entre autres...
 

goufra

Membre junior
14 Novembre 2010
27
2
78
Bonsoir Bernard

Pour faire suite à ta suggestion sans utiliser filename

1 .. Ce code fonctionne-t-il sous mac?
- xxxxxxxxxxxxxxxxxx x= "1094etude.xlsm"
- xxxxxxxxxxxxxxxxxxx ActiveWorkbook.SaveCopyAs (x)

- Dans quel répertoire se trouve ce nouveau fichier ?

2 .. Avec un nouveau chemin que je ne sais toujours pas écrire sous mac!
- xxxxxxxxxxxxxxxxxxxx "d:\doc excel\commandes\t1094etude.xlsm"

- xxxxxxxxxxxxxxxxxxxx ActiveWorkbook.SaveCopyAs (x)

Je te remercie d'avance
A bientôt
JC
 

Aliboron

Chercheur de son
Modérateur
Club MacG
1 Janvier 2008
14 021
972
Toulouse.cong
faq.office.macintosh.free.fr
1 - dans un cas comme celui-là, le document devrait aller dans le dossier par défaut, je pense. Je vérifierai mais logiquement, ça devrait être dans le dossier "Documents" du compte utilisateur courant. De toute façon, c'est une méthode peu fiable, tu t'en doutes.

2 - comme vu précédemment, le premier chemin d'accès que tu donnais dans ton premier message est correct. Sous Mac OS X, les volumes ont un nom, pas une lettre. Il te faut récupérer au préalable le chemin d'accès car il change selon la machine et le compte utilisateur concerné. Dans certains cas, il peut être utile de passer par AppleScript pour récupérer certaines infos (une nouvelle occasion de voir ce qu'en dit Ron de Bruin ;))

Ceci dit, je crains vraiment que ce soit l'instruction SaveCopyAs qui pose problème, pas tellement les paramètres utilisés.
 

Aliboron

Chercheur de son
Modérateur
Club MacG
1 Janvier 2008
14 021
972
Toulouse.cong
faq.office.macintosh.free.fr
1 - je confirme, après essai, le nouveau classeur s'enregistre dans le dossier par défaut, qu'on peut désigner dans les préférences d'Excel, onglet "Général". Si on ne désigne rien, j'imagine que c'est dans ~/Documents

2 - rien de plus. Par contre, je confirme que la toute première syntaxe est correcte (sous réserve que le disque dur de démarrage soit bien nommé "Sans titre", que le nom abrégé de l'utilisateur soit bien "flo" et que le dossier "Facture" existe bien sur le bureau de cet utilisateur (et accessoirement qu'on ait aussi les droits d'écriture sur ce dossier, sait-on jamais).

En fait, ça fonctionne sans problème, à condition que le format initial du classeur soit bien le même (".xlsm" dans le cas présent) faute de quoi on ne peut pas ouvrir le classeur ensuite, l'extension ne correspondant pas au format réel. Mais bon, rien d'anormal.

Note qu'avec l'instruction ActiveWorkbook.Path, tu obtiens le chemin d'accès du classeur courant, ce qui peut te permettre facilement de déterminer le chemin pour enregistrer (genre x = ActiveWorkbook.Path & ":Mon Dossier:Mon Classeur.xlsm")
 

goufra

Membre junior
14 Novembre 2010
27
2
78
Bonsoir Bernard

Je vais donc faire tester le code à mon correspondant qui est un béotien au sens strict du terme.

x = "Sans titre:Users:flo:Desktop:Facture:1094etude.xlsm"
ActiveWorkbook.SaveCopyAs Filename:=x

Je te tiens au courant
Avec mes remerciements pour ton aide.
jc
 

goufra

Membre junior
14 Novembre 2010
27
2
78
Bonjour Bernard,
Cela ne fonctionne toujours pas.
Il s'agit de copier etudeNl.xlsm et de lui donner le nom 1094etude

Avec activeworbook.save j'obtiens le chemin du fichier à copier, cela m'indique l'architecture du Mac

Le code utilisé

Sub test5()

Dim x as string
[N18] = ActiveWorkbook.FullName
ActiveWorkbook.Save

-...................... x = "Sans titre:Users:flo:Desktop:Facture:1094etude.xlsm"
-...................... [g18] = x

-...................... ActiveWorkbook.SaveCopyAs Filename:=x
....................... ActiveWorkbook.Save
End Sub

Je te remercie par avance, j'ai essayé de trouver une répons sur la toile, toujours rien
Une belle et bonne journée à toi
JC
 

Aliboron

Chercheur de son
Modérateur
Club MacG
1 Janvier 2008
14 021
972
Toulouse.cong
faq.office.macintosh.free.fr
Avec activeworbook.save j'obtiens le chemin du fichier à copier, cela m'indique l'architecture du Mac
;) Je présume que c'est plutôt avec [N18] = ActiveWorkbook.FullName (sous réserve qu'il ait été enregistré au préalable). Mais tel que c'est là, ça ne peut servir que de contrôle a postériori.

Pour l'enregistrement, comme vu, et en admettant qu'il soit enregistré au même emplacement, le plus sûr serait de donner comme nom complet, après avoir enregistré le classeur etudeNl.xlsm, x = ActiveWorkbook.Path & ":1094etude.xlsm"

Je regarderai plus en détail ce soir, si possible. Mais chez moi, je n'ai pas rencontré de problème particulier. Quel est précisément le problème rencontré chez l'utilisateur ? Y a-t-il un message d'erreur ? Un problème d'exécution des macros plus général ? Une exécution pas à pas est-elle envisageable (pour voir ce qui cloche) ?
 

goufra

Membre junior
14 Novembre 2010
27
2
78
Bonjour

"le plus .... serait de donner comme nom complet, après avoir enregistré le classeur etudeNl.xlsm, x = ActiveWorkbook.Path & ":1094etude.xlsm""


Si je comprends bien :
1/Le fichier original est enregistré dans son répertoire

2/ Puis avec le code il est copié dans le même répertoire sous un autre nom

Le code est-il :

x = ActiveWorkbook.Path & ":1094etude.xlsm"

ActiveWorkbook.SaveCopyAs Filename:=x

A ce soir donc, je n'ai toujours pas trouvé de réponse compréhensible sur le net, Un comble !
Les ... remplace le mot de ton texte, utilisé il renvoyait à de la pub !!!
A ce soir et bonne journée
JC
 

Aliboron

Chercheur de son
Modérateur
Club MacG
1 Janvier 2008
14 021
972
Toulouse.cong
faq.office.macintosh.free.fr
Le code est-il :

x = ActiveWorkbook.Path & ":1094etude.xlsm"

ActiveWorkbook.SaveCopyAs Filename:=x
Oui, exactement (et ça fonctionne sans problème)

J'ai trouvé sur ce lien un début de réponse, me semble-t-il, mais je suis incapable de l'exploiter
Il n'y a pourtant rien de sorcier, Ron décrit précisément ce que ça fait : telle quelle la macro va vérifier la présence d'un dossier "TestFolder" sur le bureau. S'il ne le trouve pas, il lance la boucle AppleScript "ScritToMakeDir" qui va le créer...
 

goufra

Membre junior
14 Novembre 2010
27
2
78
Bonsoir Bernard,

Je te remercie infiniment pour m'avoir accompagné pour régler ce problème.
Je vais envoyé le test à mon correspondant pour ainsi finaliser mon appli.
Je te tiens informé.
Bonne nuit
JC
 

goufra

Membre junior
14 Novembre 2010
27
2
78
Bonjour Bernard
Cela ne fonctionne toujours pas.

Voici le code du fichier goufra16.xlsm à copier

Option Explicit
Dim x As String
Sub test1()

[h2] = ActiveWorkbook.FullName
ActiveWorkbook.Save

x = ActiveWorkbook.Path & ":1096goufra.xlsm"
ActiveWorkbook.SaveCopyAs Filename:=x

End Sub

En h2 je récupère le chemin du fichier goufra16.xlsm qui est
Sans titre:Users:flo:Documents:XR multi-light 11.13.48:goufra16.xlsm

Mon correspondant m'indique erreur 1004 .... introuvable


J'ai fait changer
ActiveWorkbook.SaveCopyAs Filename:=x
par
ActiveWorkbook.SaveCopyAs (x)

erreur 1004

Une remarque, comme mon correspondant est loin de moi et béotien, je ne peux pas vérifier mon interrogation :
Dans mac j'ouvre excel je crée un document je le sauvegarde. Le lieu de sauvegarde correspond au path, il n'y a pas de changement de répertoire si j'utilise le code.

Peut-être Est-ce là le pb pour ce code. Il conviendrait de ranger goufra16.xlsm dans le répertoire ad hoc ...

Bref c'est galère !
Que puis-dire d'autre bonne journée ensoleillée
JC G
 

Aliboron

Chercheur de son
Modérateur
Club MacG
1 Janvier 2008
14 021
972
Toulouse.cong
faq.office.macintosh.free.fr
Je testerai ça ce soir, dans la mesure du possible.

Ceci dit, j'aurais tout de même évité de mettre des points dans un nom de dossier. J'ai plutôt tendance (habitude contractée sous Windows, certes, mais depuis qu'on est passé aux extensions sur Mac aussi, je m'y tiens) à utiliser comme séparateurs des tirets plutôt que des points, des slashes et autres caractères réservés.

Peut-être pourrais tu suggérer à ton béotien de faire un essai en tenant compte de ça ?
 

goufra

Membre junior
14 Novembre 2010
27
2
78
Re,
J'ai aussi tiqué sur le nom du répertoire avec des points, il a crée xr multilight la suite 11.13.48 n'est pas de son fait.

Il utilise une version Mac 10.7.5
Quid du répertoire ou excel sauvegarde ses fichiers ...
Merci à toi
JC
 

Aliboron

Chercheur de son
Modérateur
Club MacG
1 Janvier 2008
14 021
972
Toulouse.cong
faq.office.macintosh.free.fr
Bon, ben RàS chez moi : ta macro fonctionne comme une horloge, avec des points ou des tirets dans le nom du dossier, que ce soit sur le bureau ou dans le dossier "Documents"…

Euh, question subsidiaire (surtout dans la mesure où il s'agit d'un béotien) : sa version d'Office 2011 est-elle à jour (donc en 14.3.9 actuellement) ?
 

goufra

Membre junior
14 Novembre 2010
27
2
78
ok, je fais vérifier.

j'ai trouvé chez R de B 2 codes
[SIZE=+0]ActiveWorkbook.SaveAs "Macintosh HD: Utilisateurs: Votre_nom_d'utilisateur: Desktop: ron.xlsm", FileFormat: = 53[/SIZE]

Mais je fais vérifier avant l'adresse avec

Dim DocumentsFolder As String
' Call AppleScript to get the Documents folder
DocumentsFolder = MacScript("return (path to documents folder) as string")
[h2] = DocumentsFolder
@+
JC G
 

Aliboron

Chercheur de son
Modérateur
Club MacG
1 Janvier 2008
14 021
972
Toulouse.cong
faq.office.macintosh.free.fr
j'ai trouvé chez R de B 2 codes
ActiveWorkbook.SaveAs "Macintosh HD: Utilisateurs: Votre_nom_d'utilisateur: Desktop: ron.xlsm", FileFormat: = 53
Oui, mais en utilisant SaveAs au lieu de SaveCopyAs, tu ne fais que modifier légèrement les données du problème (il te faut dupliquer le classeur au préalable). Or, ce n'est pas l'instruction qui pose problème, à mon avis (même si ça ne coûte rien d'essayer, bien entendu). Attention, "Macintosh HD" n'est pas une donnée fiable, c'est certes le nom par défaut du disque de démarrage lors de l'installation d'un Mac neuf, mais rien ne dit que ça va le rester. La preuve, chez ton client il se nomme "Sans titre" (et chez moi "Disque Dur").

Le nom que tu récupères dans ton script indique bien que l'arborescence est correcte (et d'autant plus si tu la récupères ensuite avec l'instruction ActiveWorkbook.Path (ou le deuxième script de Ron, plus fiable pour le traitement des lettres accentuées, comme il l'explique).