IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Macros et VBA Excel Discussion :

Lancer un script d'apple script par une macro. [XL-MAC 2016]


Sujet :

Macros et VBA Excel

  1. #1
    Membre confirmé
    Homme Profil pro
    retraité
    Inscrit en
    Octobre 2013
    Messages
    49
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 75
    Localisation : Réunion

    Informations professionnelles :
    Activité : retraité
    Secteur : Enseignement

    Informations forums :
    Inscription : Octobre 2013
    Messages : 49
    Par défaut Lancer un script d'apple script par une macro.
    Bonjour,

    Je sais lancer un programme applescript avec une macro sous mac 2011. Exemple :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    ChDir " le chemin ou se trouve le programme applescript:"
                MacScript ("nom du programme.scpt")
    Avec mac 2016 l'instruction MacScript n'est plus pris en charge, il faut mettre < AppleScriptTask >. On trouve avec ce lien : https://msdn.microsoft.com/fr-fr/vba...pplescripttask... une page de microsoft qui donne une explication et la procédure pour utiliser AppleScriptTask, je ne comprends rien à la procédure donnée.

    Quelqu'un peut-il expliquer clairement la procédure ? et guider le nul d'Excel 2016 que je suis. Je vous remercie.

    Cordialement

    JFZ

  2. #2
    Expert confirmé
    Avatar de kiki29
    Homme Profil pro
    ex Observeur CGG / Analyste prog.
    Inscrit en
    Juin 2006
    Messages
    6 132
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Finistère (Bretagne)

    Informations professionnelles :
    Activité : ex Observeur CGG / Analyste prog.

    Informations forums :
    Inscription : Juin 2006
    Messages : 6 132
    Par défaut
    Salut, va voir par ici dans les rubriques Mac.

  3. #3
    Membre Expert
    Homme Profil pro
    PAO
    Inscrit en
    Octobre 2014
    Messages
    2 576
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : PAO
    Secteur : Communication - Médias

    Informations forums :
    Inscription : Octobre 2014
    Messages : 2 576
    Par défaut
    Bonjour,

    L'expliquer comme cela à la volée un peu compliquer, je vais faire simple :

    • les scripts AppleScript sont à mettre dans un dossier spécifique pour être exécuté : ~/Library/Application Scripts/com.microsoft.Excel/
    -- il y a les mêmes type de dossiers pour Word et PowerPoint :
    ----> ~/Library/Application Scripts/com.microsoft.Word/
    ----> ~/Library/Application Scripts/com.microsoft.Powerpoint/
    Si ces dossiers n'existent pas, il faut les créer à l'emplacement indiqué

    • les scripts AppleScript doivent être exécutés (afin de ne pas être bloquer par la SandBox d'Apple) via la commande AppleScriptTask faisant appel au script AS enregistré dans ledit dossier : com.microsoft.Excel (cf. ci-dessus)
    Ces scripts doivent être construits en tant que fonction avec un paramètre au choix, donc les scripts commencent toujours par : on NomFonctionAS(UnParamètre)
    UnParamètre est de type String

    Code applescript : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
        on NomFonctionAS(UnParamètre) -- UnParamètre peut être le chemin d'un dossier, d'un fichier ou autre
     
           -- Mettre le code de l'Applescript en indiquant UnParamètre si il y en a un
     
        end NomFonctionAS
    • les scripts Applescript sont appelé de cette manière :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    RésultatDuScript  = AppleScriptTask ("NomFichierAS.scpt", "NomFonctionAS", "UnParamètre")
    RésultatDuScript est une variable (on peut choisir un autre nom) est de type String => donc le résultat en retour sera un String
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Dim RésultatDuScript as String
    Ces 3 paramètres ("NomFichierAS.scpt", "NomFonctionAS", "UnParamètre") sont à marqué comme des String

    Dans le cas où l'on attend pas de résultat , on peut écrire :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    AppleScriptTask "NomFichierAS.scpt", "NomFonctionAS", "UnParamètre"
    Problème avec UnParamètre, comme sont nom l'indique, on ne peut qu'en mettre un.

    Je sais que Ron de Bruin a fait qq chose la dessus, pour ma part, je préfère faire les choses par moi même et j'ai fait toute un procédure concernant VBA/MacScript/AppleScriptTask (Multicritères/Multi-paramètres)/AppleScript.
    J'ai encore des choses à finaliser …

    Voilà j'espère avoir été assez claire …
    Cordialement
    Ryu

    La connaissance s’acquiert par l’expérience, tout le reste n’est que de l’information. – Albert Einstein

    Pensez à la Balise [ CODE][/CODE ] - à utiliser via le bouton # => Exemple

    Une fois votre problème solutionné pensez à mettre :resolu: en n'oubliant pas d'indiquer qu'elle est la solution finale choisie ;)

  4. #4
    Membre confirmé
    Homme Profil pro
    retraité
    Inscrit en
    Octobre 2013
    Messages
    49
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 75
    Localisation : Réunion

    Informations professionnelles :
    Activité : retraité
    Secteur : Enseignement

    Informations forums :
    Inscription : Octobre 2013
    Messages : 49
    Par défaut
    Merci RyuAutodidacte pour ta réponse détaillée.

    Il me reste une petite zone d'ombre avant de me lancer.
    ~/Library/Application Scripts/com.microsoft.Excel/ se met dans quelle bibliothèque ? puisqu'il y en a trois sous mac. La bibliothèque personnelle ?

    Cordialement

    JFZ

  5. #5
    Membre Expert
    Homme Profil pro
    PAO
    Inscrit en
    Octobre 2014
    Messages
    2 576
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : PAO
    Secteur : Communication - Médias

    Informations forums :
    Inscription : Octobre 2014
    Messages : 2 576
    Par défaut
    Bonjour,

    Il me reste une petite zone d'ombre avant de me lancer.
    ~/Library/Application Scripts/com.microsoft.Excel/ se met dans quelle bibliothèque ? puisqu'il y en a trois sous mac. La bibliothèque personnelle ?
    oui la bibliothèque du User
    il suffit d'aller dans le menu du Finder menu "Aller" --> "Aller au dossier …" et de marquer le chemin (~/Library/Application Scripts/com.microsoft.Excel/) pour y arriver

    Nom : Capture d’écran 2018-05-16 à 12.16.05.png
Affichages : 784
Taille : 83,4 Ko

    Si cela ne marche pas, cela veut dire que le dossier n'existe pas, dans ce cas là alors mettre à la place : ~/Library/Application Scripts/ et créer le dossier com.microsoft.Excel

    Sinon il y a ce que j'ai créé et qui fait partie de ma procédure pour ce faire (code AppleScript) :

    Installation du dossier «com.microsoft.Excel» et du fichier «GetMyScript.scpt» - création de ceux-ci si il n’existe pas
    Code applescript : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    -- Code créé par RyuAutodidacte
    set userName to short user name of (system info)
    set chm to "/Users/" & userName & "/Library/Application Scripts/com.microsoft.Excel/"
     
    set VeriFicExiste to do shell script " test -f " & quoted form of (chm & "GetMyScript.scpt") & "; echo $?"
     
    set VerifDosExiste to do shell script "test -d " & quoted form of chm & "; echo $?"
     
    set CreaFicScript to quoted form of "on CreaMyScript(myparam)
    	set {myTID, AppleScript's text item delimiters} to {AppleScript's text item delimiters, {\"|||\"}}
    	set myList to text items of myparam
    	set AppleScript's text item delimiters to myTID
    	set MonScript to item 1 of myList
    	set fichier to item 2 of myList
    	set userName to short user name of (system info)
    	set chm to \"/Users/\" & userName & \"/Library/Application Scripts/com.microsoft.Excel/\"
    	do shell script \"osacompile -e\" & quoted form of MonScript & \" -o \" & quoted form of (chm & fichier)
    end CreaMyScritp"
     
    if VerifDosExiste = "0" then
    	display alert "Le dossier \"com.microsoft.Excel\" existe déjà"
    	if VeriFicExiste = "0" then
    		display alert "Le fichier \"GetMyScript.scpt\" existe déjà"
    	else
    		do shell script "osacompile -e " & CreaFicScript & " -o " & quoted form of (chm & "GetMyScript.scpt")
    		display alert "Le fichier \"GetMyScript.scpt\" a été créé"
    	end if
    else
    	do shell script "mkdir " & quoted form of chm
    	display alert "Le dossier \"com.microsoft.Excel\" a été créé"
    	do shell script "osacompile -e " & CreaFicScript & " -o " & quoted form of (chm & "GetMyScript.scpt")
    	display alert "Le fichier \"GetMyScript.scpt\" a été créé"
    end if
    N'hésite pas à liker de si mes réponses t'ont été utile

    Ryu
    Cordialement
    Ryu

    La connaissance s’acquiert par l’expérience, tout le reste n’est que de l’information. – Albert Einstein

    Pensez à la Balise [ CODE][/CODE ] - à utiliser via le bouton # => Exemple

    Une fois votre problème solutionné pensez à mettre :resolu: en n'oubliant pas d'indiquer qu'elle est la solution finale choisie ;)

  6. #6
    Membre confirmé
    Homme Profil pro
    retraité
    Inscrit en
    Octobre 2013
    Messages
    49
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 75
    Localisation : Réunion

    Informations professionnelles :
    Activité : retraité
    Secteur : Enseignement

    Informations forums :
    Inscription : Octobre 2013
    Messages : 49
    Par défaut
    Ryu

    Merci infiniment pour tes explications, j'ai compris. Cordialement. Tout est OK.

    JFZ

  7. #7
    Membre confirmé
    Homme Profil pro
    retraité
    Inscrit en
    Octobre 2013
    Messages
    49
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 75
    Localisation : Réunion

    Informations professionnelles :
    Activité : retraité
    Secteur : Enseignement

    Informations forums :
    Inscription : Octobre 2013
    Messages : 49
    Par défaut
    Merci aussi à Kiki29 que j'ai failli oublier. Excusez moi.

  8. #8
    Nouveau candidat au Club
    Homme Profil pro
    Consultant informatique
    Inscrit en
    Juillet 2009
    Messages
    3
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Morbihan (Bretagne)

    Informations professionnelles :
    Activité : Consultant informatique

    Informations forums :
    Inscription : Juillet 2009
    Messages : 3
    Par défaut Discussion résolue oui mais il y a une petite conséquence à ce phénomène
    Bonjour,

    Merci à tous pour ce très beau message assez clair que j'ai pu également appliqué.
    Une des conséquences que l'utilisation de l'applescriptTask est qu'excel ouvre une session phantom qui ne se ferme que lorsque Excel est fermé
    Comme si une session d'accès au fichier scpt était faite sans que celle-ci ne soit fermé.

    Auriez vous une piste pour moi ?

    Nom : Phantom.png
Affichages : 1314
Taille : 709,2 Ko

  9. #9
    Membre averti
    Homme Profil pro
    Fabricant produits cosmétiques
    Inscrit en
    Novembre 2019
    Messages
    25
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Aude (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Fabricant produits cosmétiques

    Informations forums :
    Inscription : Novembre 2019
    Messages : 25
    Par défaut
    Bonjour

    J'ai une macro vba à lancer sur Outlook 2016 pour mac
    Pour extraire la totalité des adresses mails des mails reçus, envoyés et dans le corps des messages

    Comment lancer cette macro s'il vous plaît ?

    Je dépose le fichier script dans le dossier
    Application scripts
    Com.microsoft.outlook
    ?

    Merci pour votre retour
    Cordialement
    Pierre

  10. #10
    Membre averti
    Homme Profil pro
    Fabricant produits cosmétiques
    Inscrit en
    Novembre 2019
    Messages
    25
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Aude (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Fabricant produits cosmétiques

    Informations forums :
    Inscription : Novembre 2019
    Messages : 25
    Par défaut
    Voici le contenu de la macro :

    Inpec étant le créateur, pour le nommer, par respect

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
    129
    130
    131
    132
    133
    134
    135
    136
    137
    138
    139
    140
    141
    142
    143
    144
    145
    146
    147
    148
    149
    150
    151
    152
    153
    154
    155
    156
    157
    158
    159
    160
    161
    162
    163
    164
    165
    166
    167
    168
    169
    170
    171
    172
    173
    174
    175
    176
    177
    178
    179
    180
    181
    182
    183
    184
    185
    186
    187
    188
    189
    190
    'GetMail V4.1
    'DÈclaration des tableaux dynamiques globaux contenant la liste des emails
    Dim eMails(), noms() As String
    Dim EmailFromBody As Boolean
    Declare PtrSafe Function GetTempPath Lib "kernel32" Alias "GetTempPathA" (ByVal nBufferLength As Long, ByVal lpBuffer As String) As Long
     
    'Extrait dans Outlook la liste des emails (destinataire, Èmetteur, corp) du dossier sÈlectionnÈ
    'et crÈe un mail avec la liste des emails
    Sub GetEmail()
        Set rep = Outlook.Application.ActiveExplorer.CurrentFolder
    '   Set rep = Application.Session.CurrentFolder
        ' initialisation du tableau
        reponse = MsgBox("Voulez-vous extraire les e-mails du corp des messages ?", vbYesNoCancel)
        If reponse = vbCancel Then
          Exit Sub
        ElseIf reponse = vbYes Then
          EmailFromBody = True
        Else
          EmailFromBody = False
        End If
        ReDim Preserve eMails(1), noms(1)
        eMails(1) = ""
        noms(1) = ""
        'On stocke les emails dans le tableau
        GetEmailFromFolder rep
        If eMails(1) <> "" Then
            NomFichier = GetTempDir2() & "/emails.xls"
            Close #1
            Open NomFichier For Output As #1
                For i = 1 To UBound(eMails)
                    Print #1, AfficheEmail(noms(i), eMails(i))
                Next
            Close #1
            MsgBox UBound(eMails) & " emails trouvÈs dans " & rep, vbInformation, "Done"
            OpenExcel2 (NomFichier)
        Else
            MsgBox "Pas d'email trouvÈ dans " & rep, vbInformation, "Done"
        End If
     
    End Sub
    Function AfficheEmail(nom, Email)
        Email = Replace(Email, "'", "")
        If nom = "" Or nom = "body" Then
           nom = Email
        End If
        AfficheEmail = Email + vbTab + nom + vcrlf
    End Function
    'Explore les dossiers (fonction rÈentrante)
    Sub GetEmailFromFolder(myFolder)
        Dim myItemRec, MyItem As Object
        Dim myMailItem As Outlook.MailItem
        'Tous les dossiers
        For Each MyItem In myFolder.Folders
                GetEmailFromFolder MyItem
        Next
        'Tous les mails
        rep = Replace(myFolder.FolderPath, "\", vbTab)
        'rep = Replace(myFolder, "\", vbTab)
     
        'On Error Resume Next
        For Each MyItem In myFolder.Items
            If TypeName(MyItem) = "MailItem" Then
                'Destinataires (cc & cci)
                For Each myItemRec In MyItem.Recipients
                    addMail myItemRec.name & vbTab & "dest" & rep, myItemRec.Address
                Next
                'Emetteur
                addMail MyItem.SenderName & vbTab & "exp" & rep, MyItem.SenderEmailAddress
                'et dans le corp du mail
               If EmailFromBody Then findMail MyItem.body, rep
     
            End If
        Next
    End Sub
    'Rajoute une entrÈe au tableau emails() si l'email n'existe pas dÈj‡
    Sub addMail(nom, Email)
        Email = TrimEmail(Email)
        nom = Trim(nom)
        If Email <> "" And InStr(Email, "@") > 0 And InStr(Email, ".") > 0 Then
            'VÈrification de l'unicitÈ
            Find = UBound(Filter(eMails, Email, True, vbTextCompare))
            If eMails(1) = "" Then
                eMails(1) = Email
                noms(1) = nom
            ElseIf Find = -1 Then
                'On augmente la taille du tableau et on ajoute
                ReDim Preserve eMails(UBound(eMails) + 1)
                ReDim Preserve noms(UBound(noms) + 1)
                eMails(UBound(eMails)) = Email
                noms(UBound(noms)) = nom
            Else
                'On prÈfËre le plus grand si c'est pas une email
                If Len(nom) > Len(noms(Find)) And InStr(nom, "@") = 0 Then
                    noms(Find) = nom
                End If
            End If
        End If
    End Sub
    Sub findMail(body, rep)
        at = InStr(body, "@")
        Do While at > 1
            D = at - 1
            Do While carOk(Mid(body, D, 1))
                D = D - 1
                If D = 0 Then
                   Exit Do
                End If
            Loop
            f = at + 1
            Do While carOk(Mid(body, f, 1))
                f = f + 1
                If f = Len(body) Then
                   Exit Do
                End If
            Loop
            If D < at - 3 And f > at + 4 Then
                addMail GetTel(body) & vbTab & "body" & rep, Mid(body, D + 1, f - D - 1)
            End If
            at = InStr(at + 1, body, "@")
        Loop
    End Sub
    Function carOk(c)
        If c = "." Or c = "-" Or c = "_" Or (c >= "0" And c <= "9") Or (c >= "A" And c <= "Z") Or (c >= "a" And c <= "z") Then
            carOk = True
        Else
            carOk = False
        End If
    End Function
    Function carOkDebut(c)
        If c = "-" Or c = "_" Or (c >= "0" And c <= "9") Or (c >= "a" And c <= "z") Then
            carOkDebut = True
        Else
            carOkDebut = False
        End If
    End Function
    Function carOkFin(c)
        If (c >= "a" And c <= "z") Then
            carOkFin = True
        Else
            carOkFin = False
        End If
    End Function
    Function TrimEmail(email_ini)
      Email = Trim(LCase(email_ini))
      D = Len(Email)
      For i = 1 To D
        If Not carOkDebut(Left(Email, 1)) Then
          Email = Mid(Email, 2, Len(Email) - 1)
        Else
          Exit For
        End If
      Next i
      D = Len(Email)
      For i = 1 To D
        If Not carOkFin(Right(Email, 1)) Then
          Email = Mid(Email, 1, Len(Email) - 1)
        Else
          Exit For
        End If
      Next i
      TrimEmail = Email
    End Function
    Function GetTel(body)
      Static Reg As Object
      If Reg Is Nothing Then
        Set Reg = CreateObject("vbscript.regexp")
        Reg.Global = True
        Reg.IgnoreCase = True
        Reg.MultiLine = True
      End If
      Reg.Pattern = "([a-zA-ZÈ]*)[+ :]*?(([-. ]?[0-9]){10,11})"
      Set Matches = Reg.Execute(body)
      GetTel = ""
      For Each Match In Matches
          GetTel = GetTel & Match.Value & ";"
      Next Match
     
    End Function
     
    Sub OpenExcel2(FileName)
        Set xls = CreateObject("Excel.Application")
        xls.Workbooks.Open FileName
        xls.Visible = True
    End Sub
    Function GetTempDir2() As String
        Dim buffer As String * 256
        Dim Length As Long
        Length = GetTempPath(Len(buffer), buffer)
        GetTempDir2 = Left(buffer, Length)
    End Function

  11. #11
    Membre averti
    Homme Profil pro
    Fabricant produits cosmétiques
    Inscrit en
    Novembre 2019
    Messages
    25
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Aude (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Fabricant produits cosmétiques

    Informations forums :
    Inscription : Novembre 2019
    Messages : 25
    Par défaut
    Quand je lance la macro ça me met, en dessous :

    Code AppleScript : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    tell application "Finder"
    	activate
    	close window "Aller au dossier"
    	set width of column id name column of list view options of Finder window 1 to 481
    	set target of Finder window 1 to folder "com.microsoft.Outlook" of folder "Application Scripts" of folder "Library" of folder "neuTh" of folder "Users" of startup disk
    	close Finder window id 3019
    end tell
    tell application "Finder"
    	activate
    	set position of Finder window 1 to {1192, 405}
    end tell

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [XL-2003] Script bloquant le lancement d'une macro si..
    Par Eric202 dans le forum Macros et VBA Excel
    Réponses: 5
    Dernier message: 28/07/2012, 00h10
  2. Imprimer un graph par une macro
    Par man_coef dans le forum Général VBA
    Réponses: 2
    Dernier message: 10/10/2006, 12h28
  3. Réponses: 3
    Dernier message: 14/04/2006, 11h43
  4. lancer une sub par une macro
    Par ganizate dans le forum Access
    Réponses: 2
    Dernier message: 04/04/2006, 16h01
  5. [Excel] Utiliser une application externe par une macro
    Par thierry2.dlp dans le forum Macros et VBA Excel
    Réponses: 4
    Dernier message: 09/08/2005, 23h07

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo