XL 2019 Fonction lancée à la fermeture du classeur

Ricou969

XLDnaute Nouveau
Bonjour,

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.
 
Solution
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)

Pour infos et pour les utilisateurs Mac qui auraient ou auront ce problème une explication simple peut se voir ici :
https://www.developpez.net/forums/d...vba-excel/lancer-script-d-apple-script-macro/
Une autre expertise, celle de M. Ron de Bruin :
https://www.rondebruin.nl/mac/applescripttask.htm

xUpsilon

XLDnaute Accro
Bonjour,

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.

Bonne continuation
 

Ricou969

XLDnaute Nouveau
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 ...
 

Ricou969

XLDnaute Nouveau
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)
 

Ricou969

XLDnaute Nouveau
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)

Pour infos et pour les utilisateurs Mac qui auraient ou auront ce problème une explication simple peut se voir ici :
https://www.developpez.net/forums/d...vba-excel/lancer-script-d-apple-script-macro/
Une autre expertise, celle de M. Ron de Bruin :
https://www.rondebruin.nl/mac/applescripttask.htm
 

patricktoulon

XLDnaute Barbatruc
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.
 

Ricou969

XLDnaute Nouveau
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.
 

Statistiques des forums

Discussions
314 645
Messages
2 111 536
Membres
111 184
dernier inscrit
amiko