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 :

Pb de Débutant


Sujet :

AppleScript

  1. #1
    Membre à l'essai
    Homme Profil pro
    Enseignant
    Inscrit en
    Juillet 2017
    Messages
    17
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Enseignant
    Secteur : Conseil

    Informations forums :
    Inscription : Juillet 2017
    Messages : 17
    Points : 12
    Points
    12
    Par défaut Pb de Débutant
    Salut !!!

    Je découvre AppleScript suite à une embauche.

    Je bute sur un truc qui va vous paraitre très facile.
    J'ai un fichier xls que j'ai besoin de transformer en Txt ( séparateur Tab) après avoir rempli des données dedans
    Le fichier xls comprend 4 feuilles , je dois enregistrer sous txt la feuille "Prod" et la feuille "Fam"
    J'ai un message d'erreur au moment de l'enregistrer sous
    Aidez moi
    -----------------------
    set Nom1 to (path to desktop folder as string) & "Import Produits.xlsx" -- Nom du fichier*
    set Nom2 to (path to desktop folder as string) & "Familles.txt" -- Nom du fichier* à créer en txt
    set Nom3 to (path to desktop folder as string) & "Produits.txt" -- Nom du fichier** à créer en txt


    set chaineMessage1 to "Cette application va copier vos produits d'une société A vers une société B"
    set tempRep1 to display dialog chaineMessage1 buttons {"Arreter", "Continuer"}

    set CoefPA to display dialog "Quel Coef voulez-vous appliquer sur le Prix d'achat" default answer ""
    set SaisiCoefPA to text returned of CoefPA
    set SaisiCoefPA to SaisiCoefPA as number
    set CoefPA1 to SaisiCoefPA * 100
    set chaineMessage2 to "Vous avez saisie un coef de : " & SaisiCoefPA & "*
    Exemple :*
    Un produit au prix d'achat de 100 € sur soc A deviendra :* " & CoefPA1 & " € sur soc B"
    set tempRep2 to display dialog chaineMessage2 buttons {"Arreter", "Continuer"}

    set CoefPU to display dialog "Quel Coef voulez-vous appliquer sur le Prix Unitaire HT" default answer ""
    set SaisiCoefPU to text returned of CoefPU
    set SaisiCoefPU to SaisiCoefPU as number
    set CoefPU1 to SaisiCoefPU * 100
    set chaineMessage3 to "Vous avez saisie un coef de : " & SaisiCoefPU & "*
    Exemple :*
    Un produit au prix Unitaire de 100 € sur soc A deviendra :* " & CoefPU1 & " € sur soc B"
    set tempRep3 to display dialog chaineMessage3 buttons {"Arreter", "Continuer"}

    set Soc to display dialog "Dans quelle société voulez-vous copier les produits ?" default answer ""
    set SaisieSiren to text returned of Soc
    set chaineMessage4 to "Vous avez demandez la société : " & SaisieSiren & "*
    Voulez-vous continuer ?"
    set tempRep4 to display dialog chaineMessage4 buttons {"Arreter", "Continuer"}



    tell application "Microsoft Excel" -- Ouvrir excel
    set silently of window 1 to true
    set visible to false
    open text file filename Nom1 origin Macintosh -- Ourir le fichier export txt

    select sheet "DATA"
    set value of cell ("B" & "1") to SaisiCoefPA
    set value of cell ("B" & "2") to SaisiCoefPU
    set value of cell ("B" & "3") to SaisieSiren

    select sheet "Prod"
    tell active workbook to save workbook as filename Nom3 file format text Mac file format
    close active workbook saving no
    end tell

  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,
    Ton script donne une erreur car tu cherches à enregistrer ton workbook actif dans un format texte, ce que Excel ne sait pas faire.
    Excel sait enregistrer la feuille active en fichier texte, pas le Workbook complet.

    Le code ci-dessous donne un exemple d'enregistrement sans erreur :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    set Nom2 to (path todesktop folder as string) & "Familles.txt" -- Nom du fichier* à créer en txt
    set Nom3 to (path todesktop folder as string) & "Produits.txt" -- Nom du fichier** à créer en txt
    
    
    tell application "Microsoft Excel"
    activate
    select sheet "Fam"
    save active sheet in Nom2 as current platform text file format
        
    select sheet "Prod"
    save active sheet in Nom3 as current platform text file format
        
    close active workbook saving no
    end tell
    J'ai utilisé le "current platform text file format" qui me semble plus générique que le "file format text Mac file format"., mais les 2 fonctionnent.

    Voici aussi quelques commentaires sur le reste de ton script:
    Tu devrais ajouter des blocs "try/end try" de gestion des erreurs. Par exemple si l'utilisateur saisi 23x pour le coefficient, le script actuel plante lors de la coercition de SaisieCoefPA en integer.

    Je suggère de mettre la saisie des 2 coefficients dans une sous routine (paramètre texte) qui retourne le coefficient. Cette routine pourra contenir une vrai gestion d'erreurs (valeur entières, décimales, alphanumérique) avec boucle tant que l'utilisateur n'entre pas des valeurs valides ou clique sur annuler,...

    Par habitude, une bonne pratique consiste à mettre toutes les assignations de constantes texte (chaineMessage1, 2, 3, 4...) en début de script, comme tu l'as fait pour Nom1, nom2 et nom3. La maintenance ultérieure s'en trouve facilitée !

    Cordialement

  3. #3
    Membre à l'essai
    Homme Profil pro
    Enseignant
    Inscrit en
    Juillet 2017
    Messages
    17
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Enseignant
    Secteur : Conseil

    Informations forums :
    Inscription : Juillet 2017
    Messages : 17
    Points : 12
    Points
    12
    Par défaut Merci, c'est super sympa
    Merci pour ton aide

    Je découvre Mac depuis 2 semaines et applescript depuis 4 jours (une grosse migraine).

    Je vais terminer mon script en utilisant tes remarques.
    Qd j'en aurais terminé je m'autoriserais à te montrer le resultat pour remarques constructives

    Merci encore

  4. #4
    Membre à l'essai
    Homme Profil pro
    Enseignant
    Inscrit en
    Juillet 2017
    Messages
    17
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Enseignant
    Secteur : Conseil

    Informations forums :
    Inscription : Juillet 2017
    Messages : 17
    Points : 12
    Points
    12
    Par défaut Ca marche mais c'est "TREMBLANT"
    Salut

    Je reviens vers vous.
    Mon chef m'a changé les besoins, d'ou la modif du code.
    Il fonctionne mais c'est trés artisanal
    Des conseils et astuces pour l'améliorer (je suis géné sur les dialogues)

    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
     
    -- Fichier à ouvrir et à créer
    set Nom1 to "Macintosh HD:Users:zzzzz:Desktop:Import Articles:Import Produits.xlsx" -- Nom du fichier*xlSX 
    set FichierTXTFam to "Macintosh HD:Users:zzzzz:Desktop:Import Articles:Fam.txt" -- Nom du 2EME fichier*A CREER TXT
    set FichierTXTProd to "Macintosh HD:Users:zzzzzz:Desktop:Import Articles:Prod.txt" -- Nom du 3EME fichier*A CREER TXT
    set FichierTXTProdRetails to "Macintosh HD:Users:zzzzzz:Desktop:Import Articles:Prod Retails.txt" -- Nom du 1 ER fichier*A CREER TXT
     
    -- 1er Message - Présentation -
    set chaineMessage1 to "Cette application va copier vos produits de XXXXXXX vers une société B"
    set tempRep1 to display dialog chaineMessage1 buttons {"Arreter", "Continuer"} default button "Continuer"
    -- 2eme Message Ou exporter
    set message to "Dans quelle entreprise souhaitez-vous exporter vos produits"
    set tempVar to display dialog message buttons {"Annuler", "AAAAAA", "ZZZZZZZ"} default button "Annuler"
    set boutonAppuye to button returned of tempVar
    set SaisieSiren to ""
    if boutonAppuye is "AAAAAA" then
    	set SaisieSiren to "817856842"
    	display dialog "Vous avez choisi de transferer les produits vers " & boutonAppuye buttons {"Ok"}
    else
    	if boutonAppuye is "ZZZZZZZ" then
    		set SaisieSiren to "123456789"
    		display dialog "Vous avez choisi de transferer les produits vers " & boutonAppuye buttons {"Ok"}
    	else
    		set SaisieSiren to ""
     
    	end if
    end if
     
    -- 2ème Message - Le Coef -
    set Coef to display dialog "Quel Coeficient voulez-vous appliquer pour le calcul du Prix d'achat" default answer ""
    set SaisieCoef to text returned of Coef
    --set SaisieCoef to SaisieCoef as number
    set Coef1 to round ((100 / SaisieCoef) * 100) / 100
     
    -- 3ème Message - Vérif du calcul avec Coef
    set chaineMessage2 to "Vous avez saisie un coef de : " & SaisieCoef & "*
    Exemple :*
    Un produit au prix de Vente de 100 € sur soc A aura un Prix d'Achat à :* " & Coef1 & " €"
    set tempRep2 to display dialog chaineMessage2 buttons {"Arreter", "Retour", "Suivant"}
    -- if button returned of tempRep2 = "Corriger" then
    -- end if
     
    -- 4ème Message - Donner le numéro d'export pour définir produits
    set Export to display dialog "Taper le n° Export pour le choix des produits" default answer ""
    set SaisieExport to text returned of Export
    set chaineMessage3 to "Vous avez saisie l'export n° : " & SaisieExport
    set tempRep3 to display dialog chaineMessage3 buttons {"Arreter", "Retour", "Suivant"}
    -- if button returned of tempRep3 = "Corriger" then
    --	run Quest3
    -- end if
    -- if button returned of tempRep3 = "Arreter" then
    --	BoutonArreter()
    -- end if
     
    -- Ouverture du fichier excel contenant un lien SQL avec Gestion
    tell application "Microsoft Excel" -- Ouvrir excel
    	set silently of window 1 to true
    	--set visible to false
    	open text file filename Nom1 origin Macintosh
     
    	-- Saisie des réponses dialogues dans feuille DATA
    	select sheet "DATA"
    	set value of cell ("B" & "2") to SaisieCoef
    	set value of cell ("B" & "3") to SaisieExport
    	set value of cell ("B" & "4") to SaisieSiren
     
    	-- Actualisation du SQL
    	select sheet "Produits"
    	set destinationWorkbook to workbook "Import Produits.xlsx"
    	refresh all destinationWorkbook
    	delay 20 -- Sans le tempo j'ai un message erreur excel comme quoi 
     
    	-- Calcul du nb de produits à exporter 
    	select sheet "DATA"
    	set NbExport to (get value of cell ("C" & "2")) -- Je veux compter les lignes remplies de la feuille Produits de A2 à A1000
    	set chaineMessage4 to "Vous avez demandez l'export de : " & NbExport & " produits -- Pb le message s'ouvre sur feuille excel, comment cacher excel
     Voulez-vous continuer ? 
    (Si oui, le temps d'attente de l'export est d'une minute)"
    	set tempRep4 to display dialog chaineMessage4 buttons {"Arreter", "Continuer"}
     
    	-- Création de 3 fichiers txt
    	select sheet "Fam"
    	save
    	save as worksheet "Fam" of active workbook filename FichierTXTFam file format current platform text file format with overwrite
    	select sheet "Prod Retails"
    	save as worksheet "Prod Retails" of active workbook filename FichierTXTProdRetails file format current platform text file format with overwrite
    	select sheet "Prod"
    	save as worksheet "Prod" of active workbook filename FichierTXTProd file format current platform text file format with overwrite
    	close active workbook saving yes
    end tell
    set FichierTXTProdRetails2 to POSIX path of FichierTXTProdRetails
    set FichierTXTFam2 to POSIX path of FichierTXTFam
    set FichierTXTProd2 to POSIX path of FichierTXTProd
     
    -- Ouverture de la Gestion et import du 1er fichier
    tell application "La Gestion" -- ouvrir la gestion
    	ouvrir "123456789" -- ouvrir entreprise n° siren*
    	importer FichierTXTProdRetails2 -- importer le fichier d'import
     
    	-- changement société et import du 2 et 3eme fichier
    	ouvrir SaisieSiren --SaisieSiren -- ouvrir entreprise n° siren
    	importer FichierTXTFam2 -- importer le fichier d'import
    	importer FichierTXTProd2 -- importer le fichier d'import
    end tell
    activate
     
    -- Message terminé
    display dialog "Terminé"

  5. #5
    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 applescript, la gestion des dialogues est un peu limitée. Pour avoir de belles applications, il faut passer via xCode.
    Typiquement, ton application devrait se réduire à un seul dialogue avec toutes les saisies et les contrôles en direct: contrôle de validité de Siren ou de coefficient.

    Comme tu souhaites rester en Applescript simple, il faut effectivement passer via des dialogues successifs.

    Commentaires sur ton script:

    Ta définition initiale des noms en utilisant « (path to desktop folder as string) » était plus simple à lire et plus élégante.
    Ceci me semble plus lisible :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    set SDossier to (path to desktop folder as string) & "Import Articles:"
    set Nom1 to SDossier & "Import Produits.xlsx"
    set FichierTXTFam to SDossier & "Fam.txt"
    set FichierTXTProd to SDossier & "Prod.txt"
    Pour ce qui est de la sélection de la société via le Siren, je suppose que la liste des Siren est connue, donc pour éviter les erreurs de saisie, je te suggère d’utiliser un « choose from list »
    Voici un exemple :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    set LSiren to {"123456785", "123456786", "123456787", "123456788", "123456789", "123456780"}
    set S to choose from list LSiren with title "Sélection de la société" with prompt "Sélectionner un N° Siren"
    try
            if not S then return -- l'utilisateur à cliqué sur "Annuler" : fin du script
    end try
    set NoSiren to item 1 of S-- S est un type list (on peut autoriser une sélection multiple)
    display dialog NoSiren
    Enfin pour la saisie de coefficient, j'avais suggéré une sous-routine.
    Le but est que ton script soit bien lisible. Tu as 99% de chance que ton chef te demande de le modifier ultérieurement. A ce moment là, tu sera content d'avoir un script facilement lisible !
    Voici un exemple :
    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
    set message to "Quel Coeficient voulez-vous appliquer pour le calcul du Prix d'achat ?"
    set Coef1 to Saisie(message, true)
    if Coef1 = 0 then -- l'utilisateur a abandonné la saisie
        return -- fin du script
    else
        set Coef1 to round ((100 / Coef1) * 100) / 100
    end if
    
    -- fin du script principal
    
    on Saisie(T, Num)
    -- retourne la valeur saisie dans un dialoge avec le message T. Si Num=true n'autorise qu'une saisie numérique >0
    -- retourne 0 ou "" si l'utilisateur a annulé, 
        set N to 0
        repeat until N > 0
            try
                set S to display dialog T default answer ""
                set V to text returned of S
            on error -- l'utilisateur a cliqué annuler: on renvoie 0 ou "" selon le paramètre Num
                if Num then
                    return 0
                else
                    return ""
                end if
            end try
            if Num then -- on vérifie que la saise est bien un nombre
                try
                    set N to V as integer
                on error
                    set N to 0
                end try
                if not (N > 0) then display alert "Désolé, la saisie doit être un nombre positif !"
            end if
        end repeat
        return N-- retourne la valeur
    end Saisie
    Tu peux utiliser la routine Saisie autant de fois que nécessaire dans ton script principal. Le paramètre Num est à True si tu veux une saisie d'un entier positif et false si la saisie est alphanumérique.

    Cordialement

Discussions similaires

  1. Débutant XML
    Par viny dans le forum XML/XSL et SOAP
    Réponses: 8
    Dernier message: 25/07/2002, 12h07
  2. [Kylix] Re Re: débutant sur Kylix et Linux.....
    Par Eclypse dans le forum EDI
    Réponses: 2
    Dernier message: 08/06/2002, 22h53
  3. [Kylix] Le débutant en Kylix et Linux....
    Par Eclypse dans le forum EDI
    Réponses: 2
    Dernier message: 08/05/2002, 10h37
  4. Réponses: 3
    Dernier message: 07/05/2002, 16h06
  5. [HyperFile] 2 questions de débutant
    Par khan dans le forum HyperFileSQL
    Réponses: 2
    Dernier message: 29/04/2002, 23h18

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