Ecrire sur un fichier excel en applescript
Bonjour,
Malgré mes recherches sur la toile, je n'ai pas trouvé la solution à mon problème.
Etant sur Mac et ayant excel 2008, version 12, je pense qu'applescript pourrait m'aider.
En outre, sur ce forum, j'ai déjà "échafauder une usine à gaz" mais très pratique et très efficace grâce à des contributeurs très actif, PBell pour ne pas le nommer.
Voici le but que j'aimerais atteindre :
J'ai une base de données excel enregistrée en .txt (ce format est nécessaire pour pouvoir être lu par un autre logiciel).
J'aurais aimé savoir s'il était possible d'avoir un script ainsi :
J'ouvre le script, ma base de données excel, contenant déjà des données et enregistrée en .xlsx, s'ouvre en arrière plan.
Le script fait apparaitre une boite de dialogue au premier plan qui me propose un champ de saisie et 2 boutons : OK et Annuler
Dans le champ de saisie, j'entre un nom de dossier (ex : Dossier01) et celui-ci s'inscrit dans la première cellule disponible de la colonne A et B.
D'office s'inscrit sur la même ligne un chemin d'accès A en colonne D et un autre chemin d'accès B en colonne E (ces chemins d'accès sont différents ; je pense donc qu'il faudrait les noter "en dur" dans le script).
Enfin, soit je valide (et les données sont écrites dans le fichier excel), soit j'annule et le boite de dialogue disparait et le fichier excel se ferme.
Si je valide, le fichier xlsx procèdeà un tri par ordre croissant se fait, le fichier excel crée une copie en .txt (ce fichier écrasant l'ancien existant déjà au même endroit) et va se copier dans un autre dossier se trouvant à : Application/Logiciel, écrasant aussi l'ancien fichier .txt portant le même nom. Les fichier excel .xlsx se referme et la boite de dialogue applescript disparait.
Est-ce que cela est possible en applescript ?
Merci, je vois ça et te tiens au courant
Salut PBell,
Merci pour ton aide, je vois ça et te tiens au courant.
A bientôt.
Script testé - En bonne voie
Salut PBell,
J'ai testé ton script et il y a quelques soucis dûs à mes imprécisions
Ci-dessous mon code adpaté :
Code:
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
| set Chemin_A to "mon chemin A"
set Chemin_B to "mon chemin B"
set FichierTXT to "HDD:TRAVAUX:Test.txt"
set XLBase to "HDD:Users:Martinez:Desktop:Test.xlsx" -- nom et chemin de la base XL
set Dos_01 to "HDD:TRAVAUX:ActionDossierTravauxEnCours:AFC:00-TRAVAUX EN COURS" -- création du Nom Client dans dans 01DossierTravauxEnCours
tell application "Finder"
-- boucle de saisie du nom de client jusqu'à ce que Mon_OK soit vrai (= la saisie n'est pas vide et la dossier n'existe pas déjà)
set Mon_Dossier to false
repeat until Mon_Dossier
set Dos_Nom to "Nom_Client"
set Saisie to (display dialog "Saisissez le nom du client" default answer Dos_Nom)
set Dos_Nom to text returned of Saisie
if not (Dos_Nom is "") then if not (exists (Dos_01 & Dos_Nom)) then set Mon_Dossier to true
if not Mon_Dossier then display dialog "Le nom saisi est vide ou ce nom existe déjà !" & return & "Veuillez resaisir un nom."
end repeat
open XLBase
end tell
tell application "Microsoft Excel"
activate front document
set Ma_Base to used range of active sheet
set Nb_Lignes to (count of rows of Ma_Base)
repeat with I from 1 to Nb_Lignes
if value of cell ("A" & I) is equal to "" then exit repeat
end repeat
if value of cell ("A" & I) is not equal to "" then set I to I + 1 -- si pas de cellule vide on insère une en bas
-- i est la première ligne dont la cellule A est vide
set value of cell ("A" & I) to Dos_Nom
set value of cell ("A" & I) to Dos_Nom
set value of cell ("B" & I) to Dos_Nom
set value of cell ("D" & I) to Chemin_A
set value of cell ("E" & I) to Chemin_B
set Ma_Base to used range of active sheet
select cell "A1"
sort Ma_Base key1 range "A1" order1 sort ascending
save
quit saving no
end tell |
Ton script va tout à fait dans le sens que je souhaitais : je peut écrire dans un fichier excel, le tri sur la colonne A se fait. Le fichier excel s'enregistre et excel quitte.
Toutefois, quelques petits dysfonctionnements :
1) : effectivement je voulais plutôt un display dialog, ce que j'ai inséré en ligne
En fait j'ai repris les lignes de code du précédent script (concernant la discussion précédente Création de Dossier) (voir lignes 10 à 18) mais je pense que cette partie de code peut être nettoyée (si je ne déclare pas la valeur Dos_01 en ligne 6 ça ne marche pas et pourtant cette valeur n'a rien à faire ici.
2) : Si j'entre un dossier déjà présent dans le fichier excel, je ne suis pas averti et une 2° ligne portant le même nom saisi est créée (malgré la ligne 17). Je voudrais être averti pour éviter de rentrer 1 2° fois ce nom de dossier.
3) : Enfin, un fichier .txt est bien créé au chemin d'accès que je souhaite (pour l'instant j'indique un autre chemin que celui du dossier application) mais il est vide. Je voudrais en fait qu'après chaque nouvelle entrée dans le fichier .xlsx, celui-ci se transforme en .txt (donc contenant toutes les infos).
Penses-tu qu'on peut résoudre ces soucis ?
Boucle de vérification dans tableau excel ne fonctionne pas
Bonjour,
J'ai essayé d'inclure entre la ligne 12 et 18 la boucle qui vérifie si dans le tableau excel le nom de dosser entré existe ou pas et ça m'affiche des messages d'erreur.
En effet, la variable Nb_Lignes est définie plus bas et donc n'est pas reconnue. J'ai essayeé de la définir plus haut mais ça ne marche pas.
Quant à ta 2° proposition j'avoue que je ne sais pas trop comment procéder. Faire une liste applescript c'est au delà e mes compétences. Dnas l'absolu, ce tableau excel devrait contenir au maximum 500 lignes. Donc est-ce que ça pourrait marchez ?
Peux-tu m'aiguiller ?
3 autres petites questions :
- Est-il possible d'inclure dans une boite de dialogue une signature (non modifiable pas l'utilisateur) ?
- Lorsque j'insère mon nom de dossier dans dans la tableau xlsx., est-il possible de faire en sorte que le fond de la cellule soit d'une certaine couleur et le texte saisi d'un autre couleur ?
- Sur la tableau excel, est-il possible de "condamner" la 1° ligne (car je souhaiterais y insérer les titres des colonnes avec des filtres). Donc les boucles de vérification devraient exclure cette ligne.
Merci d'avance de ton aide.
Super... je te tiens au courant
Salut PBell,
Effectivement gros boulot pour coller au plus près à ce que je souhaite.
Je teste ça et te tiens au courant.
A+ et merci.
Explication plus précises
Salut PBell,
J'ai donc testé ton nouveau script mais j'ai des soucis.
Sur le fichier excel, le fond de la cellule est bien bleu comme définit dans le script mais le nom entré n'est pas en gras. Comment faire ?
En outre, le tri par ordre croissant se fait jusqu'à la première ligne alors que je voudrais que celle-ci soit exclue du tri. En effet, je voudrais attribuer à chacune des cellules de la première ligne la possibilité de faire des tris ou autre.
Mais le gros problème est que le script ne détecte pas si dans le tableau excel le nom entré existe déjà ou pas, du coup on pourrait avoir des doublons.
Voilà comment je vois les choses :
Si le nom du dossier entré (dossier X) dans la boite de dialogue existe déjà dans le dossier travail
et si
si ce même nom de dossier existe déjà dans la tableau excel
Alors on aurait une boite de dialogue disant le dossier (on récupère le nom du dossier dossier X) existe déjà et un bouton annuler qui annulerait la procédure et refermerait le tableau excel (sans quitter excel)
SINON c'est que le dossier (dossier X) existe déjà dans la dans le dossier travail et n'existe pas dans le tableau excel
DONC LÀ on aurait une boite de dialogue qui récupère le nom de ce dossier (dossier X) dans le dossier travail avec le message : Voulez-vous créer la ligne "Dossier X" avec un bouton OK ou annuler
SINON, c'est à dire si le nom de dossier entré (dossier X) n'existe pas dans le dossier travail ni dans le tableau excel, on peut rentrer le nom du dossier dans le tableau excel.
Voilà, c'est vrai qu'il est difficile de mettre par écrit un raisonnement conditionnel.
Penses-tu que cela soit faisable ?
Super... merci beaucoup, ça marche nickel...
Salut PBell,
En l'état, ton dernier script est conforme à ce que je souhaitais.
Tu as tout à fait compris mon cheminement, mais en fait, j'ai mis du temps à t'exposer ce que je voulais réellement.
Dès que c'était clair pour toi... comme par hasard le bon script a pointé le bout de son nez.
Bref, je suis super content, ça fonctionne nickel.
Seul bémol : le texte entré n'apparait toujours pas en gras. Alors j'ai définis sur excel que la colonne A soit tout en Verdana gras (le gras est prévu chez Verdana) mais malgré ça on voit bien qu'il s'inscrit en gras, le tri se fait et, subrepticement, avant que le fichier excel se referme j'arrive à repérer le nom entré mais il n'est plus en gras. Et effectivement, quand je réouvre le fichier (puisque le script le referme), il n'est pas en gras. Mais, bon c'est pas grave, je vais essayé de creuser.
Je reviendrais vers toi sur la possibilité donnée à l'utilisateur d'entrer un autre nom de dossier dans le cas où le nom entré existe déjà dans le dossier travail et dasn le dossier excel. En effet, je pense qu'on doit prévoir l'éventualité où l'utilisateur ait pu se tromper en entrant son nom de dossier. En effet, parfois on attribue des noms très semblables à des dossiers différents... mais ils restent différents...
EN tout cas, merci pour tout, encore une fois tu a su répondre à un défi, en tout cas le mien, c'est à dire créer une mini application qui va faciliter la vie au quotidien d'une dizaine de personne.
Je vais entrer dans les détails du script et te tiens au courant.
3 questions connexes :
Jusqu'où va le script pour vérifier l'existence ou pas du dossier présent dans le dossier travail.
En l'espèce, le dossier travail est "HDD:TRAVAUX:". Je voudrais que la recherche s'arrête là et n'aille pas jusque dans les sous-dossiers éventuels présent des dossiers déjàa présent.
Ex : si 1 dossier "X" (qui contient des sous-dossiers") est présent dans "HDD:TRAVAUX:", je ne voudrais pas que le script aille vérifier si le nom entré existe déjà dans le dossier X. Est-ce le cas ?
Tu comprends je ne voudrais pas que la vérification dure trop longtemps.
Autre question : la signature dont je te parlais, serait un texte non éditable mais qui figurerait sur les boites de dialogue. Aucune envie de s'approprier une certaine gloire mais juste indiquer la date de création du script en vue d'une évolution ultérieure.
Dernière question :
Je suis sur Tiger (et oui !) et X Code ne fonctionne pas très bien (il plante souvent). Connais-tu ce problème ?
Merci encore PBell, à bientôt.
Ça fonctionne parfaitement
Salut,
Merci PBell, ça fonctionne bien.
Ça ne se met pas en gras, mais ce n'est pas grave.
Pour la signature, j'ai testé avec des icones et là aussi j'obtiens ce que je voulais (sur les boites de dialogue car pour les display alert effectivement ça ne semble par marcher).
Je laisse la discussion encore ouverte le temps de le tester en configuration réelle.
Merci encore pour la précieuse contribution.
A bientôt.