Je voudrais, lorsque mon classeur se ferme lancer une application qui va sauvegarder mon travail dans un dossiers 'sauvegardes'.
Pour avoir des noms différents, j'ai fait un automation sous forme d'un fichier 'automator' (mac OS only, je crois), équivalent à un fichier de commandes terminal en gros.
Le fichier automator (save.app) fonctionne parfaitement et me permets d'avoir des noms différents puisque l'applic les renomment le cas échéant (xxxx.xlsm, xxxx2.xlms, xxxx3.xlms, etc.
le code dans le workbook est :
VB:
Private Sub Workbook_BeforeClose(Cancel As Boolean)
On Error Resume Next
'
Shell ("open /Users/user/Box\ Sync/NosComptesFaits/save.app")
End Sub
Rien n'est créé à la sortie de mon classeur. Pour le moment je sauvegarde à la main en lancer directement ma petite applic.
EUREKA !
Il faut :
1 - placer le script a exécuter dans le dossier :
disque/users/user/bibliothèque/Application Scripts/com.microsoft.Excel
2 - appeler le script depuis vba avec la commande AppleScriptTask(Script,Handler,Param)
Je n'ai pas l'occasion de tester ta solution si elle est pour mac, mais ce que je remarque, c'est que tu as mis "On Error Resume Next" et tu nous dis que rien ne se passe. C'est très probablement qu'il doit y avoir une erreur dans ton code et que comme tu as un gestionnaire d'erreurs qui ignore les erreurs, du coup il traverse simplement la macro sans l'exécuter.
Enlève le On Error et regarde ce qu'il se passe.
Merci de vos réponses, en effet, shell ne fonctionne pas sur mac et j'ai retiré l'instruction "on error resume next".
J'ai trouvé ici une piste mais je sèche :
L'instruction qu'il semble falloir employer est 'AppleScriptTask' :
VB:
Dim myScriptResult as String
myScriptResult = AppleScriptTask ("MyAppleScriptFile.applescript", "myapplescripthandler", "my parameter string")
J'ai mis dans le dossier "MacBook:Users:nomUtilisateur:Library:Application Scripts:com.microsoft.Excel:sauve.scpt" l'application que je dois lancer autrement dit "MyAppleScriptFile.applescript" mais je ne comprends pas ce que doit contenir le "myapplescripthandler" ni le paramètre ("my parameter string").
Est-ce que le handler est le point d'entrée qui va lancer l'applic passée en paramètre ?
Je peux toujours lancer mon applic à la main, mais si quelqu'un avait la solution ...
Bonjour Patrick et merci de me répondre,
Oui, je pense avoir lu toute la page, mais j'aimerais savoir ce que tu voulais me faire remarquer car j'ai bien essayé avec le code ci-dessous, sans succès. Je suis toujours à la recherche d'une solution.
VB:
Dim RetVal
RetVal = Shell("MacBook:Utilisateurs:monNom:Box Sync:NosComptesFaits:save.app", 1)
EUREKA !
Il faut :
1 - placer le script a exécuter dans le dossier :
disque/users/user/bibliothèque/Application Scripts/com.microsoft.Excel
2 - appeler le script depuis vba avec la commande AppleScriptTask(Script,Handler,Param)
Bonjour Patrick et merci de me répondre,
Oui, je pense avoir lu toute la page, mais j'aimerais savoir ce que tu voulais me faire remarquer car j'ai bien essayé avec le code ci-dessous, sans succès. Je suis toujours à la recherche d'une solution.
VB:
Dim RetVal
RetVal = Shell("MacBook:Utilisateurs:monNom:Box Sync:NosComptesFaits:save.app", 1)
alors je copie colle puisque visiblement on a pas la meme page Exemple
Cet exemple utilise la fonctionShellpour exécuter une application spécifiée par l’utilisateur. Sur Macintosh, le nom du lecteur par défaut est « HD » et les portions du nom de chemin d’accès sont séparées par des points-virgules au lieu de barres obliques inverses. De même, vous spécifierez les dossiers Macintosh au lieu de \WINDOWS.
Désolé mais la fonction Shell ne fonctionne pas sur MAC, en revanche la commande AppleScriptTask(fonction, handler, param), oui.
J'ai mis dans le Workbook :
VB:
Private Sub Workbook_BeforeClose(Cancel As Boolean)
Sauvegarder
End Sub
Dans le module de la feuille :
Code:
Sub Sauvegarder()
Application.ScreenUpdating = False
Dim RunMyScript As String
Dim Parametre As String
Dim monScript As String
Dim monHandler As String
Parametre = "now"
monScript = "sauve.scpt"
monHandler = "sauvegarde"
RunMyScript = AppleScriptTask(monScript, monHandler, Parametre)
End Sub
Et j'ai déposé dans le dossier disque/users/user/bibliothèque/Application Scripts/com.microsoft.Excel :
Code:
on sauvegarde(parametre)
if parametre = "now" then
tell application "Finder"
activate
open application file "sauve.app" of folder "NosComptesFaits" of folder "Box Sync" of folder "monNom" of folder "Users" of startup disk
end tell
end if
end sauvegarde
L'application sauve.app est un processus automator (mac Only) qui compresse le classeur est dépose l'archive dans un dossier spécifique.
Tout fonctionne, j'ouvre ma compta, la mets à jour et quand je ferme la feuille j'ai mon archive avec la dernière version.