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 :

dernier Item sélectionné par défaut dans menu déroulant


Sujet :

AppleScript

  1. #1
    Membre à l'essai
    Homme Profil pro
    Graphiste
    Inscrit en
    Décembre 2013
    Messages
    82
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Graphiste
    Secteur : Communication - Médias

    Informations forums :
    Inscription : Décembre 2013
    Messages : 82
    Points : 24
    Points
    24
    Par défaut dernier Item sélectionné par défaut dans menu déroulant
    Bonjour,

    J'espère que quelqu'un va pouvoir m'aider.
    J'ai fait un menu déroulant sur Indesign en Applescript qui contient plusieurs item et qui se lance à l'ouverture d'un document Indesign.

    A chaque ouverture de document, ce menu déroulant apparait et par défaut est sélectionné la première valeur (premier item).

    Je voulais savoir s'il était possible qu'à chaque ouverture d'un nouveau document Indesign, le menu déroulant propose le dernier item utilisé ?

    Autrement dit, le menu déroulant peut-il garder en mémoire le dernier item utilisé ?

    Je ne sais pas trop comment procédé, j'ai même essayé de copier l'item sélectionné dans un fichier texte et je voulais indiquer au menu déroulant qu'il fallait afficher la prochain fois cet item mais là je bloque.

    Quelqu'un peut m'aider ?

    Merci.

  2. #2
    Membre à l'essai
    Homme Profil pro
    Graphiste
    Inscrit en
    Décembre 2013
    Messages
    82
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Graphiste
    Secteur : Communication - Médias

    Informations forums :
    Inscription : Décembre 2013
    Messages : 82
    Points : 24
    Points
    24
    Par défaut Complément sur précécdent message
    Je complète mon précédent message en vous joignant mon code actuel.
    Quelqu'un pourrait-il me dire comment faire pour que le menu déroulant (dropdown) s'affiche avec le dernier item choisi lors de la précédente utilisation ?

    Merci.


    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
    tell application "Finder"
    	set the_file to ((path to desktop as text) & "Formats_Pubs.csv") as alias
    end tell
     
    set my_data to read the_file
    set my_list to paragraphs of my_data as list
     
    set ColumnA_list to {}
    set ColumnC_list to {}
    set ColumnD_list to {}
     
     
    set oldDelims to AppleScript's text item delimiters
    set AppleScript's text item delimiters to ";"
     
     
     
    repeat with an_item in my_list
    	try
    		set end of ColumnA_list to text item 1 of an_item
    		set end of ColumnC_list to text item 3 of an_item
    		set end of ColumnD_list to text item 4 of an_item
    	end try
    end repeat
     
    set AppleScript's text item delimiters to oldDelims
     
     
    tell application "Adobe InDesign CC 2018"
     
    	activate
     
    	set varDropDownList to ColumnA_list
    	set varSelectedIndex to 1
    	set varMinimumWidth to 150
    	set myEventNames to {"afterNew", "afterUpdate", "afterInvoke", "afterActivate", "afterContextChanged", "afterSelectionAttributeChanged", "afterSelectionChanged", "beforeUpdate"}
    	set myDialog to make dialog with properties {name:"CHOIX DU FORMAT :"}
     
    	tell myDialog
    	tell (make dialog column)
    	tell (make border panel)
    	tell (make dialog column)
    	tell (make dialog row)
     
    ---- DRODPDOWN
    	make static text with properties {static label:"LISTE DES FORMATS : "}
    	set varDropDown to make dropdown with properties {string list:varDropDownList, selected index:(varSelectedIndex - 1), min width:varMinimumWidth}
    	tell varDropDown
    	repeat with myEventName in myEventNames
    	make event listener with properties {event type:myEventName, handler:my dropdownchange}
    	end repeat
    	end tell
    	end tell
    	end tell
    	end tell
    	end tell
    	end tell
     
    	--get the results
    	set myResult to show myDialog
    	if myResult = true then
    		-- varDropDown Handler (Dropdown)
    		set varSelectedIndex to ((selected index of varDropDown) + 1)
    		set varDropDownListChoice to item varSelectedIndex of varDropDownList as item
    	end if
    	destroy myDialog
    end tell
     
    on dropdownchange()
    	tell application "Adobe InDesign CC 2018"
    		set myEvent to evt
    		display dialog ("This event is the " & event type of myEvent & " event.")
    	end tell
    end dropdownchange
     
    set the_position to indexof(varDropDownListChoice, ColumnA_list)
    if the_position is 0 then
    	tell application "Finder"
    		activate
    		display dialog "The search term does not exist in Column D."
    	end tell
    	return
    end if
     
     
    if the_position is 1 then
    	tell application "Finder"
    		activate
    		display dialog "Veuillez choisir un format valable"
    	end tell
    	return
    end if
     
     
    on indexof(theItem, theList)
    	set text item delimiters to return
    	set theList to return & theList & return
    	set text item delimiters to {""}
    	try
    		-1 + (count (paragraphs of (text 1 thru (offset of (return & theItem & return) in theList) of theList)))
    	on error
    		0
    	end try
     
    end indexof

  3. #3
    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,
    Je n'ai pas InDesign, donc mon aide est limitée. Cependant, dans le guide InDesign_ScriptingGuide_AS que tu peux trouver sur le site Adobe, il y a des parties de réponse, me semble-t-il, en pages 135, 160 et 161.
    D'après ce document, l'objet dropdown d'une fenêtre de dialogue a 2 propriétés :


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    set myVerticalJustificationMenu to make dropdown with properties {string list:{"Top", "Center", "Bottom"}, selected index:0}

    La string list contient les items du menu, ce que tu utilises dans ton script. La seconde propriété est le "selected index".
    Les pages 160 et 161 indiquent bien que ce "selected index" retourne l'option choisie. Il semble donc logique que lors de la création du dropdown, tu puisse mettre cet index à une valeur non 0
    Cette valeur doit bien sur être cohérente avec le nombre d'items de la string list (en fait ce nombre -1 car l'index débute à 0)
    C'est bien ce que tu utilises :


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    set varDropDown to make dropdown with properties {string list:varDropDownList, selected index:varSelectedIndex - 1), min width:varMinimumWidth}
    (je n'ai pas trouvé dans le documentation min with)


    Le problème, je crois, est que ta variable varSelectedIndex est initialisée à 1, donc "selected index" est à 0.
    Tu peux faire un premier test en mettant, dans ta ligne de création du dropdown, une valeur d'index fixe comme 2, en supposant que ta liste contient plus de 3 items (0,1,2,...).
    Cela devrait afficher la troisième option du dropdown menu comme le laisse entendre la documentation.


    A ce propos, sauf erreur de ma part, ton script assigne les valeurs de cette liste sur ces 2 lignes :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    set end of ColumnA_list to text item 1 of an_item
    ...
    set varDropDownList to ColumnA_list

    Je ne connais pas ce que contient an_item et je ne peux le vérifier, mais il semble contenir la première ligne (paragraphe) du fichier Formats_Pubs.csv
    Es tu bien sûr que c'est une liste de plusieurs éléments ?
    Pour s'en assurer, affiche le count de cette liste.


    Dans le pratique, je propose 2 étapes:
    1) assigne en dur dans le script ColumnA_List avec une valeur : {"item0", "item1", "item2", "item3"} et crée l'objet dropwdown avec cette liste et l'index 2. Vérifie que c'est bien "Item2" qui apparait dans le dialogue. Si non, il faut se concentre sur ce point
    2) Si oui, alors ton problème est sans doute la lecture de la liste : si la ligne 1 de ton fichier contient des valeurs séparées par des "," ou ";", il faut mettre cette ligne 1 dans une variable et la couper avec les Applescript text délimiter pour en faire vraiment une liste et pas une string contenant des "," ou ";".


    Cordialement

    PS : Oui, cette réponse est la même que celle du site Macbidouille sur lequel tu as posé la même question

  4. #4
    Membre à l'essai
    Homme Profil pro
    Graphiste
    Inscrit en
    Décembre 2013
    Messages
    82
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Graphiste
    Secteur : Communication - Médias

    Informations forums :
    Inscription : Décembre 2013
    Messages : 82
    Points : 24
    Points
    24
    Par défaut Je précise ma demande
    Bonjour PBell,
    Nous avions conversé sur quelques sujets ensemble et ton aide m'avait était très précieuse, je tenais encore à te remercier et à saluer ton retour car soit mes discussions n'intéressent pas grand monde, soit elles sont irréalisable, soit il y a très peu de spécialiste d'Applescript.
    N'ayant plus de tes nouvelles, j'ai en effet diversifié mes sources d'info et ai vu ta réponse sur le site que tu mentionnes. Je choisis celui-ci pour te répondre par fidélité.

    En fait, je veux éviter de faire une liste en dure dans le code applescript et préfère faire appel à un fichier externe (Formats_Pubs.csv) car ce fichier va évoluer au fil du temps (certaines données seront rajoutées et d'autres supprimées au fil du temps). Je ne veux donc pas intervenir sur le code. Donc pas d'utilisation de liste.

    J'avais imaginé, et je sais qu'en javascript cela est possible, stocké dans un fichier .txt le dernier item choisi. Dès lors, à la prochaine utilisation de ce dropdown (qui en fait est inséré dans une boite de dialogue plus élaborée), la boite de dialogue s'ouvre et qu'apparaisse pour le dropdown le dernier item sélectionné. Comme il m'arrive d'utiliser des ficheirs ayant le même format, cela m'éviterait de chaque fois repartir du haut de la liste... donc gain de temps surtout que cette lliste peut parfois contenir 500 item.

    Si on arrive à copier le nom du format (ex : A) dans un fichier .txt, est-ce qu'en ouvrant la boite de dialogue, on peut indiqué au dropdown d'aller lire le fichier .txt (contenant le dernier item choisi à la précédente utilisation, ici A) de sorte à ce que A soit sélectionné dans le dropdown par défaut (ce qui éviterait de balayer tout la liste à chaque fois ?

    Peut-être peut-on le faire aussi sans utiliser de fichier .txt, seulement avec de l'appelscript.

    Sachant que tu n'as pas Indesign, il ne te sera sans doute pas facile de m'aider mais j'espère que tes orientations m'aiguilleront.

    Bonne soirée.

  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,
    Je n'étais pas parti, mais je ne préfère ne pas répondre lorsque je ne connais pas, comme c'est le cas en Javascript.

    Citation Envoyé par L'escouade de Pierre Voir le message
    En fait, je veux éviter de faire une liste en dure dans le code applescript et préfère faire appel à un fichier externe (Formats_Pubs.csv) car ce fichier va évoluer au fil du temps (certaines données seront rajoutées et d'autres supprimées au fil du temps). Je ne veux donc pas intervenir sur le code. Donc pas d'utilisation de liste.
    J'ai du mal m'exprimer. le but de la liste en dur n'est que pour aider à la mise au point, en particulier du côté InDesign que je ne peux tester. Il s'agit juste de confirmer que si tu as une liste en dur et que to position l'index à 2 dans les propriétés du "make dropdown", InDesign affiche bien l'item 2 par défaut comme tu le souhaites.
    Je préfère vérifier cela en premier car il arrive parfois que les logiciels Adobe ou Microsoft aient des bugs lors des appels Applescript.

    Une fois confirmé le fait que InDesign réagit sur ce point comme attendu, il sera facile de résoudre les autres parties du script.
    Bien sûr on pourra utiliser une liste à partir d'un fichier Excel (Libellé, largeur, hauteur) et un fichier texte contenant l'index du dernier menu utilisé. Mais au moins, on saura que cette partie pourra être utilisée par InDesign.

    Pour ton code actuel, l'un des problème est que tu lit un fichier .csv et que la première ligne est une string avec des valeurs séparées par des ";", et que ce n'est pas une liste.

    Peux tu confirmer la partie InDesign et ont s'attaquera à la suite.

    Cordialement

  6. #6
    Membre à l'essai
    Homme Profil pro
    Graphiste
    Inscrit en
    Décembre 2013
    Messages
    82
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Graphiste
    Secteur : Communication - Médias

    Informations forums :
    Inscription : Décembre 2013
    Messages : 82
    Points : 24
    Points
    24
    Par défaut Indesign retient bien lde dernier item utilisé
    Salut PBell,

    Sur ton conseil, j'ai fait un test en changeant le rang de l'item utilisé.
    Dans mon tableau .csv j'ai 6 lignes et 3 colonnes :
    Première ligne : FORMATS
    les 5 autres lignes contiennent 5 formats
    Cela fait un total de 6 lignes

    Dans mon code j'ai noté :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    set varDropDown to make dropdown with properties {string list:varDropDownList, selected index:(varSelectedIndex + 4), min width:varMinimumWidth}
    Donc le rang de l'item noté et Indesign retient est est bien la valeur de la ligne 6 (puisque FORMATS vaut -1 et le 1° format vaut 0 etc...

    Donc Indesign arrive bien à lire le script mais on ne peut pas dire qu'il garde en mémoire le dernier choix effectué par l'utilisateur car tout est noté dans le code.

    Penses-tu que cela peut nous aider à arriver à ce que je veux ?

    A bientôt.

  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
    Bonjour,
    Oui, cela confirme que InDesign gère correctement l'index.
    Je regarde d'ici la fin de la semaine pour écrire les sous routines de gestion entre la liste des libellés, l'index et le fichier .csv
    Cordialement

  8. #8
    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,
    Chose promise...chose due : voici le script permettant de lire le fichier csv en mettant les libellés (+ largeur, hauteur) dans des listes et le choix précédent en colonne 4.

    Il contient 2 sous routines:
    LitCSVIndex :
    Cela rempli les listes de libellés (colonne A du fichier CSV), de largeur (colonne B) et de hauteur (colonne C) à partir du fichier.
    Si une valeur non vide est trouvée en colonne D de fichier CSV, cette routine renvoie le numéro de la ligne, si introuvable, cela renvoi 0.

    EcritCSV :
    Ré-écrit le fichier CSV avec un X sur la ligne N° I (le dernier paramètre). X doit être l'item du dropdown sélectionné plus 1.

    Le programme principal n'est là que pour montrer un exemple d'utilisation de ces 2 routines.
    Comme d'habitude, j'ai mis beaucoup de commentaires !

    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
    property Sep : ";" -- defini le separateur de colonnes du fichier csv
    global libelle, largeur, hauteur, Aindex, Nindex, fcvs
    
    
    --initialisation
    set libelle to {} -- liste des libelles de formats
    set largeur to {} -- liste des largeurs de formats
    set hauteur to {} -- liste des hauteurs de formats
    set Aindex to 0 -- ancien index
    set Nindex to 0 -- nouvel index
    
    
    -- pour les tests
    set fichierCSV to (path to desktop as text) & "Format_Pubs.csv"
    
    
    set Nindex to LitCSVindex(fichierCSV, libelle, largeur, hauteur) --lecture du fichier csv
    
    
    -- pour vérifier que les libellés sont OK on log la ligne 12 et la valeur de l'index :
    log "libelle 12=" & item 12 of libelle
    log "index=" & Nindex
    
    
    -- pour tester, on change la valeur de l'index et on re-ecrit le fichier csv
    set Nindex to 100 -- nouvelle valeur
    
    
    EcritCSV(fichierCSV, libelle, largeur, hauteur, Nindex)
    
    
    
    
    -- ********* fin programme principal
    
    
    
    
    on LitCSVindex(fcsv, l1, l2, l3)
    --lit le fichier localcsv et retourne les listes l1,L2,l3. Renvoie l'index de la derniere ligne avec la colonne 4 non vide
        set i to 0
        set lignes to every paragraph of (read file fcsv)
        set AppleScript'stext item delimiters to {Sep}
        repeat with n from 1 to (count of lignes)
            set end of l1 to text item 1 of (item n of lignes)
            set end of l2 to text item 2 of (item n of lignes)
            set end of l3 to text item 3 of (item n of lignes)
            try
                if (text item 4 of (item n of lignes)) is not "" then set i to n
            end try
        end repeat
        return i
    end LitCSVindex
    
    
    
    
    on EcritCSV(fcsv, l1, l2, l3, i) -- ecrit le fichier fcsv avec les lignes formées de l1,l2,l3 et un 'X' en ligne i)
        set mtexte to ""
        repeat with n from 1 to count of l1
            if n = i then -- met un X en colonne 4 sur la ligne choisie
                set finligne to "X"
            else
                set finligne to ""
            end if
            if n = (count of l1) then -- pas de return en dernière ligne
                set retour to ""
            else
                set retour to return
            end if
            set mtexte to mtexte & (item n of l1) & Sep & (item n of l2) & Sep & (item n of l2) & Sep & finligne & retour
        end repeat
        try
            set fcible to open for access file fcsv with write permission
            set eof of fcible to 0
    write mtexte to fcible
    close access fcible
        on error
    close access fcs
        end try
    end EcritCSV
    Comment utiliser ces 2 routines dans ton script ?
    Copie et colle les 2 routines dans ton script, à la fin.
    Au début de ton script, place la partie Property, Global et initialization des variables de libellés, format et N° index.
    Tu peux adapter les noms à ta convenance. Si tu changes la variable Sep (le séparateur ; des csv) il faut aussi la changer dans les sous routines.

    Ensuite tu dois appeler les sous routines :
    Appelle LitCSVIndex au début de ton script pour récupérer les libellés, format et la valeur précédente de l'index.
    Dans la ligne du "make dropdown", utilise comme propriétés la liste des libellés lus et la valeur de l'index. Attention, il faut mettre (index -1) car le .csv commence à 1 alors que le dropdow débute à 0.

    Lorsque l'utilisateur a sélectionné le dropdown menu, tu dois récupérer la valeur choisie de l'index (set varSelectedIndex to((selected indexof varDropDown)+1)
    Le libellé choisi est "item varSelectedIndex of libelle", idem pour largeur et hauteur.
    En fin de ton script, utilise le EcritCSV avec les paramètres de fichier, listes et le varSelectedIndex pour enregistrer la valeur index choisie et ainsi la retrouver ultérieurement avec une nouvelle lecture via LitCSVIndex.

    Cordialement

  9. #9
    Membre à l'essai
    Homme Profil pro
    Graphiste
    Inscrit en
    Décembre 2013
    Messages
    82
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Graphiste
    Secteur : Communication - Médias

    Informations forums :
    Inscription : Décembre 2013
    Messages : 82
    Points : 24
    Points
    24
    Par défaut Je teste ça
    Salut PBell,

    Merci pour ton message... je teste ça et te tiens au courant.

    A bientôt.

  10. #10
    Membre à l'essai
    Homme Profil pro
    Graphiste
    Inscrit en
    Décembre 2013
    Messages
    82
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Graphiste
    Secteur : Communication - Médias

    Informations forums :
    Inscription : Décembre 2013
    Messages : 82
    Points : 24
    Points
    24
    Par défaut Problème de compréhension....
    Salut PBell,

    Je tente d'adapter ton code au mien mais je ne comprends pas ce que je dois indiquer pour le Dropdown.

    Dans mon code, j'ai :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    set varDropDown to make dropdown with properties {string list:varDropDownList, selected index:(varSelectedIndex - 1), min width:varMinimumWidth}
    Où dois-je donc noter cette ligne :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    set varSelectedIndex to((selected indexof varDropDown)+1)
    En effet, il faut prévoir le cas du tout premier lancement qui serait initialisé à la première ligne du fichier .csv puis après la 1° utilisation, utiliser la ligne du précédent choix effectué.

    Merci pour ton aide.

  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
    Bonjour Martin,
    Ton script doit toujours commencer par lire les libellés et donc l'index à partir du fichier CSV.
    Donc tu dois débuter par l'appel à LitCSVIndex.
    Suite à cette lecture, tu dois tester l'index récupéré : Si il est égal à 0 c'est que le fichier ne contient pas de "dernier choix".
    Cela peut être la première fois, ou la colonne D a été supprimée par erreur, ou encore que la ligne du dernier libellé choisi a été supprimée.
    Dans ces cas, il faut mettre l'index à 1 pour que le dropdown prenne la valeur par défaut du premier libellé.

    C'est cet index (-1) que tu dois utiliser pour le make dropdown.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    set Nindex to LitCSVindex(fichierCSV, libelle, largeur, hauteur)
    if NIndex = 0 then set NIndex to 1
    set varDropDown to make dropdown with properties{stringlist:libelle, selected index:(Nindex -1), min width:varMinimumWidth}
    
    Ensuite, une fois le choix fait par l'utilisateur, tu dois récupérer l'index.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    set varSelectedIndex to((selected indexof varDropDown)+1)
    C'est cette variable varSelectedIndex qui te permet d'avoir le libellé, largeur, hauteur choisis.
    C'est aussi celle que tu dois écrire dans le EcritCSV en fin de script.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    set choix_libelle to item varSelectedIndex of libelle
    set  choix_largeur to item varSelectedIndex of largeur
    set  choix_hauteur to item varSelectedIndex of hauteur
    
    
    EcritCSV(fichierCSV, libelle, largeur, hauteur, varSelectedIndex)
    Cordialement

  12. #12
    Nouveau Candidat au Club
    Femme Profil pro
    Étudiant
    Inscrit en
    Mai 2020
    Messages
    1
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 24
    Localisation : France, Val d'Oise (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mai 2020
    Messages : 1
    Points : 1
    Points
    1
    Par défaut Merci
    Merci j'avais un problème avec ça je pensais demander de l'aide à un quelqu'un de ma classe

  13. #13
    Membre à l'essai
    Homme Profil pro
    Graphiste
    Inscrit en
    Décembre 2013
    Messages
    82
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Graphiste
    Secteur : Communication - Médias

    Informations forums :
    Inscription : Décembre 2013
    Messages : 82
    Points : 24
    Points
    24
    Par défaut Ça ne marche pas
    Bonjour PBell,

    J'essaie depuis quelques jours de faire un mix en ton script et le mien et je n'arrive pas à le faire marcher.
    Je te mets mon compte au cas où tu trouverait une piste de solution.
    En fait, je pense que mon code est redondant et certains éléments sont sans doute superflus.
    Par ailleurs, malgré mes diverses tentative, à chaque exécution de mon script, le Dropdown me propose systématiquement la 1° ligne alors que le fichier CSV s'écrit bien (je le vérifie à chaque fois).
    Il semblerait qu'il y a 1 problème en ligne 102. Je suis obligé de mettre un chiffre non égal à 0 ou à 1 pour que le tablea csv s'écrive.

    Par ailleurs, je ne vois pas où je dois insérer les ligne (que j'ai mis en commentaires) 184, 185 et 186.

    J'espère que tu pourras débloquer la situation.

    Merci.

    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
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
    129
    130
    131
    132
    133
    134
    135
    136
    137
    138
    139
    140
    141
    142
    143
    144
    145
    146
    147
    148
    149
    150
    151
    152
    153
    154
    155
    156
    157
    158
    159
    160
    161
    162
    163
    164
    165
    166
    167
    168
    169
    170
    171
    172
    173
    174
    175
    176
    177
    178
    179
    180
    181
    182
    183
    184
    185
    186
    187
    188
    189
    190
    191
    192
    193
    194
    195
    196
    197
    198
    199
    200
    201
    202
    203
    204
    205
    206
    207
    208
    209
    210
    211
    property Sep : ";" -- defini le separateur de colonnes du fichier csv
    global libelle, largeur, hauteur, Aindex, Nindex, fcvs
     
     
    --initialisation
    set libelle to {} -- liste des libelles de formats
    set largeur to {} -- liste des largeurs de formats
    set hauteur to {} -- liste des hauteurs de formats
    set Aindex to 0 -- ancien index
    set Nindex to 0 -- nouvel index
     
     
    -- pour les tests
    set fichierCSV to (path to desktop as text) & "Formats_Pubs_2.csv"
     
     
    set Nindex to LitCSVindex(fichierCSV, libelle, largeur, hauteur) --lecture du fichier csv
    if Nindex = 0 then set Nindex to 1
     
     
     
    -- pour vérifier que les libellés sont OK on log la ligne 12 et la valeur de l'index :
    log "libelle 12=" & item 12 of libelle
    log "index=" & Nindex
     
     
    -- pour tester, on change la valeur de l'index et on re-ecrit le fichier csv
    set Nindex to 100 -- nouvelle valeur
     
     
     
     
     
     
    tell application "Adobe InDesign CC 2018"
     
    	activate
     
    	set varDropDownList to libelle
    	set varSelectedIndex to 1
    	set varMinimumWidth to 150
    	set myEventNames to {"afterNew", "afterUpdate", "afterInvoke", "afterActivate", "afterContextChanged", "afterSelectionAttributeChanged", "afterSelectionChanged", "beforeUpdate"}
    	set myDialog to make dialog with properties {name:"CHOIX DU FORMAT :"}
     
    	tell myDialog
    		tell (make dialog column)
    			tell (make border panel)
    				tell (make dialog column)
    					tell (make dialog row)
     
     
     
    						---- DRODPDOWN
     
     
    						make static text with properties {static label:"LISTE DES FORMATS : "}
     
    						set varDropDown to make dropdown with properties {string list:libelle, selected index:(Nindex - 1), min width:varMinimumWidth}
     
     
     
     
    						tell varDropDown
    							repeat with myEventName in myEventNames
    								make event listener with properties {event type:myEventName, handler:my dropdownchange}
    							end repeat
    						end tell
    					end tell
    				end tell
    			end tell
    		end tell
    	end tell
     
     
     
    	--get the results
    	set myResult to show myDialog
    	if myResult = true then
    		-- varDropDown Handler (Dropdown)
    		set varSelectedIndex to ((selected index of varDropDown) + 1)
    		set varDropDownListChoice to item varSelectedIndex of libelle as item
    	end if
    	destroy myDialog
     
     
     
    end tell
     
     
    on dropdownchange()
    	tell application "Adobe InDesign CC 2018"
    		set myEvent to evt
    		display dialog ("This event is the " & event type of myEvent & " event.")
    	end tell
    end dropdownchange
     
     
     
     
    set the_position to indexof(fichierCSV, libelle)
     
    if the_position is 5 then
    	tell application "Finder"
    		activate
    		display dialog "Format non valable"
    	end tell
    	return
    end if
     
     
    (*
    if the_position is 1 then
    	tell application "Finder"
    		activate
    		display dialog "Veuillez choisir un format valable"
    	end tell
    	return
    end if
    *)
     
     
     
    -- ********* fin programme principal
     
     
     
     
    on LitCSVindex(fcsv, l1, l2, l3)
    	--lit le fichier localcsv et retourne les listes l1,L2,l3. Renvoie l'index de la derniere ligne avec la colonne 4 non vide
    	set i to 0
    	set lignes to every paragraph of (read file fcsv)
    	set AppleScript's text item delimiters to {Sep}
    	repeat with n from 1 to (count of lignes)
    		set end of l1 to text item 1 of (item n of lignes)
    		set end of l2 to text item 2 of (item n of lignes)
    		set end of l3 to text item 3 of (item n of lignes)
    		try
    			if (text item 4 of (item n of lignes)) is not "" then set i to n
    		end try
    	end repeat
    	return i
    end LitCSVindex
     
     
     
     
    on EcritCSV(fcsv, l1, l2, l3, i) -- ecrit le fichier fcsv avec les lignes formées de l1,l2,l3 et un 'X' en ligne i)
     
    	set mtexte to ""
    	repeat with n from 1 to count of l1
    		if n = i then -- met un X en colonne 4 sur la ligne choisie
    			set finligne to "X"
    		else
    			set finligne to ""
    		end if
    		if n = (count of l1) then -- pas de return en dernière ligne
    			set retour to ""
    		else
    			set retour to return
    		end if
    		set mtexte to mtexte & (item n of l1) & Sep & (item n of l2) & Sep & (item n of l2) & Sep & finligne & retour
    	end repeat
    	try
    		set fcible to open for access file fcsv with write permission
    		set eof of fcible to 0
    		write mtexte to fcible
    		close access fcible
    	on error
    		close access fcs
    	end try
     
     
     
     
     
     
     
    	--set varSelectedIndex to ((selected indexof varDropDown) + 1)
     
     
    	set fichierCSV to (path to desktop as text) & "Formats_Pubs_2.csv"
     
    	(*
    	set choix_libelle to item varSelectedIndex of libelle
    	set choix_largeur to item varSelectedIndex of largeur
    	set choix_hauteur to item varSelectedIndex of hauteur
    	*)
     
     
     
     
     
    end EcritCSV
     
    EcritCSV(fichierCSV, libelle, largeur, hauteur, varSelectedIndex)
     
     
     
     
     
    on indexof(theItem, fichierCSV)
    	set text item delimiters to return
    	set fichierCSV to return & fichierCSV & return
    	set text item delimiters to {""}
    	try
    		-1 + (count (paragraphs of (text 1 thru (offset of (return & theItem & return) in fichierCSV) of fichierCSV)))
    	on error
    		0
    	end try
     
    end indexof

  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
    Bonjour,
    Les 2 principaux problèmes sont:
    1
    Dans la ligne 28 qui assigne l'index à la valeur 100, après sa lecture dans le fichier en ligne 17. Je n'avais mis cette ligne que pour l'exemple.
    La ligne 58 est celle dans laquelle tu assignes le dropdown à afficher avec la dernière valeur de l'index. Donc, en fait, tu assignes toujours l'index à 100. Si tu as moins de 100 libellés dans tes tests, il est probable the InDesign considère qu'un index supérieur au nombre d'options ne soit pas valide et donc le remet à 1.
    Je pense que une fois que tu aura supprimé la ligne 28, le dropdown affichera bien la dernière valeur.


    2
    Ton script principal se termine en ligne 87, sans avoir enregistré, dans le fichier csv, la dernière valeur choisie: tu ne fais pas appel à EcrisCSV. Donc le fichier ne peut être mis à jour.


    Ceci étant, il y a d'autres corrections à faire :
    Ligne 2: la variable fcsv est finalement inutilisée. Cette variable peut donc être supprimée
    Lignes 19 à 26 : Supprimer ces lignes 19 à 26 qui n'était dans mon script que pour l'exemple.
    Ligne 40 à supprimer: tu assignes varSelectedIndex to 1, puis en ligne 58, tu définis le dropdown avec "selected index Nindex-1). Donc la ligne 40 est inutile car tu n'utilises pas la variable varSelectedindex !
    Ligne 123 : ton commentaire indique la fin du programme principal ici. Ce n'est pas facile à lire. Je te conseille de mettre tout tes handlers comme ondropchange ou indexof après cette ligne pour plus de clarté.
    Ligne 100: je ne suis pas sûr de comprendre ce que tu cherches à faire ici. Si l'index 5 n'est pas valable,…pourquoi le mettre dans le fichier csv ?
    Ligne 201 à 211: ce handler n'est pas appelé, donc inutile. De plus son contenu est pour le moins bizarre. Tu ajoutes des return avant et après fichierCSV (qui contient le texte chemin:nomfichiercsv) et tu compte les paragraphes…Désolé, mais je ne comprends pas ce que tu cherches à faire.


    Par ailleurs, je te suggère de lire l'index dans la variable Aindex (ancien index) et de récupérer le résultat du dropdown dans la variable Nindex. Tu n'as à enregistrer le csv que si Aindex diffère de Nindex ! J'ai ajouté ce test.

    Voici donc le script revu. Comme indiqué précédemment, je ne peux le tester n'ayant pas inDesign.
    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
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
    129
    130
    131
    132
    133
    134
    135
    136
    137
    138
    property Sep : ";"-- defini le separateur de colonnes du fichier csv
    global libelle, largeur, hauteur, Aindex, Nindex
    
    
    --initialisation
    set libelle to {} -- liste des libelles de formats
    set largeur to {} -- liste des largeurs de formats
    set hauteur to {} -- liste des hauteurs de formats
    set Aindex to 0-- ancien index
    set Nindex to 0-- nouvel index
    
    
    -- pour les tests
    set fichierCSV to (path todesktopastext) & "Formats_Pubs_2.csv"
    
    set Aindex to LitCSVindex(fichierCSV, libelle, largeur, hauteur) --lecture du fichier csv
    if Aindex = 0 then set Aindex to 1
    
    
    tell application"Adobe InDesign CC 2018"
    activate
        set varDropDownList to libelle
        set varSelectedIndex to 1
        set varMinimumWidth to 150
    set myEventNames to {"afterNew", "afterUpdate", "afterInvoke", "afterActivate", "afterContextChanged", "afterSelectionAttributeChanged", "afterSelectionChanged", "beforeUpdate"}
    set myDialog to make dialog with properties {name:"CHOIX DU FORMAT :"}
    
        tell myDialog
            tell (make dialog column)
                tell (make border panel)
                    tell (make dialog column)
                        tell (make dialog row)
    
    ---- DRODPDOWN
    
                             make static text with properties {static label:"LISTE DES FORMATS : "}
                             set varDropDown to make dropdown with properties {string list:libelle, selected index:(Aindex - 1), min width:varMinimumWidth}
                             tell varDropDown
                                repeat with myEventName in myEventNames
                                    make event listener with properties {event type:myEventName, handler:my dropdownchange}
    end repeat
                            end tell
    end tell
    end tell
    end tell
    end tell
    end tell
    
    
    
    --get the results
        set myResult to show myDialog
        if myResult = true then
    -- varDropDown Handler (Dropdown)
            set Nindex to ((selected index of varDropDown) + 1)
            set varDropDownListChoice to item Nindex of libelle as item
    end if
        destroy myDialog
    end tell
    
    
    if Nindex is not Aindex then -- index changé, on l'enregistre, sinon, on ne fait rien !
    EcritCSV(fichierCSV, libelle, largeur, hauteur, Nindex)
    end if
    
    set the_position to indexof(fichierCSV, libelle) 
    if the_position is 5 then
    tell application "Finder"
    activate
    display dialog "Format non valable"
    end tell
    end if
    -- ********* fin programme principal
    
    
    on dropdownchange()
    tell application"Adobe InDesign CC 2018"
            set myEvent to evt
            display dialog ("This event is the " & event type of myEvent & " event.")
    end tell
    end dropdownchange
    
    
    on LitCSVindex(fcsv, l1, l2, l3)
    --lit le fichier localcsv et retourne les listes l1,L2,l3. Renvoie l'index de la derniere ligne avec la colonne 4 non vide
        set i to 0
        set lignes to every paragraph of (read file fcsv)
    set AppleScript's text item delimiters to {Sep}
    repeat with n from 1 to (countof lignes)
    set end of l1 to text item 1 of (item n of lignes)
    set end of l2 to text item 2 of (item n of lignes)
    set end of l3 to text item 3 of (item n of lignes)
    try
                if (text item 4 of (item n of lignes)) is not "" then set i to n
    end try
    end repeat
    return i
    end LitCSVindex
    
    
    on EcritCSV(fcsv, l1, l2, l3, i) -- ecrit le fichier fcsv avec les lignes formées de l1,l2,l3 et un 'X' en ligne i)
    
        set mtexte to ""
    repeat with n from 1 to count of l1
    if n = i then-- met un X en colonne 4 sur la ligne choisie
                set finligne to "X"
    else
                set finligne to ""
    end if
    if n = (count of l1) then-- pas de return en dernière ligne
                set retour to ""
    else
                set retour to return
    endif
            set mtexte to mtexte & (item n of l1) & Sep & (item n of l2) & Sep & (item n of l2) & Sep & finligne & retour
    endrepeat
    try
            set fcible to open for access file fcsv with write permission
            set eof of fcible to 0
            write mtexte to fcible
            close access fcible
    on error
            close access fcs
    end try
     end EcritCSV
    
    
    on indexof(theItem, fichierCSV)
    set text item delimiters to return
        set fichierCSV to return & fichierCSV & return
    set text item delimiters to {""}
    try
            -1 + (count (paragraphs of (text 1 thru (offset of (return & theItem & return) in fichierCSV) of fichierCSV)))
    on error
            0
    end try
    
    end indexof
    Cordialement

  15. #15
    Membre à l'essai
    Homme Profil pro
    Graphiste
    Inscrit en
    Décembre 2013
    Messages
    82
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Graphiste
    Secteur : Communication - Médias

    Informations forums :
    Inscription : Décembre 2013
    Messages : 82
    Points : 24
    Points
    24
    Par défaut Super... Merci
    Salut PBell,

    J'ai testé rapidement et ça marche nickel...
    Je vais intégrer ce code à un script plus global que je tente de mettre en place et me permettrait de te tenir au courant.

    Merci encore.

  16. #16
    Membre à l'essai
    Homme Profil pro
    Graphiste
    Inscrit en
    Décembre 2013
    Messages
    82
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Graphiste
    Secteur : Communication - Médias

    Informations forums :
    Inscription : Décembre 2013
    Messages : 82
    Points : 24
    Points
    24
    Par défaut J'essaie de modifier ton script
    Salut PBell,

    J'ai apporté tes suggestions de modifications et ça marche nickel (comme je te l'avais indiqué il y avait sans doute des redondances et choses inutiles) car en fait ce script est inséré dans un autre script plus étoffé.

    En fait, dans le fichier Formats_Pubs_2.csv, la première colonne contient en cellule A FORMATS, en cellule B LARGEUR et en cellule C HAUTEUR.
    Donc si malencontreusement l'utilisateur choisi ce libellé, il faudrait une routine lui indiquant de choisir un format valable (c'est pour cela qu'il y avait dans mon précédent script le code (en remplaçant le 5 par 0, ça ne marche toujours pas) :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    (*
    set the_position to indexof(fichierCSV, libelle)
    if the_position is 0 then
    	tell application "Finder"
    		activate
    		display dialog "Format non valable"
    	end tell
    end if
    *)
    et plus bas :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    on indexof(theItem, fichierCSV)
    	set text item delimiters to return
    	set fichierCSV to return & fichierCSV & return
    	set text item delimiters to {""}
    	try
    		-1 + (count (paragraphs of (text 1 thru (offset of (return & theItem & return) in fichierCSV) of fichierCSV)))
    	on error
    		0
    	end try
     
    end indexof
    Mais si je mets the position à 0 à chaque format choisi le message Format non valable apparait donc ça ne marche plus.

    Donc comment faire pour que seul le 1° libellé contenant la mention FORMATS en cellule A (ligne 1 du fichier .csv) (qui apparait tout en haut du Dropdown) affiche Format non valable s'il est sélectionné mais que dans tous les autres cas ça fonctionne correctement ?

    Merci de ton aide.


    [/CODE]

  17. #17
    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,
    Si je résume ce que j'ai compris de ton explication, le fichier Formats_Pubs_2.csv contient des entêtes de colonnes placés en ligne 1.
    Ces entêtes doivent être exclus du menu proposé à l'utilisateur.

    Dans ce cas, il suffit de modifier les 2 routines LitCSVindex et EcritCSV.
    C'est tout l'intérêt de passer par des sous routines car cela permet de changer seulement le bloc concerné sans toucher au reste du script !

    Pour LitCSVindex, il suffit de débuter la lecture en ligne 2 et pas en ligne 1.
    Changer la ligne:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    repeat with n from 1 to (count of lignes)


    en: (l'index débute à 2)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    repeat with n from 2 to (count of lignes)



    Pour EcritCSV, il faut débuter l'écriture du fichier par une ligne contenant "FORMATS;LARGEUR;HAUTEUR" (les ; étant les séparateurs)
    Donc changer la première ligne de cette routine de:


    En:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    set mtexte to "FORMATS" & Sep & "LARGEUR" & Sep & "HAUTEUR" & return
    Ainsi on écrit en début de fichier les entêtes des colonnes !

    Cordialement

  18. #18
    Membre à l'essai
    Homme Profil pro
    Graphiste
    Inscrit en
    Décembre 2013
    Messages
    82
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Graphiste
    Secteur : Communication - Médias

    Informations forums :
    Inscription : Décembre 2013
    Messages : 82
    Points : 24
    Points
    24
    Par défaut Je me suis mal fait comprendre
    Salut PBell,

    Merci pour ta réponse mais je pense que je me suis al expliqué.
    Je joins les captures Dropdow,.png et FichierSCV.png pour que ce soit plus clair.
    En fait, je voudrais que si par erreur ou oubli l'utilisateur choisi la 1° ligne du tableau, et don 1° ligne du Dropdown, un message s'affiche (en premier plan) lui disant qu'il n'a pas choisi un format valable. Dès lors, en cliquant sur ok il reviendrait sur le dropdown pour choisir un bon format.

    Comment puis-je faire ?

  19. #19
    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,
    D'un point de vu interface utilisateur, si l'option 1 ne doit pas être sélectionnée par l'utilisateur, il est plus élégant de ne pas l'afficher dans le menu tout simplement.
    Donc je maintiens qu'il est préférable de ne pas montrer cette option 1 dans le menu. Ainsi elle ne peut être choisie et donc pas de message d'erreur et pas besoin de re-demander à l'utilisateur de choisir une nouvelle fois.

    C'est ce que j'ai fait avec les modifications proposées. La ligne 1 est bien dans le fichier, mais n'est pas affichée dans le menu. Donc elle ne peut être sélectionnée, donc pas besoin de tester et de redemander...

    Ce conseil étant donné, si tu veux absolument que l'utilisateur puisse choisir la ligne 1 pour lui refuser ensuite, il faut que tu mettes la ligne "set myResult to show myDialog" dans une boucle repeat et tester si le choix est 0 (les items du drop down commencent à 0):
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    Repeat
    set myResult to show myDialog
    if myResult = true and (selected index of varDropDown) = 0 then 
            display alert "Choisissez un autre libellé"
            else
            exit repeat
            end if
    end repeat
    On sort de la boucle dans les cas suivants:
    - l'utilisateur a cliqué sur Annuler (je pense que dans ce cas myResult est égal à False)
    - l'utilisateur a cliqué sur OK et il a choisi le premier libellé

    J'insiste toutefois sur l'aspect non "user friendly" de cette démarche

    Cordialement

  20. #20
    Membre à l'essai
    Homme Profil pro
    Graphiste
    Inscrit en
    Décembre 2013
    Messages
    82
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Graphiste
    Secteur : Communication - Médias

    Informations forums :
    Inscription : Décembre 2013
    Messages : 82
    Points : 24
    Points
    24
    Par défaut User firendly... tu as sans doute raison
    Bonsoir PBell,

    Tu as sans doute raison, je vais réfléchir mais dans le but d'être le plus concis et efficace possible, je noter "en dur" dans ma boite de dialogue le mot Format et ne le mettrai pas dans la liste déroulante.

    EN fait ce menu déroulant (dropdown) fera partie, comme je te l'ai déjà dit, d'un ensemble plus vaste. Il sera dans une boite de dialogue personnalisée qui contiendre des menus déroulants et des champs de saisie.
    En fait, il y aura 2 Dropdowns pour les formats du type A et ceux du type B, donc un Dropdown A et un Dropdown B.

    Le souci... et oui encore tu me diras... c'est que si on garde le dernier item sélectionné dans un des 2 Dropdown (ex le A) mais qu'en réalité on ait besoin d'un format du Dropdown B comment faire ?

    J'ai pensé donc utilisé pour chacun des Dropdown une checkbox du type :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    set enableGroup1 to make enabling group with properties {static label:"Format A : ", checked state:false}
    set enableGroup2 to make enabling group with properties {static label:"Format B : ", checked state:false}
    Dès lors par défaut les 2 Dropdown seraient décochés et l'utilisateur devrait donc cocher celui désiré.
    Mais dans mon script, si je coche le Dropdwn A je peux alors aussi décocher le B et donc source d'erreur car là le script ne comprendrait pas quel format il doit créer.

    Serait-il possible alors qu'a moment où 1 Drpdown serait coché (donc actif, rendre impossible de décocher le 2° ou au minimum faire apparaitre une alerte indiquant à l'utilisateur de décocher le Dropdown A s'il veut utilier le Dropdown B ?

    Par ailleurs, si je double le script que tu m'as conçu (pour le Dropdown A et pour le Dropdown B), donc j'aurais varDropDownA et varDropDownB, comment le script va interprété la partie du code :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    set myResult to show myDialog
    	if myResult = true then
    		-- varDropDown Handler (Dropdown)
    		set Nindex to ((selected index of varDropDown) + 1)
    		set varDropDownListChoice to item Nindex of libelle as item
    	end if
    puisqu'ici nous avons seulement varDropDown ?

    Je te joins une capture de ma boite de dialogue où tu verras que selon mon code je peux avoir actif les 2 DropDown, alors que je voudrait le rendre impossible et je te mets ci-dessous mon code.

    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
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
    129
    130
    131
    132
    133
    134
    135
    136
    137
    138
    139
    140
    141
    142
    143
    144
    145
    146
    147
    148
    149
    150
    151
    152
    153
    154
    155
    156
    157
    158
    159
    160
    161
    162
    163
    164
    165
    166
    167
    168
    169
    170
    171
    172
    173
    174
    175
    176
    177
    178
     
    property Sep : ";" -- defini le separateur de colonnes du fichier csv
    global libelle, largeur, hauteur, Aindex, Nindex
     
     
    --initialisation
    set libelle to {} -- liste des libelles de formats
    set largeur to {} -- liste des largeurs de formats
    set hauteur to {} -- liste des hauteurs de formats
    set Aindex to 0 -- ancien index
    set Nindex to 0 -- nouvel index
     
     
    -- pour les tests
    set fichierCSV to (path to desktop as text) & "Formats_Pubs_2.csv"
     
    set Aindex to LitCSVindex(fichierCSV, libelle, largeur, hauteur) --lecture du fichier csv
    if Aindex = 0 then set Aindex to 1
     
     
    tell application "Adobe InDesign CC 2018"
    	activate
    	set varDropDownList to libelle
    	--set varSelectedIndex to 1
    	set varMinimumWidth to 150
    	set myEventNames to {"afterNew", "afterUpdate", "afterInvoke", "afterActivate", "afterContextChanged", "afterSelectionAttributeChanged", "afterSelectionChanged", "beforeUpdate"}
    	set myDialog to make dialog with properties {name:"CHOIX DU FORMAT :"}
     
    	tell myDialog
     
    ---- DRODPDOWN A
    		set dlgColumn1 to make dialog column
    		tell dlgColumn1
     
    			set enableGroup1 to make enabling group with properties {static label:"FORMATS A : ", checked state:false}
     
    			tell enableGroup1
    				tell (make dialog column)
    					set varDropDownA to make dropdown with properties {string list:libelle, selected index:(Aindex - 1), min width:varMinimumWidth}
     
     
    					tell varDropDownA
    						repeat with myEventName in myEventNames
    							make event listener with properties {event type:myEventName, handler:my dropdownchange}
    						end repeat
    					end tell
     
    				end tell
    			end tell
    		end tell
     
    ---- DRODPDOWN B
    		set dlgColumn2 to make dialog column
    		tell dlgColumn2
     
    			set enableGroup2 to make enabling group with properties {static label:"FORMATS B : ", checked state:false}
     
    			tell enableGroup2
    				tell (make dialog column)
    					set varDropDownB to make dropdown with properties {string list:libelle, selected index:(Aindex - 1), min width:varMinimumWidth}
     
     
    					tell varDropDownB
    						repeat with myEventName in myEventNames
    							make event listener with properties {event type:myEventName, handler:my dropdownchange}
    						end repeat
    					end tell
     
    				end tell
    			end tell
    		end tell
     
     
    	end tell
     
     
     
    	--get the results
    	set myResult to show myDialog
    	if myResult = true then
    		-- varDropDown Handler (Dropdown)
    		set Nindex to ((selected index of varDropDown) + 1)
    		set varDropDownListChoice to item Nindex of libelle as item
    	end if
    	destroy myDialog
    end tell
     
     
    if Nindex is not Aindex then -- index changé, on l'enregistre, sinon, on ne fait rien !
    	EcritCSV(fichierCSV, libelle, largeur, hauteur, Nindex)
    end if
     
    (*
    set the_position to indexof(fichierCSV, libelle)
    if the_position is 0 then
    	tell application "Finder"
    		activate
    		display dialog "Format non valable"
    	end tell
    end if
    *)
     
     
     
     
     
     
     
    -- ************************ FIN DU PROGRAMME PRINCIPAL
     
     
    on dropdownchange()
    	tell application "Adobe InDesign CC 2018"
    		set myEvent to evt
    		display dialog ("This event is the " & event type of myEvent & " event.")
    	end tell
    end dropdownchange
     
     
    on LitCSVindex(fcsv, l1, l2, l3)
    	--lit le fichier localcsv et retourne les listes l1,L2,l3. Renvoie l'index de la derniere ligne avec la colonne 4 non vide
    	set i to 0
    	set lignes to every paragraph of (read file fcsv)
    	set AppleScript's text item delimiters to {Sep}
    	repeat with n from 1 to (count of lignes)
    		set end of l1 to text item 1 of (item n of lignes)
    		set end of l2 to text item 2 of (item n of lignes)
    		set end of l3 to text item 3 of (item n of lignes)
    		try
    			if (text item 4 of (item n of lignes)) is not "" then set i to n
    		end try
    	end repeat
    	return i
    end LitCSVindex
     
     
    on EcritCSV(fcsv, l1, l2, l3, i) -- ecrit le fichier fcsv avec les lignes formées de l1,l2,l3 et un 'X' en ligne i)
     
    	set mtexte to ""
     
    	repeat with n from 1 to count of l1
    		if n = i then -- met un X en colonne 4 sur la ligne choisie
    			set finligne to "X"
    		else
    			set finligne to ""
    		end if
    		if n = (count of l1) then -- pas de return en dernière ligne
    			set retour to ""
    		else
    			set retour to return
    		end if
    		set mtexte to mtexte & (item n of l1) & Sep & (item n of l2) & Sep & (item n of l2) & Sep & finligne & retour
    	end repeat
     
    	try
    		set fcible to open for access file fcsv with write permission
    		set eof of fcible to 0
    		write mtexte to fcible
    		close access fcible
    	on error
    		close access fcs
    	end try
     
    end EcritCSV
     
    (*
    on indexof(theItem, fichierCSV)
    	set text item delimiters to return
    	set fichierCSV to return & fichierCSV & return
    	set text item delimiters to {""}
    	try
    		-1 + (count (paragraphs of (text 1 thru (offset of (return & theItem & return) in fichierCSV) of fichierCSV)))
    	on error
    		0
    	end try
     
    end indexof
    *)
    Merci pour ton aide
    Images attachées Images attachées  

Discussions similaires

  1. Réponses: 6
    Dernier message: 18/05/2010, 14h28
  2. Réponses: 3
    Dernier message: 10/08/2009, 17h39
  3. Présélectionner une valeur par défaut dans liste déroulante
    Par kate59 dans le forum PHP & Base de données
    Réponses: 12
    Dernier message: 25/07/2009, 22h52
  4. avoir une ligne sélectionné par défaut dans un jtable
    Par minanoun dans le forum Composants
    Réponses: 4
    Dernier message: 12/04/2009, 19h15
  5. Valeur par défaut dans liste déroulante
    Par martin_malin dans le forum IHM
    Réponses: 1
    Dernier message: 24/09/2008, 12h23

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