enregistrer une des feuilles d'un classeur excel à heure fix

lendormi

Membre enregistré
2 Juin 2005
8
0
50
Bonjour,

Dans un dossier, j'ai des classeurs excel dont le nom correspond à un numéro de semaine.

Chaque classeur excel comporte 12 feuilles, une par demi journée du lundi au samedi.

Chaque jour, manuellement, j'enregistre 2 de ces feuilles en pdf dans un dossier situé sur un volume réseau de mon entreprise, pour qu'ils s'affichent dans une fenêtre d'un navigateur "maison" basé sur le webkit.

Je dois m'absenter pendant quelques semaines pour profiter de vacances si ce n'est méritées, au moins attendues...

Je souhaiterai pouvoir automatiser ces actions et qu'elles s'exécutent à deux moments de la journée (les heures sont connues à l'avance).

En gros, il faut récupérer le numéro de la semaine, récupérer le jour de la semaine, puis à 11h30 enregistrer la feuille correspondant à l'après midi et à 18h30, enregistrer celle du lendemain matin. Le samedi, petit changement, à 18h30, on enregistre la feuille du lundi matin de la semaine suivante.

Je suis parfaitement débutant en script, en automator ou autres joyeusetés mais je suis plein de bonne volonté...

J'ai commencé à regarder dans automator, mais, d'une part, je n'y comprends pas grand chose, d'autre part, je vois qu'on peut récupérer un classeur mais pas pas une feuille dans un classeur.

Si vous avez des pistes à m'indiquer je suis preneur.

Merci.
 
Bonjour,

En continuant mes recherches à droite à gauche, je suis tombé sur deux pages qui traitent de la manipulation des dates (pour les anglophones mais la lecture des scripts doit permettre de comprendre ce que l'auteur essaye d'expliquer).

La première est assez complète :
http://macscripter.net/viewtopic.php?id=24737

La deuxième cite la première mais juste sur un des thèmes qui m'intéresse, à savoir le calcul du numéro de la semaine :
http://www.productionmonkeys.net/2008/august/applescript-date-calculations

En modifiant un peu le script, on arrive à calculer le nombre de semaines qui séparent la date du jour du premier janvier de l'année en cours (c'était une des premières étapes dans la résolution de mon petit casse tête...).
Voici pour info ce que ça donne (si vous avez des remarques n'hésitez pas, je cherche à comprendre en plus de chercher à résoudre...) :


on getDatesWeekNum(theDate)
set {dDate, dDateNum} to {"1/1/1000", 364878}
return ((theDate - (date dDate)) div days + dDateNum) div 7 + 1
end getDatesWeekNum

return ((getDatesWeekNum(date ((current date) as string)) - getDatesWeekNum(date ("1/1/" & year of (current date) as string))))


Etape suivante, récupérer les deux premières lettres du jour de la semaine (je pense pas que ce soit trop compliqué mais c'est intéressant alors j'y retourne...)

---------- Nouveau message ajouté à 09h41 ---------- Le message précédent a été envoyé à 08h04 ----------

Pour l'étape suivante (les deux premières lettres du jour courant) voilà ce que ça donne :

set laDate to date string of (current date)
set deuxPremieresLettresJour to text 1 thru 2 of laDate


pour avoir le nom de ma feuille je n'aurais plus qu'à concaténer deuxPremiersLettresJour avec, soit " matin" soit " soir" pour avoir le nom de ma feuille dans mon classeur Excel.

Manquent quelques adaptations pour réutiliser les mêmes bouts de code dans tous les cas (par exemple, prenons le cas d'aujourd'hui ) :

il est 11h30 -> je veux accéder à la feuille "me soir" du classeur "30.xls"​

il est 18h30 -> je veux accéder à la feuille "je matin" du classeur "30.xls"​

nous sommes samedi à 18h30 - > je veux accéder à la feuille "lu matin" du classeur "31.xls"​

Ces adaptations devraient encore être à ma portée, mais j'avoue que la partie qui me fait le plus peur est celle qui manipule le classeur mais peut-être que je me fais une montagne pour pas grand chose... On verra bien...
 
Bonjour,
Je n'ai pas beaucoup avancé sur mon script mais voilà à quoi il ressemble aujourd'hui :

on getNumSemaineAnMil(laDate)
set {dDate, dDateNum} to {"1/1/1000", 364878}
return ((laDate - (date dDate)) div days + dDateNum) div 7 + 1
end getNumSemaineAnMil

on getNumSemaineAnneeCourante(laDate)
return ((getNumSemaineAnMil((date (laDate))) - (getNumSemaineAnMil(date ("1/1/" & year of (current date) as string)))))
end getNumSemaineAnneeCourante

on getDeuxPremieresLettresJour(laDate)
return text 1 thru 2 of laDate
end getDeuxPremieresLettresJour

if getDeuxPremieresLettresJour((current date) as string) = "sa" then
set laDate to date string of ((current date) + 2 * days)
set laSemaine to (getNumSemaineAnneeCourante(laDate + 2))
set laFaction to " matin"
else
if ((time of (current date)) div hours) > 12 then
set laDate to date string of (current date)
set laFaction to " soir"
else
set laDate to date string of ((current date) + 1 * days)
set laFaction to " matin"
end if
set laSemaine to (getNumSemaineAnneeCourante(laDate))
end if

set ligne1 to "Date et heure : " & (current date) & return
set ligne2 to "Date de la feuille à afficher : " & laDate & return
set ligne3 to "Faction de la feuille à afficher : " & laFaction & return
set ligne4 to "Dans le classeur de la semaine : " & laSemaine & return
display alert ligne1 & ligne2 & ligne3 & ligne4 buttons {"Ok!"}


Si un "expert" en Applescript passe dans les parages, je suis preneur de toute remarque...

Suite au prochain épisode...