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
| -- gestion des mails de demandes et réponses : P_Bell 2017
-- défini le chemin vers mon fichier Excel
set Mon_Desktop to (path to desktop folder) as string
set Base_Excel to Mon_Desktop & "tests:Base.xlsx"
-- défini les boîtes Mail qui doivent exister dans Mail avec eactement le même nom
set B_Demandes to "Test_Demandes"
set B_Reponses to "Test_Réponses"
set B_Traite to "Test_Traités"
-- défini le début d'un mail de demande. Le No Réf de mission est ce qui suit
set Debut_titre to "Ref : " -- attention aux espaces avant ou après les :
-- défini les réponses d'accusé de reception accepté ou refusé (si qq a déjà répondu oui avant)
set Message_OK to "Merci d'avoir accepté cette mission." & return & "Cordialement."
set Message_Rejete to "Désolé, cette mission a déjà été acceptée." & return & "Cordialement."
-- initialise les compteurs
set Nb_Demande to 0
set Nb_Reponse to 0
set Nb_Accepte to 0
-- ouvre le fichier Excel
tell application "Microsoft Excel"
try
open file Base_Excel
on error
display alert "impossible d'ouvrir le fichier " & Base_Excel
return
end try
activate
set Nb_Base to count of rows of used range of active sheet-- lit le nombre de lignes sucessives
end tell
-- lit la boîte Mail B_Demande et traite les mail de demandes
tell application "Mail"
set M_Demande to every message of mailbox B_Demandes
repeat with M in M_Demande-- parcours les emails
set Titre to (subject of M) as string
if (offset of Debut_titre in Titre) is 1 then -- c'est bien un email de demande !
set Titre to rich text (1 + (length of Debut_titre)) thru -1 of Titre -- extrait le No de référence
set Nb_Base to Nb_Base + 1 -- incrémente le nombre de lignes dans la base
tell application "Microsoft Excel" to set value of range ("A" & Nb_Base) of sheet 1 to Titre -- écrit la nouvelle demande dans le fichier Excel
set Nb_Demande to Nb_Demande + 1 -- incrémente le nombre de demandes traitées
set mailbox of M to mailbox B_Traite-- déplace le mail vers la boite traité
end if
end repeat -- mail suivant
end tell
tell application "Microsoft Excel" to save-- enregistre le fichier Excel
-- lit la boîte Mail Réponses et traite les réponses
tell application "Mail"
set M_Reponses to every message of mailbox B_Reponses
repeat with M in M_Reponses-- parcours les emails
set Expediteur to sender of M
set Titre to (subject of M) as string
set WRep to first word of content of M-- extrait le premier mot de la réponse
-- recherche si le titre est valide et si il existe dans la base Excel
set Pos to offset of Debut_titre in Titre
if Pos > 0 then -- le mail contient bien le texte de début de demande
set NoRef to (rich text (Pos + (length of Debut_titre)) thru -1 of Titre) as string
tell me to set Ligne to ChercheLigne(NoRef)
else
set Ligne to 0 -- le mail ne contient pas un titre valide !
end if
if Ligne > 0 then -- c'est une réponse valide correspondant à la ligne Ligne de la base Excel
if WRep is in {"Oui", "oui", "OUI"} then -- réponse positive : on recherche la ligne dans Excel avec NoRef
tell application "Microsoft Excel" to set Assigne to value of range ("B" & Ligne) -- lit l'assignation de la mission
if Assigne = "" then --la mission n'est pas encore assignée
set Nb_Accepte to Nb_Accepte + 1
tell application "Microsoft Excel" to set value of range ("B" & Ligne) to Expediteur -- met le mail de l'exécutant
set Ma_reponse to Message_OK & return & return & content of M-- prepare la réponse OK accusé
else -- prépare la réponse que cette mission est déjà assignée
set Ma_reponse to Message_Rejete & return & return & content of M
end if
set M_Accuse to make new outgoing message with properties {visible:false, subject:subject of M, content:Ma_reponse}
tell M_Accuse to make new to recipient at end of to recipients with properties {address:Expediteur}
send M_Accuse
end if -- réponse Oui
set mailbox of M to mailbox B_Traite-- déplace le mail vers la boîte traité
set Nb_Reponse to Nb_Reponse + 1 -- incrémente le compteur des réponses
end if -- mail à traiter car titre valide (Ligne > 0)
end repeat -- mail suivant
end tell
tell application "Microsoft Excel" to close active workbook saving yes-- ferme le document Excel en sauvegardant
-- récapitulatif de traitement
activate-- pour mettre le script au premier plan
display dialog "Traitement terminé: " & return & "Nb de nouvelle demandes = " & Nb_Demande & return & "Nb de réponses = " & Nb_Reponse & return & "Nb missions assignées = " & Nb_Accepte
-- fin du script
on ChercheLigne(NRef) -- recherche le N° de ligne où se situe NRef en colonne A. Renvoie 0 si pas trouvé, sinon N° de ligne
tell application "Microsoft Excel"
set I to 2 -- on démarre la recherche en ligne 2 car la 1 est une ligne d'entête
repeat while (value of range ("A" & I) is not "") and (value of range ("A" & I) is not NRef)
set I to I + 1
end repeat
if value of range ("A" & I) = "" then
return 0
else
return I
end if
end tell
end ChercheLigne |
Partager