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

AppleScript Discussion :

Mail : utilisation de variable pour indiquer le type de "recipient" - possible ? [AppleScript]


Sujet :

AppleScript

  1. #1
    Expert confirmé
    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
    Points : 4 174
    Points
    4 174
    Par défaut Mail : utilisation de variable pour indiquer le type de "recipient" - possible ?
    Bonjour,

    Est il possible d'utiliser une variable genre list pour passer en paramètre les 3 types de "recipients" pour l'envoi de mail ??

    Exemple faussé permettant de comprendre ma demande :
    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
    set theRecipients to {to recipients, cc recipient, bcc recipient}
       repeat with theRecip in theRecipients
              make new recipient at end of theRecip of theMessage with properties {address:MyAdr, name:MyName}
       end repeat
     
    -- j'aimerais éviter de répéter 3 fois la boucle pour alléger le code
    	--repeat with My_ToRecipient in My_ToRecipients
    	--	make new recipient at end of to recipients of theMessage with properties {address:My_ToRecipient, name:""}
    	--end repeat
     
    	--repeat with My_cc in My_ccs
    	--	make new recipient at end of cc recipient of theMessage with properties {address:My_cc, name:""}
    	--end repeat
     
    	--repeat with My_cci in My_ccis
    	--	make new recipient at end of bcc recipient of theMessage with properties {address:My_cci, name:""}
    	--end repeat
    Merci d'avance

    Ryu

    Edit : Pour être plus précis, j'ai fait 2 codes pour l'envoi de mail dans Mail et OutLook.
    à peu de chose prés il y a une grande similitude dans la façon de l'écrire, ce qui me permettrait de passer une partie en paramètre selon si c'est un envoi par Mail ou un envoi par OutLook.
    Le but final est de pouvoir le faire depuis Excel 2011 et 2016 (j'ai déjà fait un petit test rapide et probant).
    Il me reste à voir la signature à ajouter pour les 2.

    je vais pas m'étendre, mais si besoin j'apporterai plus de précisions .

    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 en n'oubliant pas d'indiquer qu'elle est la solution finale choisie

  2. #2
    Membre éprouvé

    Homme Profil pro
    Directeur de projet
    Inscrit en
    Septembre 2010
    Messages
    602
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Directeur de projet
    Secteur : High Tech - Matériel informatique

    Informations forums :
    Inscription : Septembre 2010
    Messages : 602
    Points : 1 239
    Points
    1 239
    Par défaut
    Bonjour,
    J'en profite pour souhaiter une bonne année à tous !
    Citation Envoyé par RyuAutodidacte Voir le message
    Est il possible d'utiliser une variable genre list pour passer en paramètre les 3 types de "recipients" pour l'envoi de mail ??
    Les récipients ne sont pas une liste d'adresses, mais une liste de records dont les propriétés sont 'address' et 'name'.
    Donc il doit être possible d'ajouter une liste de records (je n'ai pas testé, mais les recipient sont bien une liste !), mais pas une liste d'adresse.

    Exemple de liste d'adresses : {"toto@gmail.com", "tutu@gmail.com"}
    Exemple de liste de records : {{address:"toto@gmail.com"},{address:"tutu@gmail.com"}}

    Cordialement

  3. #3
    Expert confirmé
    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
    Points : 4 174
    Points
    4 174
    Par défaut
    bonjour PBELL,

    Je te souhaite une très bonne année ainsi qu'au forum !

    j'ai essayé de créer dynamiquement une liste de records à partir d'un texte, mais je n'y suis pas arrivé pour l'instant.
    Là où j'en suis :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    set Addr to "alex@yahoo.fr, alx@yahoo.fr, ale@yahoo.fr"
    set AppleScript's text item delimiters to ", "
    set emailAddress to text items of Addr
    repeat with i from 1 to count emailAddress
    	set item i of emailAddress to item i of emailAddress as list
    end repeat
    return emailAddress
    • Comment faire pour l'avoir de cette manière : {{address:"toto@gmail.com"},{address:"tutu@gmail.com"}}

    • Comment faire pour indiquer à la liste de record le pointage vers to recipients, cc recipient et bcc recipient ?
    Car j'aimerai que le code puisse changer avec une variable permettant de passer de l'un à l'autre, j'ai trois fois la même écriture :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    			make new recipient at end of to recipients of theMessage with properties {address:Addr, name:""}
    			make new recipient at end of cc recipient of theMessage with properties {address:Addr, name:""}
    			make new recipient at end of bcc recipient of theMessage with properties {address:Addr, name:""}
    Afin que je puisse passer sur les 3 (to recipients, cc recipient et bcc recipient) dans une boucle via une variable spécifique permettant d'indiqué le type ce récipient (normal, cc ou cci), un exemple (faussé) :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Repeat with maVarRecip in maVarRecipients
          make new recipient at end of maVarRecip of theMessage with properties {address:Addr, name:""}
    end repeat
    PS : je mettrai les codes que j'ai fait en normal pour donner une meilleure représentation …
    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 en n'oubliant pas d'indiquer qu'elle est la solution finale choisie

  4. #4
    Membre éprouvé

    Homme Profil pro
    Directeur de projet
    Inscrit en
    Septembre 2010
    Messages
    602
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Directeur de projet
    Secteur : High Tech - Matériel informatique

    Informations forums :
    Inscription : Septembre 2010
    Messages : 602
    Points : 1 239
    Points
    1 239
    Par défaut
    Bonsoir Ryu,
    L'expression "make new to recipient at end of to recipients with..." est une instruction que le compilateur comprend comme telle. Les mots de cette instruction ne peuvent être remplacés par des variables. Le compilateur ne peut comprendre et te donnera systématiquement une erreur.

    Il me semble que le plus simple est de faire une conversion de tes string contenant des adresses séparées par des virgules, vers des listes de string contenant chacune une adresse.
    Cela te permet de simplifier le code.
    Pour les to, cc et bcc, tu n'as pas le choix, il faut écrire chaque instruction.

    Ceci étant, l'exemple ci-dessous montre que le code résultant est lisible et simple.
    Tu remarques aussi qu'il permet l'utilisation de listes de longueurs variables.

    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
    set Mon_Sujet to "test liste adresses"
    set Mon_Content to "Ceci est un test"
    
    
    -- données pour l'exemple
    set Addr to "toto@gmail.com, tuto@gmail.com, titi@gmail.com" --liste de destinataires
    set AddrC to "CC@gmail.com, DD@gmalil.com" -- liste des destinataites en copie
    set AddrCC to "confid1@gmail.com" -- liste des copie confidentielles
    
    
    -- conversion des données en liste
    set MyReceipt to StringToListe(Addr)
    set CC to StringToListe(AddrC)
    set BCC to StringToListe(AddrCC)
    
    
    -- Script principal
    tell application "Mail"
    activate
        set newMessage to make new outgoing message with properties {visible:true, subject:Mon_Sujet, content:Mon_Content}
        tell newMessage
            repeat with i from 1 to count of MyReceipt
    make new to recipient at end of to recipients with properties {address:item i of MyReceipt}
            end repeat
            repeat with I from 1 to count of CC
    make new to recipient at end of cc recipients with properties {address:item i of CC}
            end repeat
            repeat with I from 1 to count of BCC
    make new to recipientat end of bcc recipients with properties {address:item i of BCC}
            end repeat
        end tell
    end tell
    -- Fin du script principal
    
    
    on StringToListe(StringList) -- converti la string contenant une liste en liste
        set AppleScript'stext item delimiters to ", "
        set Liste to text items of StringList
        set MyList to {}
        repeat with I from 1 to count Liste
            set end of MyList to item I of Liste
        end repeat
        return MyList
    end StringToListe
    Pour aller plus loin, tu peux créer une liste de listes. Avant lea création du mail tu crées une variable unique : Set MesDest to {MyReceipt, CC, BCC}
    Puis tu remplace par exemple dans les properties du cc recipient l'instruction "item i of MyReceipt" par "item i of item 2 of MesDest"
    Tu aura alors une seule variable à transmettre, MesDest, qui est une liste de 3 items, chacun étant lui-même une liste !

    Cordialement

  5. #5
    Expert confirmé
    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
    Points : 4 174
    Points
    4 174
    Par défaut
    Bonsoir PBELL,

    Merci pour ta réponse

    a peu de chose près c'est sur cela que je suis parti dans mes recherches pour créer les codes pour Mail et OutLook, en prenant soin à ce qui soit quasi équivalent, pour une gestion plus simple (manque la signature - à voir) :

    Pour Mail :
    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
    set MyAttach to (choose file with prompt "Choisir des pièces à joindre" with multiple selections allowed)
     
    set My_ToRecipients to {"alex@yahoo.fr", "alx@yahoo.fr", "ale@yahoo.fr"}
    set My_ccs to {"alex@yahoo.fr", "alx@yahoo.fr", "ale@yahoo.fr"}
    set My_ccis to {"alex@yahoo.fr", "alx@yahoo.fr", "ale@yahoo.fr"}
     
    set Txt_Content to "TETST : Voilà mon texte ùàö!" & return --& return --les return pour les pieces jointes afin qu'elles tombent après le texte et pas à coté : si tu as une meilleure solution je suis preneur
    set My_Subject to "Mon sujet"
    set My_Signature to "Ma signature"
     
    tell application id "com.apple.Mail" --"Mail"
    	set theMessage to make new outgoing message with properties {subject:My_Subject, content:Txt_Content, visible:true}
     
    	repeat with My_ToRecipient in My_ToRecipients
    		make new recipient at end of to recipients of theMessage with properties {address:My_ToRecipient, name:""}
    	end repeat
     
    	repeat with My_cc in My_ccs
    		make new recipient at end of cc recipient of theMessage with properties {address:My_cc, name:""}
    	end repeat
     
    	repeat with My_cci in My_ccis
    		make new recipient at end of bcc recipient of theMessage with properties {address:My_cci, name:""}
    	end repeat
     
    	repeat with Attach in MyAttach
    		make new attachment with properties {file name:Attach} at after the last paragraph of content of theMessage
    	end repeat
    	--set theMessage to 0
     
    end tell
    Pour OutLook :
    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
    set MyAttach to (choose file with prompt "Choisir des pièces à joindre" with multiple selections allowed)
     
    set My_ToRecipients to {"alex@yahoo.fr", "alx@yahoo.fr", "ale@yahoo.fr"}
    set My_ccs to {"alex@yahoo.fr", "alx@yahoo.fr", "ale@yahoo.fr"}
    set My_ccis to {"alex@yahoo.fr", "alx@yahoo.fr", "ale@yahoo.fr"}
     
    set Txt_Content to "TETST : Voilà mon texte ùàö!"
    set My_Subject to "Mon sujet"
    set My_Signature to "Ma signature"
     
    tell application id "com.microsoft.Outlook" --"Microsoft Outlook"
    	set theMessage to make new outgoing message with properties {subject:My_Subject, content:Txt_Content}
     
    	repeat with My_ToRecipient in My_ToRecipients
    		make new recipient at theMessage with properties {email address:{address:My_ToRecipient, name:""}}
    	end repeat
     
    	repeat with My_cc in My_ccs
    		make new cc recipient at theMessage with properties {email address:{address:My_cc, name:""}}
    	end repeat
     
    	repeat with My_cci in My_ccis
    		make new bcc recipient at theMessage with properties {email address:{address:My_cci, name:""}}
    	end repeat
     
    	repeat with Attach in MyAttach
    		make new attachment at the end of theMessage with properties {file:Attach}
    	end repeat
     
    	open theMessage
     
    end tell
    Un test que j'avais fait pour les adresses mails évitant la boucle :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    set Addr to "alex@yahoo.fr, alx@yahoo.fr, ale@yahoo.fr"
    set AppleScript's text item delimiters to ", "
    set emailAddress to text items of Addr
    Pour aller plus loin, tu peux créer une liste de listes. Avant lea création du mail tu crées une variable unique : Set MesDest to {MyReceipt, CC, BCC}
    Puis tu remplace par exemple dans les properties du cc recipient l'instruction "item i of MyReceipt" par "item i of item 2 of MesDest"
    Tu aura alors une seule variable à transmettre, MesDest, qui est une liste de 3 items, chacun étant lui-même une liste !
    C'est exactement là où je voulais en venir dans mes recherches (pour cela pas trop de souci) mais en incluant en plus le paramètres du destinataire, du cc et du cci - pour le principe :
    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
    set AppleScript's text item delimiters to ", "
    set My_ToRecipients to text items of "alex@yahoo.fr, alx@yahoo.fr, ale@yahoo.fr" -- txt E-Mails provenant d'excel
    set My_ccs to text items of "alex@yahoo.fr, alx@yahoo.fr, ale@yahoo.fr" -- txt E-Mails provenant d'excel
    set My_ccis to text items of "alex@yahoo.fr, alx@yahoo.fr, ale@yahoo.fr" -- txt E-Mails provenant d'excel
     
    set Txt_Content to "TETST : Voilà mon texte ùàö!" & return & return
    set My_Subject to "Mon sujet"
     
    set My_Addrresses to {My_ToRecipients, My_ccs, My_ccis}
    set My_Recipients to {"to recipients", "cc recipient", "bcc recipient"} -- partie faussé juste pour la représentation
     
    repeat with i from 1 to count My_Recipients
    	repeat with Addr in item i of My_Addrresses
    		display alert item i of My_Recipients & "  -  " & Addr --make new recipient at end of item i of My_Recipients of theMessage with properties {address:Addr, name:""} -- item i of My_Recipients => représentant to recipients puis cc recipient et bcc recipient
    	end repeat
    end repeat
    Ce qui aurais pu donné si cela avait été possible :
    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
     try
    	set MyAttach to (choose file with prompt "Choisir des pièces à joindre" with multiple selections allowed)
    end try
     
    set AppleScript's text item delimiters to ", "
    set My_ToRecipients to text items of "alex@yahoo.fr, alx@yahoo.fr, ale@yahoo.fr" -- txt E-Mails provenant d'excel
    set My_ccs to text items of "alex@yahoo.fr, alx@yahoo.fr, ale@yahoo.fr" -- txt E-Mails provenant d'excel
    set My_ccis to text items of "alex@yahoo.fr, alx@yahoo.fr, ale@yahoo.fr" -- txt E-Mails provenant d'excel
     
    set Txt_Content to "TETST : Voilà mon texte ùàö!" & return & return
    set My_Subject to "Mon sujet"
     
    set My_Addrresses to {My_ToRecipients, My_ccs, My_ccis}
    set My_Recipients to {"to recipients", "cc recipient", "bcc recipient"} -- partie faussé juste pour la représentation
     
    tell application id "com.apple.Mail" --"Mail"
     
    	set theMessage to make new outgoing message with properties {subject:My_Subject, content:Txt_Content, visible:true}
     
    	repeat with i from 1 to count My_Recipients
    		if (count item i of My_Addrresses) > 0 then
    			repeat with Addr in item i of My_Addrresses
    				make new recipient at end of item i of My_Recipients of theMessage with properties {address:Addr, name:""} -- item i of My_Recipients => représentant to recipients puis cc recipient et bcc recipient
    			end repeat
    		end if
    	end repeat
     
    	repeat with Attach in MyAttach
    		make new attachment with properties {file name:Attach} at after the last paragraph of content of theMessage
    		--make new attachment at the end of theMessage with properties {file name:Attach}
    	end repeat
     
    end tell
    Donc j'essaie de simplifier un maximum afin de pouvoir tout passer depuis excel que ce soit pour Outlook ou Mail avec toutes les concordances possibles au niveau du code
    se
    N'hésite pas si tu as des idées de code ou des pistes à me suggérer … se serait top
    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 en n'oubliant pas d'indiquer qu'elle est la solution finale choisie

  6. #6
    Expert confirmé
    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
    Points : 4 174
    Points
    4 174
    Par défaut
    Bonjour PBELL,

    suite à ta 1ère réponse :
    Exemple de liste de records : {{address:"toto@gmail.com"},{address:"tutu@gmail.com"}}
    Il m'est venu une idée (bonne je ne sais pas) mais qui à le mérite qu'on s'y attarde peut être un peu.

    En allant dans la bibliothèque Outlook / Mail pour regarder "Recipient", je me suis dit, mais si on pouvait les déclarer comme dans l'exemple ci-dessus !?
    J'ai fait alors le test suivant qui donne un résultat (exploitable ou pas)
    mais je ne sais pas trop comment l'exploiter dans le cas où cela est possible …

    Voilà les codes tests :

    Mail :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    tell application id "com.apple.Mail" --"Mail"
     
    	set MyRecipients to {{to recipient}, {cc recipient}, {bcc recipient}}
     
    	repeat with i from 1 to count MyRecipients
    		display alert item i of MyRecipients
    	end repeat
     
    end tell
    Le log me donne (différent de display alert) :
    tell application "Mail"
    (*to recipient*)
    (*cc recipient*)
    (*bcc recipient*)
    end tell

    OutLook :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    tell application id "com.microsoft.Outlook" --"Microsoft Outlook"
     
    	set MyRecipients to {{to recipient}, {cc recipient}, {bcc recipient}}
     
    	repeat with i from 1 to count MyRecipients
    		display alert item i of MyRecipients
    	end repeat
     
    end tell
    qu'en penses tu ?

    Ryu

    Edit : je suis tombé sur «class trcp» qui lorsqu'on le met dans le code est automatiquement convertit en to recipient
    exemple :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    		make new recipient at end of «class trcp» of theMessage with properties {address:"ale@yahoo.fr"}
    devient (lorsque l'on appui sur Compiler) :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    		make new recipient at end of to recipient of theMessage with properties {address:"ale@yahoo.fr"}
    «class trcp»
    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 en n'oubliant pas d'indiquer qu'elle est la solution finale choisie

  7. #7
    Membre éprouvé

    Homme Profil pro
    Directeur de projet
    Inscrit en
    Septembre 2010
    Messages
    602
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Directeur de projet
    Secteur : High Tech - Matériel informatique

    Informations forums :
    Inscription : Septembre 2010
    Messages : 602
    Points : 1 239
    Points
    1 239
    Par défaut
    Bonsoir,
    Il ne faut pas ménager les classes d'objet. La classe de base, pour Mail, est "recipient" qui est en fait un record {address:"texte", name:"texte"}.
    Il y a ensuite 3 classes distinctes "to recipient", "cc recipient" et "bcc recipient". Il se trouve que ces trois classes sont définies pour hériter des propriétés de la classe "recipient". Malgré le fait qu'elles soient toutes 3 définies à partir de la même classe, cela ne signifie pas qu'elle soient équivalentes ou interchangeables. Elles ont chacune d'autres caractéristiques qui sont utilisées par Mail (c'est bien le but !)

    C'est d'ailleurs bien parce que ces 3 classes sont différentes, qu'elles sont appelées par 3 instructions différentes:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    make new to recipient at end of to recipients with properties {address:"xxx"}
    make  newcc recipient at end of cc recipients with properties {address:"xxx"}
    make  new bcc recipient at end of bcc recipients with properties {address:"xxx"}
    Comme indiqué précédemment, les instructions sont différentes (make new cc recipient ou make new bcc recipient) car elles sont écrites par Apple pour des classes différentes.
    Quoique tu fasses, tes tentatives, pour contourner le fait que ce sont des objets différents réagissant à des instructions différentes, sont vouées à l'échec.


    Pour Outlook, c'est peut être différent car les classes sont définies différemment : Il y a la classe "email address" qui est la même que celle de Mail {address:"texte", name:"texte"}
    Ensuite la classe "recipient", mais qui contient non seulement une "email address", mais aussi un "type" indiquant si il s'agit d'un "to", "cc" ou "bcc".
    Compte tenu de cette structure déclarative, je pense que sur Outlook, tu peux ajouter un recipient avec une instruction standard:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    make new recipient at end of recipient of theMessage with properties {xxx}
    ...à condition, bien sûr que les properties soit conforment à la classe "recipient", c'est à dire un record constitué d'un type et d'un sous-record contenant "address" et "name".
    Je n'ai pas essayé car je n'ai pas Outlook configuré, mais cela fonctionne peut être ...!? A toi de jouer.


    Cependant, pour revenir au sujet initial qui est de transmettre une seule variable, cette partie là est faisable comme je l'avais suggéré à la fin de ma réponse précédente.
    Voici un script qui ne transmet q'une seule variable:
    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
    set Mon_Sujet to "test liste adresses"
    set Mon_Content to "Ceci est un test"
    
    -- données pour l'exemple
    set Addr to "toto@gmail.com, tuto@gmail.com, titi@gmail.com" --liste de destinataires
    set AddrC to "CC@gmail.com, DD@gmalil.com" -- liste des destinataites en copie
    set AddrCC to "confid1@gmail.com" -- liste des copie confidentielles
    
    -- conversion des données en liste
    set MyReceipt to {StringToListe(Addr), StringToListe(AddrC), StringToListe(AddrCC)}
    
    -- Script principal qui ne reçoit que MyReceipt, Mon_Sujet et Mon_Content
    tell application "Mail"
    activate
        set newMessage to make new outgoing message with properties {visible:true, subject:Mon_Sujet, content:Mon_Content}
        tell newMessage
            repeat with i from 1 to count of item 1 of MyReceipt
    make new to recipient at end of to recipients with properties {address:item i of item 1 of MyReceipt}
            end repeat
            repeat with i from 1 to count of item 2 of MyReceipt
    make new cc recipient at end of cc recipients with properties {address:item i of item 2 of MyReceipt}
            end repeat
            repeat with i from 1 to count of item 2 of MyReceipt
    make new bcc recipientat end of bcc recipients with properties {address:item i of item 3 of MyReceipt}
            end repeat
        end tell
    end tell
    -- Fin du script principal
    
    
    
    
    on StringToListe(StringList) -- converti la string contenant une liste en liste
        set AppleScript'stext item delimiters to ", "
        set Liste to text items of StringList
        set MyList to {}
        repeat with i from 1 to count Liste
            set end of MyList to item i of Liste
        end repeat
        return MyList
    end StringToListe
    Cordialement

  8. #8
    Expert confirmé
    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
    Points : 4 174
    Points
    4 174
    Par défaut
    Bonjour PBELL,

    Merci pour tes réponses et éclaircissements
    Pour Mail je vais rester sur ce que tu me suggères.
    • par contre peux tu me dire la différences entre ces 2 codes car pour moi, il me semble avoir le même résultat :
    - celui-ci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    on StringToListe(StringList) -- converti la string contenant une liste en liste
    …
    …
    - et celui là :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    set Addr to "alex@yahoo.fr, alx@yahoo.fr, ale@yahoo.fr"
    set AppleScript's text item delimiters to ", "
    set emailAddress to text items of Addr
    • Concernant OutLook :
    Pour Outlook, c'est peut être différent …

    ...à condition, bien sûr que les properties soit conforment à la classe "recipient", c'est à dire un record constitué d'un type et d'un sous-record contenant "address" et "name".
    Je n'ai pas essayé car je n'ai pas Outlook configuré, mais cela fonctionne peut être ...!? A toi de jouer.
    Depuis ton dernier message j'ai eu beau chercher lire de la doc, tester, etc …, je fais chou blanc à chaque fois.
    sûrement une mauvaise compréhension de ma part, … , j'avoue avoir besoin d'un peu d'aide la dessus.
    - dans le dictionnaire OutLook :
    recipient type enum : Type of a recipient (to, cc, bcc).
    to recipient type : To recipient.
    cc recipient type : CC (carbon copy) recipient.
    bcc recipient type : BCC (blind carbon copy) recipient.

    _________________________________________________________________

    recipient n [inh. item] : An e-mail recipient.
    elements
    contained by messages.
    properties
    email address (email address) : The e-mail address of a recipient.
    type (to recipient type/*cc recipient type/*bcc recipient type, r/o) : The type of a recipient (to, cc, bcc).
    -------------------------------------------------
    inherited from item
    properties
    class (type, r/o) : The class of the object.
    properties (record) : All of the object's properties.
    responds to
    count, delete, duplicate, exists, get, move, set.
    As tu besoin d'autres éléments, ou que je fasse certains tests, afin de voir ce qui est possible ??

    Merci d'avance
    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 en n'oubliant pas d'indiquer qu'elle est la solution finale choisie

  9. #9
    Membre éprouvé

    Homme Profil pro
    Directeur de projet
    Inscrit en
    Septembre 2010
    Messages
    602
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Directeur de projet
    Secteur : High Tech - Matériel informatique

    Informations forums :
    Inscription : Septembre 2010
    Messages : 602
    Points : 1 239
    Points
    1 239
    Par défaut
    Bonsoir Ryu,

    Différence entre les 2 codes ?
    L'un fait appel à une sous-routine (qui d'ailleurs pourrait être simplifiée), l'autre traite en direct.
    L'avantage de la sous-routine réside dans le fait que tu l'écris une seulement fois et tu l'utilises autant de fois que nécessaire. Ici, StringToListe serait appelé 3 fois (to, cc et bcc) ce qui rend le script plus court et plus lisible.

    Effectivement StringTo liste peut être réduit:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    on StringToListe(StringList) -- converti la string contenant une liste en liste    set AppleScript'stext item delimiters to ", "
        set Liste to text items of StringList
        return Liste
    end StringToListe
    En ce qui concerne Outlook, j'ai fini par installer une version sur ma machine pour tester, mais je reste perplexe car il me semble qu'il y a quelques incohérences.
    En effet, nous avons les objets suivants prévus par Outlook pour Applescript:
    - 'email address' qui contient un nom et une adresse. Exemple -> {adresse:"toto@gmail.com",name:""}
    - 'recipient' qui contient un 'email address' et un type. Exemple -> {email address:{address:"toto@gmail.com",name""},type:cc recipient type}
    - 'item' qui contient un 'recipient' et une class. Exemple-> {email address:{address:"toto@gmail.com",name""},type:cc recipient type, class:cc recipient}

    J'ai obtenu cela via le dictionnaire AS pour Outlook, en croisant avec des scripts qui affichent les 'properties' des récipients d'un mail crée.
    Là se trouve d'ailleurs la première anomalie d'Outlook.
    Si tu crées un mail avec to, cc, et bcc, et que tu demandes 'get properties of every recipient', tu obtiens bien les 3 adresses, mais leur class est uniformément 'bcc recipient'!
    J'ai donc cru que c'était la classe générale d'un récipient, la distinction se faisant sur le type...mais non il s'agit visiblement d'un bug, car lorsque tu cherches, par un autre script, à créer un mail avec un recipient, seule 'cc recipient' (type et class) fonctionnent...tout en affichant, une fois crée, les properties type= 'cc recipient type' et class='bcc recipient' !!

    La syntaxe que j'ai réussi à faire fonctionner est de la forme ci-dessous :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    tell application "Microsoft Outlook"    set theMessage to make new outgoing message with properties {subject:"mon sujet", content:"Corps du message"}
    make new recipient at theMessage with properties {email address:{address:"toto@gmail.com", name:""}, type:bcc recipient type}
    make new recipient at theMessage with properties {email address:{address:"toto@gmail.com", name:""}, type:cc recipient type}
    make new recipient at theMessage with properties {email address:{address:"toto@gmail.com", name:""}, type:to recipient type}
    end tell
    Attention, Outlook ne semble pas capable de gérer les 3 types en même temps !! : le script ci-dessus donne une erreur lorsque les 3 lignes contiennent des types différents.
    Par exemple, avec cette syntaxe, impossible d'ajouter un 'to ' et un 'cc', dans le même script. Par contre ajouter 2 ligne de 'to' ou 2 lignes de 'cc' ne pose aucun problème !?@!!##

    A ce stade, je pense donc qu'il reste plus simple et tout aussi efficace de s'en remettre à une forme similaire à celle de Mail, dans laquelle l'instruction elle même contient le type de recipient :

    Les 3 adresses sont ainsi bien placées respectivement dans les champs bcc, cc et to du mail créé.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    tell application "Microsoft Outlook"    set theMessage to make new outgoing message with properties {subject:"mon sujet", content:"Corps du message"}
    make new recipient at theMessage with properties {email address:{address:"tto@gmail.com", name:""}}
    make new cc recipient at theMessage with properties {email address:{address:"tcc@gmail.com", name:""}}
    make new bcc recipient at theMessage with properties {email address:{address:"tbcc@gmail.com", name:""}}
        get properties of every recipient of theMessage
    end tell
    Tu observera que la dernière ligne permet d'afficher les récipients ainsi ajoutés...qu'Outlook affiche tous avec la class 'bcc' ...Merveilleux Outlook !!
    Voici le log :
    {{email address:{address:"tto@gmail.com"}, type class:to recipient type, class:bcc recipient},
    {
    email address:{address:"tcc@gmail.com"}, type class:cc recipient type, class:bcc recipient},
    {
    email address:{address:"tbcc@gmail.com"}, type class:bcc recipient type, class:bcc recipient}}

    Cordialement

  10. #10
    Expert confirmé
    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
    Points : 4 174
    Points
    4 174
    Par défaut Très très bonne nouvelle - à toi de me confirmer … :D
    Bonjour PBELL,

    Je tiens tout d'abord à te remercier pour l'aide apportée et aussi sur le fait que tu es installé spécialement OutLook afin de tester (Ce qui n'était pas une obligation).

    Aussi pour tes réponses précises et complètes.
    Cela me donne un meilleur aperçu et un peu plus de compréhension, même si cela peut parfois s'avérer pas encore assez claire dans mon esprit, mais on en s'y approche …

    Je mets un peu de temps à répondre car j'essaie de compléter au max ma réponse avec en sus, des éléments non mis dans le code, en l'occurrence la signature.
    Celle-ci doit être :
    - soit prise via une signature créée dans les préférences de l'application et que l'on appelle via son nom
    - soit via un string que l'on aura fait/créé
    Et pour l'instant c'est pas encore ça surtout que pour le moment je fais chou blanc pour la signature OutLook

    La bonne nouvelle, c'est ce que grâce à ton dernier code qui simplifie l'attachement des mails dans les recipients, j'ai pu résoudre mon problème,
    aussi bien dans Mail que dans OutLook (he oui dès que je peux voir une ouverture dans le code, je ne lache pas l'affaire )

    Les codes tests :

    MAIL :
    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
    try
    	set MyAttach to (choose file with prompt "Choisir des pièces à joindre" with multiple selections allowed)
    end try
     
    set AppleScript's text item delimiters to ", "
    set My_ToRecipients to text items of "alex@yahoo.fr, alx@yahoo.fr, ale@yahoo.fr" -- txt E-Mails provenant d'excel
    set My_ccs to text items of "titi1@yahoo.fr, titi32@yahoo.fr, titi14@yahoo.fr" -- txt E-Mails provenant d'excel
    set My_ccis to text items of "toto5@yahoo.fr, toto10@yahoo.fr, toto52@yahoo.fr" -- txt E-Mails provenant d'excel
     
     
    set Txt_Content to "TETST : Voilà mon texte ùàö!" & return & return
    set My_Subject to "Mon sujet"
     
    set My_Addrresses to {My_ToRecipients, My_ccs, My_ccis}
    tell application id "com.apple.Mail" --"Mail"
    	set My_Recipients to {to recipient, cc recipient, bcc recipient} -- partie faussé juste pour la représentation
     
    	set theMessage to make new outgoing message with properties {subject:My_Subject, content:Txt_Content, visible:true, message signature:signature "Signature #1"} -- , message signature:signature "Signature #1"
     
    	repeat with i from 1 to count My_Recipients
    		set Recip to item i of My_Recipients
    		if (count item i of My_Addrresses) > 0 then
    			repeat with Addr in item i of My_Addrresses
     
    				make new Recip at theMessage with properties {address:Addr, name:""}
     
    			end repeat
    		end if
    	end repeat
     
    	repeat with Attach in MyAttach
    		make new attachment with properties {file name:Attach} at after the last paragraph of content of theMessage
    	end repeat
     
    end tell
    OUTLOOK :
    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
    try
    	set MyAttach to (choose file with prompt "Choisir des pièces à joindre" with multiple selections allowed)
    end try
     
    set AppleScript's text item delimiters to ", "
    set My_ToRecipients to text items of "alex@yahoo.fr, alx@yahoo.fr, ale@yahoo.fr" -- txt E-Mails provenant d'excel
    set My_ccs to text items of "titi1@yahoo.fr, titi32@yahoo.fr, titi14@yahoo.fr" -- txt E-Mails provenant d'excel
    set My_ccis to text items of "toto5@yahoo.fr, toto10@yahoo.fr, toto52@yahoo.fr" -- txt E-Mails provenant d'excel
     
     
    set Txt_Content to "TETST : Voilà mon texte ùàö!"
    set My_Subject to "Mon sujet"
     
    set My_Addrresses to {My_ToRecipients, My_ccs, My_ccis}
    tell application id "com.microsoft.Outlook" --"Mail"
    	set My_Recipients to {to recipient, cc recipient, bcc recipient} -- partie faussé juste pour la représentation
     
     
    	set theMessage to make new outgoing message with properties {subject:My_Subject, content:Txt_Content}
     
    	repeat with i from 1 to count My_Recipients
    		set Recip to item i of My_Recipients
    		if (count item i of My_Addrresses) > 0 then
    			repeat with Addr in item i of My_Addrresses
     
    				make new Recip at theMessage with properties {email address:{address:Addr, name:""}}
     
    			end repeat
    		end if
    	end repeat
     
    	repeat with Attach in MyAttach
    		make new attachment at the end of theMessage with properties {file:Attach}
    	end repeat
     
    	open theMessage
     
    end tell
    Comme tu peux le voir, cela va me permettre de minimiser mes variables et de simplifier par la suite mon code dans VBA
    J'ai tester chez moi et au taf et c'est ok. Qu 'en est il de ton coté ??

    Si c'est OK pour toi on peut dire alors que le post est résolu concernant ma question de départ, …
    néanmoins , il me reste qq détails à résoudre pour finaliser la partie AS (signature Mail/Outlook - gestion pièces jointes quand annulation avec choose file)
    afin de l'intégrer dans VBA par la suite; j'aimerai donc savoir, si il est possible de continuer sur ce post , ou devrais je ouvrir une nouvelle discussion ??

    Ryu

    PS : quand tout sera résolu je verrai par la suite ce que je peux améliorer dans le codage.
    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 en n'oubliant pas d'indiquer qu'elle est la solution finale choisie

  11. #11
    Membre éprouvé

    Homme Profil pro
    Directeur de projet
    Inscrit en
    Septembre 2010
    Messages
    602
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Directeur de projet
    Secteur : High Tech - Matériel informatique

    Informations forums :
    Inscription : Septembre 2010
    Messages : 602
    Points : 1 239
    Points
    1 239
    Par défaut
    Bonsoir Ryu,
    Juste 2 commentaires :

    Pour Mail, la syntaxe " make new Recip at theMessage with properties{address:Addr, name:""} " ne doit pas être correcte.
    Cela devrait être :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    make new to recipientat end of to recipients with properties {address:Addr, name:""}
    Encore une fois, tu dois spécifier les to, cc et bcc pour que Maillage les adresses au bon endroit.


    Enfin, la forme de tes boucles peut être simplifiée comme ci-dessous:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    set Liste to {"A", "B", "C"}
    repeat with unItem in Liste
    display dialog unItem
    end repeat

    Il n'est pas nécessaire d'ajouter une ligne avec "count". La boucle repeat va directement tester le nombre d'items de la liste. Si ce nombre est nul, le contenu de la boucle ne s'exécute pas !
    En outre, à chaque itération de la boucle, la variable unItem prendra la valeur de chaque item de la liste, soit "A" puis "B" et enfin "C".
    Cette formulation évite le test 'if' sur le 'count', et évite l'utilisation du i comme indice.

    Content que tu obtiennes ce que tu cherchais !
    Cordialement.

  12. #12
    Expert confirmé
    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
    Points : 4 174
    Points
    4 174
    Par défaut
    Bonsoir PBELL,

    Merci de ton retour.
    Pour Mail, la syntaxe " make new Recip at theMessage with properties{address:Addr, name:""} " ne doit pas être correcte.
    J'avoue être embêté, car tu me dis que la syntaxe n'est pas correcte (j'aimerais aussi coder en AS correctement - je prends note de l'ensemble de tes remarques afin de faire le bon choix pour le code AS),
    et en même temps je me pose la question du pourquoi la syntaxe que j'ai écrite marche correctement et cible bien l'ensemble des différents recipients ???
    Est ce que cela ne veut pas dire qu'en fait cette syntaxe est correcte, ou que c'est le fait du hasard, et que cela pourrait poser problème par la suite ???

    Dans le cas où ma syntaxe n'est pas bonne car elle pourrait poser problème :
    de quel manière il faudrait alors l'écrire pour avoir le même résultat ?

    Dans le cas où ma syntaxe est correcte :
    - ce que l'on sait :
    • on a une liste représentant les récipients :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
       set My_Recipients to {to recipient, cc recipient, bcc recipient}
    donc, 3 classes distinctes "to recipient", "cc recipient" et "bcc recipient" dont les records sont {address:"texte", name:"texte"}
    Malgré le fait qu'elles soient toutes 3 définies à partir de la même classe, cela ne signifie pas qu'elle soient équivalentes ou interchangeables. Elles ont chacune d'autres caractéristiques qui sont utilisées par Mail (c'est bien le but !)
    Il se trouve que ces trois classes sont définies pour hériter des propriétés de la classe "recipient"
    Ma supposition est que le fait de faire :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
       make new Recip …
    --ou
       make new to recipient … -- ou cc recipient ou bcc recipient
    avec le pointage sur to recipient + vers le message par exemple
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
     make new Recip at theMessage …
    cela ne fait-il pas un appel implicite ??

    Pour to recipient, cc recipient et bcc recipient,
    on est dans le cas (biblio de Mail) => contained by outgoing messages, messages.
    avec les propriétés (biblio de Mail) => address (text) : The recipients email address | name (text) : The name used for display
    Ce qui donne au final :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
       make new Recip at theMessage with properties {address:Addr, name:""}
    Ca me donne l'impression d'avoir tous les ingrédients pour faire le bon code (mais je peux me tromper, j'aime bien comprendre …)
    Y a t il un moyen de vérifier tout cela ??


    Autre point :
    La boucle que tu m'as présenté dans tons post ci-dessus, je la connais et j'ai appris à l'utiliser (je la trouve pratique aussi)
    Par contre dans mon cas en utilisant la boucle que tu me proposes, comment faire pour que l'on puisse faire correspondre dans la boucle des récipients
    les mails devant correspondre à leur récipient respectif.
    Pour simplifier, on a :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
       set My_Recipients to {to recipient, cc recipient, bcc recipient}
    et
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    set AppleScript's text item delimiters to ", "
    set My_ToRecipients to text items of "alex@yahoo.fr, alx@yahoo.fr, ale@yahoo.fr" -- txt E-Mails provenant d'excel
    set My_ccs to text items of "titi1@yahoo.fr, titi32@yahoo.fr, titi14@yahoo.fr" -- txt E-Mails provenant d'excel
    set My_ccis to text items of "toto5@yahoo.fr, toto10@yahoo.fr, toto52@yahoo.fr" -- txt E-Mails provenant d'excel
     
    set My_Addrresses to {My_ToRecipients, My_ccs, My_ccis}
    donc afin de faire les correspondances on utilisera ces le 2 parties de codes :

    set My_Recipients to {to recipient, cc recipient, bcc recipient}
    et
    set My_Addrresses to {My_ToRecipients, My_ccs, My_ccis[COLOR=black]}

    Pour cela il faut que l'on détermine la position de chaque listes sur lesquelles on va boucler correspondant au récipient.
    En exemple, faudrait il l'écrire comme cela ??? :
    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
    set AppleScript's text item delimiters to ", "
    set My_ToRecipients to text items of "alex@yahoo.fr, alx@yahoo.fr, ale@yahoo.fr"
    set My_ccs to text items of "titi1@yahoo.fr, titi32@yahoo.fr, titi14@yahoo.fr"
    set My_ccis to text items of "toto5@yahoo.fr, toto10@yahoo.fr, toto52@yahoo.fr"
     
    set My_Addrresses to {My_ToRecipients, My_ccs, My_ccis}
     
    set My_Recipients to {"to recipient", "cc recipient", "bcc recipient"} --mis au format text pour la démo
     
    set i to 0
    repeat with Recip in My_Recipients
    	set i to i + 1
    	display alert i
    	repeat with Addr in item i of My_Addrresses
    		display alert "Mon Recipient est :" & return & Recip & return & return & "et le mail correspondant à ajouter est " & return & Addr
    	end repeat
    end repeat
    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 en n'oubliant pas d'indiquer qu'elle est la solution finale choisie

  13. #13
    Expert confirmé
    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
    Points : 4 174
    Points
    4 174
    Par défaut
    Bonjour PBELL,

    Je reviens vers toi, car je n'ai pa eu certaines réponses :
    1)
    j'aimerai donc savoir, si il est possible de continuer sur ce post , ou devrais je ouvrir une nouvelle discussion ??
    - concernant les signatures dans Mail et OutLook.
    Bien entendu je sais que ce n'est pas le sujet de départ, mais cela permettrait de réunir un ensemble de réponses dans un même post pour ceux qui ont des questions qui concernent Mail et OutLook (il faudra dans ce cas changer le titre de la discussion).

    2)
    Pour Mail, la syntaxe " make new Recip at theMessage with properties{address:Addr, name:""} " ne doit pas être correcte.
    - peut-on approfondir ce point (cf post ci-dessus) ?

    3)
    Enfin, la forme de tes boucles peut être simplifiée …
    - par rapport à mon cas, je t'ai donné un exemple (cf post ci-dessus), qu'en est-il? Y aurait-il une autre façon plus adéquate de procéder ?

    PS : Je comprends que tu es le seul à répondre sur le forum AS (à ma connaissance), et vu cela tu vas surement à l'essentiel pour l'aide donné …
    Dans tous les cas je te remercie pour ton aide si tu ne donnes pas suite.

    Ryu

    Edit : petit bonus : pour ceux qui font du VBA et qu'ils veulent traduire leur code AS vers le VBA, mettre le code dans une cellule de la colonne A et appliquer le code qui suit ci-dessous (ok pour code AS, mais pas testé lorsque l'on a "do shell script")
    Code vba : 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
    Sub Translate_AS_to_VBA()
    Dim AScpt$, VA, V, L&
     
        AScpt = Cells(Rows.Count, 1).End(xlUp)
        VA = Split(AScpt, vbCr)
     
        With Cells(Rows.Count, 1).End(xlUp)(2)
            .Value = "---------------------------------------- APPLESCRIPT ----------------------------------------"
            .Interior.Color = 14277081
            .Font.Bold = True
            .HorizontalAlignment = xlCenter:    .VerticalAlignment = xlCenter
                With .Offset(, 1)
                    .Value = "---------------------------------------- TO VBA ----------------------------------------"
                    .Interior.Color = 14277081
                    .Font.Bold = True
                    .HorizontalAlignment = xlCenter:    .VerticalAlignment = xlCenter
                End With
        End With
     
        For Each V In VA
            L = Cells(Rows.Count, 1).End(xlUp)(2).Row
            If Len(Trim(V)) > 0 Then
                If V <> VA(UBound(VA)) Then
                    Cells(L, 1) = V
                    V = Chr(34) & Replace(Trim(V), Chr(34), Chr(34) & Chr(34)) & Chr(34) & " & Chr(13) & _"
                    'Debug.Print V
                    Cells(L, 2) = V
                Else
                    Cells(L, 1) = V
                    V = Chr(34) & Replace(Trim(V), Chr(34), Chr(34) & Chr(34)) & Chr(34)
                    'Debug.Print V
                    Cells(L, 2) = V
                End If
            End If
        Next
        With Cells(Rows.Count, 1).End(xlUp)(2)
            .Value = "---------------------------------------- APPLESCRIPT (FIN) ----------------------------------------"
            .Interior.Color = 14277081
            .Font.Bold = True
            .HorizontalAlignment = xlCenter:    .VerticalAlignment = xlCenter
                With .Offset(, 1)
                    .Value = "---------------------------------------- TO VBA (FIN) ----------------------------------------"
                    .Interior.Color = 14277081
                    .Font.Bold = True
                    .HorizontalAlignment = xlCenter:    .VerticalAlignment = xlCenter
                End With
        End With
     
    End Sub
    vous pourrez récupérer chaque lignes indépendamment en colonne B pour faire/construire votre code VBA !
    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 en n'oubliant pas d'indiquer qu'elle est la solution finale choisie

  14. #14
    Membre éprouvé

    Homme Profil pro
    Directeur de projet
    Inscrit en
    Septembre 2010
    Messages
    602
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Directeur de projet
    Secteur : High Tech - Matériel informatique

    Informations forums :
    Inscription : Septembre 2010
    Messages : 602
    Points : 1 239
    Points
    1 239
    Par défaut
    Bonsoir Ryu,
    J'étais en déplacement ce qui explique mon silence depuis vendredi.

    Les signatures:
    Je suggère de créer un nouveau post avec un titre clair. Cela facilitera les recherches ultérieures.

    La syntaxe:
    Je pense que tu te compliques bien trop la vie.
    Si la variable My_Recipients est la liste des types d'adresses {to recipient, cc recipient, bcc recipient}, tu pourra bien boucler sur les items de cette liste, mais tu devra tester la valeur de cet indice pour mettre les bonnes adresses en provenance des tes listes My_ToRecipients ou My_ccs ou encore My_ccis !
    Cela donne le code suivant :
    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
    set My_ToRecipients to {"toto@gmail.com", "titi@gmail/com"}
    set My_ccs to {"totocc@gmail.com", "titicc@gmail/com"}
    set My_ccis to {"totobcc@gmail.com", "titibcc@gmail/com"}
    tell application "Mail"
    activate
        set My_Recipients to {to recipient, cc recipient, bcc recipient}
        set TheMessage to make new outgoing message with properties {visible:true, subject:"sujet de test", content:"Contenu de test"}
        tell TheMessage
            repeat with Recipt in My_Recipients
                if (Recipt as string) is "to recipient" then
                    repeat with MyAdr in My_ToRecipients
    make new Recipt at TheMessage with properties {address:MyAdr}
                    end repeat
                end if
                if (Recipt as string) is "cc recipient" then
                    repeat with MyAdr in My_ccs
    make new Recipt at TheMessage with properties {address:MyAdr}
                    end repeat
                end if
                if (Recipt as string) is "bcc recipient" then
                    repeat with MyAdr in My_ccis
    make new Recipt at TheMessage with properties {address:MyAdr}
                    end repeat
                end if
            end repeat
        end tell
    end tell

    Qui me semble bien moins lisible que le code ci-dessous :
    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
    set My_ToRecipients to {"toto@gmail.com", "titi@gmail/com"}
    set My_ccs to {"totocc@gmail.com", "titicc@gmail/com"}
    set My_ccis to {"totobcc@gmail.com", "titibcc@gmail/com"}
    tell application "Mail"
    activate
        set TheMessage to make new outgoing message with properties {visible:true, subject:"sujet de test", content:"Contenu de test"}
        tell TheMessage
            repeat with Ad in My_ToRecipients
    make new to recipient at TheMessage with properties {address:Ad}
            end repeat
            repeat with Ad in My_ccs
    make new cc recipients TheMessage with properties {address:Ad}
            end repeat
            repeat with Ad in My_ccis
    make new bcc recipients TheMessage with properties {address:Ad}
            end repeat
        end tell
    end tell


    La forme des boucles:
    Tu peux utiliser les 2 formes de repeat, soit avec un indice (repeat with I from 1 to count of xxx) , soit sans (repeat with unItem in xxx).
    La version avec indice peut être utile lorsque tu comptes ou que le rang est important, ou encore que tu souhaites un incrément différent de 1. Ce n'est pas le cas ici.
    La version sans indice est plus lisible. Ici elle suffit.



    Cordialement

  15. #15
    Expert confirmé
    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
    Points : 4 174
    Points
    4 174
    Par défaut
    Bonjour PBELL,

    Merci pour ton retour !

    Quelque chose doit m'échapper, où on ne doit pas avoir le même résultat, car quand tu dis :
    Si la variable My_Recipients est la liste des types d'adresses {to recipient, cc recipient, bcc recipient}, tu pourra bien boucler sur les items de cette liste, mais tu devra tester la valeur de cet indice pour mettre les bonnes adresses en provenance des tes listes My_ToRecipients ou My_ccs ou encore My_ccis !
    … justement en fait je n'ai pas besoin de tester la valeur car la boucle me renvoie bien Recip en tant que classe de :
    to recipient puis cc recipient et pour finir bcc recipient
    comme en post #10 (l'exemple du post #12 n'étant là que pour montrer les correspondances dans les 2 boucles entre les recipients et les adresses mails respectives à chaque recipient)
    Donc en effet, si l'on rajoute la vérification en plus dans le 1er code proposé, cela est moins lisible.
    Le 2 ème code est en effet beaucoup plus lisible, mais le but final et de que tout cela va se retrouver dans du VBA d'où ma recherche de simplification au maximum …

    Avec les éléments fournis dans tes réponses, il y en a une qui retenue mon attention :
    Il n'est pas nécessaire d'ajouter une ligne avec "count". La boucle repeat va directement tester le nombre d'items de la liste. Si ce nombre est nul, le contenu de la boucle ne s'exécute pas !
    … … …
    Cette formulation évite le test 'if' sur le 'count', et évite l'utilisation du i comme indice.
    alors le i j'en aurai surement besoin pour mettre les e-mails sur les bon récipients mais la boucle tel quel me donne alors les avantages que tu cites
    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
     … … …
    set AppleScript's text item delimiters to ", "
    set My_ToRecipients to text items of "alex@yahoo.fr, alx@yahoo.fr, ale@yahoo.fr" -- J'utiliserai bien sur la fonction que tu m'as fourni ;)
    set My_ccs to text items of "titi1@yahoo.fr, titi32@yahoo.fr, titi14@yahoo.fr"
    set My_ccis to text items of "toto5@yahoo.fr, toto10@yahoo.fr, toto52@yahoo.fr"
     
    set My_Addrresses to {My_ToRecipients, My_ccs, My_ccis}
    set My_Recipients to {to recipient, cc recipient, bcc recipient} --mis au format text pour la démo
     
    set i to 0
    repeat with Recip in My_Recipients
    	set i to i + 1
    	repeat with Addr in item i of My_Addrresses
    		make new Recip at theMessage with properties {address:Addr, name:""}
    	end repeat
    end repeat
    … … …
    Bien sur tout cela dans le :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    ………
     tell application id "com.apple.Mail"
    	set theMessage to make new outgoing message with properties {subject:My_Subject, content:Txt_Content}
    ………

    MAJ du Petit bonus de mon post précédent :
    Code vba : 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
    Sub Translate_AS_to_VBA_V2()
    Dim AScpt$, VA, V, L&, DL_AS$
     
        AScpt = Cells(Rows.Count, 1).End(xlUp):     VA = Split(AScpt, vbCr):     DL_AS = "" ' OU => " & Chr(13) & _" <= POUR METTRE UN RETOUR LIGNE A LA FIN DU CODE AS POUR VBA
        Application.ScreenUpdating = False
        Sepa_AS_VBA "APPLESCRIPT", "TO VBA", 70, "-"
     
        For Each V In VA
            L = Cells(Rows.Count, 1).End(xlUp)(2).Row
            If Len(Trim(V)) > 0 Then
                If V <> VA(UBound(VA)) Then
                    Cells(L, 1) = V
                    V = Chr(34) & Replace(Trim(V), Chr(34), Chr(34) & Chr(34)) & Chr(34) & " & Chr(13) & _":                Cells(L, 2) = V
                Else
                    Cells(L, 1) = V
                    V = Chr(34) & Replace(Trim(V), Chr(34), Chr(34) & Chr(34)) & Chr(34) & DL_AS:                Cells(L, 2) = V
                End If
            End If
        Next
     
        Sepa_AS_VBA "APPLESCRIPT (FIN)", "TO VBA (FIN)", 70, "-"
        Application.ScreenUpdating = True
     
    End Sub
     
    Function Sepa_AS_VBA(Deb$, Fin$, Cpt As Byte, Sep$)
        With Cells(Rows.Count, 1).End(xlUp)(2)
            .Value = String(Cpt, Sep) & " " & Deb & " " & String(Cpt, Sep)
            .Interior.Color = 14277081:     .Font.Bold = True
            .HorizontalAlignment = xlCenter:    .VerticalAlignment = xlCenter
                With .Offset(, 1)
                    .Value = String(Cpt, Sep) & " " & Fin & " " & String(Cpt, Sep)
                    .Interior.Color = 14277081:     .Font.Bold = True
                    .HorizontalAlignment = xlCenter:    .VerticalAlignment = xlCenter
                End With
        End With
    End Function

    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 en n'oubliant pas d'indiquer qu'elle est la solution finale choisie

  16. #16
    Membre éprouvé

    Homme Profil pro
    Directeur de projet
    Inscrit en
    Septembre 2010
    Messages
    602
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Directeur de projet
    Secteur : High Tech - Matériel informatique

    Informations forums :
    Inscription : Septembre 2010
    Messages : 602
    Points : 1 239
    Points
    1 239
    Par défaut
    Bonjour,
    En fait tu contournes le problème que j'indiquait en imbriquant 2 boucles. Parfait.
    Dans ce cas, tu peux encore simplifier, finalement en utilisant un indice, mais cela devient moins lisible il me semble:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
        repeat with I from 1 to 3
            repeat with Addr in item I of My_Addrresses
    make new (item I of My_Recipients) at theMessage with properties {address:Addr, name:""}
            end repeat
        end repeat
    C'est d'ailleurs souvent le compromis à trouver ente écriture compacte et écriture lisible. Ayant eu à reprendre, parfois des années après, des programmes, je privilégie l'écriture lisible, quitte à ce qu'elle soit un peu plus longue.

    Cordialement

  17. #17
    Expert confirmé
    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
    Points : 4 174
    Points
    4 174
    Par défaut
    Re,
    Dans ce cas, tu peux encore simplifier, finalement en utilisant un indice, mais cela devient moins lisible il me semble:
    je suis tout à fait d'accord avec toi !!

    Ayant eu à reprendre, parfois des années après, des programmes, je privilégie l'écriture lisible, quitte à ce qu'elle soit un peu plus longue.
    C'est la meilleure chose à faire lorsque l'on écrit un programme.

    Dans mon cas je vais faire un compromis entre lisibilité et écriture compacte, je vais rester donc rester sur cette boucle que je trouve assez lisible
    (en tout cas pour moi) :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    set i to 0
    repeat with Recip in My_Recipients
    	set i to i + 1
    	repeat with Addr in item i of My_Addrresses
    		make new Recip at theMessage with properties {address:Addr, name:""}
    	end repeat
    end repeat
    Je pense avoir fait le tour sur ce point et te remercie bcp pour ton aide (je vais passer sur un autre post pour les points bloquants : signature)

    PS : as tu essayé le code vba que j'ai mis pour transcrire le code AS dans le code VBA ? si oui qu'en penses tu ? as tu des remarques ?

    Ryu

    PS 2: je me suis un peu amélioré en AS et j'ai pu faire plusieurs script en l’occurrence sur InDesign, c'est très pratique
    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 en n'oubliant pas d'indiquer qu'elle est la solution finale choisie

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

Discussions similaires

  1. Utiliser une variable pour mettre des étiquettes visible
    Par patate5555 dans le forum VBA Access
    Réponses: 8
    Dernier message: 21/06/2007, 13h51
  2. Réponses: 9
    Dernier message: 16/02/2007, 15h10
  3. Utiliser une variable pour stocker les noms d'objets.
    Par en_gel_ho dans le forum Access
    Réponses: 4
    Dernier message: 03/01/2007, 16h44
  4. Réponses: 7
    Dernier message: 07/09/2004, 14h16
  5. [XSL] utiliser une variable pour nom d'élément
    Par luta dans le forum XSL/XSLT/XPATH
    Réponses: 13
    Dernier message: 07/09/2004, 13h58

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