Bureautique Numbers : remettre à zéro des cases à cocher

Bonjour,
Tant que j'y suis, une autre amélioration...
Cacher la fenêtre du script après l'avoir lancé. Ajouter une ligne dans la premier bloc "tell application "finder" qui devient
Bloc de code:
tell application "Finder"
    set chemin to choose file with prompt "sélectionner le fichier numbers à ouvrir" --demande de choisir le fichier numbers à ouvrir
    open chemin --ouvre le fichier numbers
    delay 2 --attend 2 secondes que le fichier soit ouvert
    set visible of every process whose name is "Script editor" to false -- masquer la fenêtre du script
end tell
 
J'ai testé, avec rien que ce bloc d'instructions :
AppleScript:
tell application "Numbers" --dans numbers
    activate -- active
    tell the table "Tableau 1" of the sheet "feuille 1" of front document -- dans la table "Tableau 1" feuille 1 du document à l'écran
 
        set selection range to cell range --tout sélectionner
        tell application "System Events"
            key code 49 -- touche espace
        end tell
        delay 1
        set selection range to cell "A2"
    end tell --fin de dans tableau
end tell -- fin de dans numbers
Comme tu dis, parfois ça coche tout et parfois ça décoche tout. o_O

[…] ce qui se passe semble dépendre uniquement de l'état de « la première case à cocher du premier rang qui en contient » (est-ce clair ?) :
Si celle-ci est cochée, tout sera décoché et si elle est décochée, tout sera coché.
[…]
Si on voulait un fonctionnement assuré avec cette méthode, il faudrait donc ajouter un test au début pour connaître l'état de la 1e case à cocher considérée.
Ensuite, selon le cas, répéter ou non la séquence :
AppleScript:
tell application "System Events"
    key code 49 -- touche espace
end tell
delay 1
Comme je restais dérangé par l'idée qu'il faille aller modifier le script si l'adresse de cette première case à cocher changeait, j'ai fait une petite recherche (Numbers Applescript…) qui m'a mené sur ce site :
où j'ai trouvé des bribes de commandes à adapter.

J'ai un peu modifié ma stratégie : plus besoin de test. Une fois la première case à cocher repérée, je la mets d'office à vrai, puis je tape une fois sur espace.
Ceci permet d'utiliser le script quelle que soit la configuration du Tableau 1 de la feuille 1.

Voilà ce que donne la portion de code concernée :
AppleScript:
tell application "Numbers" --dans numbers
    activate -- active
    tell the table "Tableau 1" of the sheet "feuille 1" of front document -- dans la table "Tableau 1" feuille 1 du document à l'écran
        set selection range to cell range --tout sélectionner
        set lapremiere to (the first cell of selection range whose format is checkbox) --définir la variable lapremiere comme étant la première cellule dont le format est Case à cocher
        set value of lapremiere to true --cocher cette cellule
    
        set selection range to cell range --tout sélectionner
        tell application "System Events"
            key code 49 --enfoncer touche espace
        end tell
        delay 1
        set selection range to cell "A2"
    end tell --fin de dans tableau
end tell -- fin de dans numbers

Cette portion de code fonctionne toute seule mais est sinon à placer à la fin de ton script entre les lignes :
AppleScript:
on efface() --bloc RAZ cellule

end efface --fin du bloc RAZ
 
Dernière édition:
  • J’aime
Réactions: zeltron54
@baron
Bravo pour ta recherche ça fonctionne, donc plus besoin d'entrée la liste des cellules
C'est @Celedo qui va être content !
le script complet devient:

Bloc de code:
tell application "Finder"
    set chemin to choose file with prompt "sélectionner le fichier numbers à ouvrir" --demande de choisir le fichier numbers à ouvrir
    open chemin --ouvre le fichier numbers
    delay 2 --attend 2 secondes que le fichier soit ouvert
    set visible of every process whose name is "Script editor" to false -- masquer la fenêtre du script
end tell

tell application "Numbers" --dans numbers
    activate --active numbers
    tell the table "MES BOUTONS" of the sheet "feuille 1" of front document --se positionne dans la table "mes boutons"
        
        set value of cell "A1" to "R.A.Z. des cases à cocher" -- Ecrit dans la cellule A1 le texte "R.A.Z. des cases à cocher"
        
        tell application "Numbers" --dans numbers
            activate -- active
            tell the table "Tableau 1" of the sheet "feuille 1" of front document -- dans la table "Tableau 1" feuille 1 du document à l'écran
                set selection range to cell "A2"
                delay 1
            end tell --fin de dans tableau
        end tell -- fin de dans numbers
        
        
        repeat -- début du bloc boucle
            tell application "Finder" --dans le finder
                if application "Numbers" is running then --vérifie si numbers est lancé"
                else --si numbers n'est plus lancé
                    exit repeat --on quitte la boucle
                end if --fin de si
            end tell -- fin dans le finder retourne dans numbers
            try --bloc pour continuer si erreur
                set LaSelection to selection range --récupère dans la variable "lasélection" les cellules sélectionnees dans numbers
                set Lacellule to name of cell 1 of LaSelection -- nom de la cellule 1 de la selection
                if Lacellule = "a1" then --si la cellule A1 est la cellule sélectionnée
                    
                    my efface() --va exécuter le bloc on efface (le script de RAZ cellules)
                    
                end if -- fin de si
                if Lacellule = "b1" then --si la cellule B1 est la cellule sélectionnée
                    set value of cell "a1" to "Veuillez lancer le script bouton" -- écrit "Veuillez lancer le script bouton" dans cette cellule pour le prochain lancement du script
                    exit repeat -- quitte la boucle
                end if --fin de si
            end try --fin du bloc erreur
            
        end repeat --fin du bloc boucle
        quit "numbers" --quitte l'application numbers
    end tell -- fin de dans la table "mes boutons"
end tell -- fin de dans numbers

tell "system events" -- dans l application systeme
    quit application "Script Editor" --quit application script editor
end tell --fin  dans application système


on efface() --bloc RAZ cellule
    tell application "Numbers" --dans numbers
        activate -- active
        tell the table "Tableau 1" of the sheet "feuille 1" of front document -- dans la table "Tableau 1" feuille 1 du document à l'écran
            set selection range to cell range --tout sélectionner
            set lapremiere to (the first cell of selection range whose format is checkbox) --définir la variable lapremiere comme étant la première cellule dont le format est Case à cocher
            set value of lapremiere to true --cocher cette cellule
            
            set selection range to cell range --tout sélectionner
            tell application "System Events"
                key code 49 -- touche espace
            end tell
            delay 1
            set selection range to cell "A2"
        end tell --fin de dans tableau
    end tell -- fin de dans numbers
end efface --fin du bloc RAZ
 
[…] plus besoin d'entrer la liste des cellules
C'est @Celedo qui va être content !
C'est ce qui m'avait plu dans l'astuce de taper sur la barre d'espace… ;)

+++++++++++++

La syntaxe de mon mini bout de script fonctionne mais je m'interroge encore sur le style…

— De manière générale, vaut-il mieux définir une variable "lapremiere" qui ne sert qu'une fois (comme ci-dessus) ou tout mettre en une ligne, comme ceci, qui fonctionne aussi :
AppleScript:
        -- [Ligne désactivée] set lapremiere to (the first cell of selection range whose format is checkbox) --définir la variable lapremiere comme étant la première cellule dont le format est Case à cocher

        set value of (the first cell of selection range whose format is checkbox) to true --cocher la première cellule dont le format est Case à cocher
— D'autre part, les parenthèses autour de (the first cell of selection range whose format is checkbox) sont-elles utiles ? Nécessaires ?
 
@baron
Tu as raison, les parenthèses sont inutiles dans ce cas.
Pour le fait de mettre dans une variable, c'est également inutile et ça rallonge le script d'une ligne, mais lorsque j 'écris le script, j'aime bien passer par une variable qui me permet, en ajoutant une ligne "display dialog lavariable" de savoir si c'est correct et la valeur qu"à cette variable, et si erreur , la recherche est plus facile., et je trouve le script plus lisible surtout sur le forum pour les personnes qui demandent des scripts et qui veulent comprendre...

Bref tu l'aura compris, il y a toujours plusieurs façons de faire pour arriver au même résultat. L' essentiel étant que cela fonctionne, après on peu toujours optimiser pour gagner un peu de temps sur l'exécution du script.
 
  • J’aime
Réactions: baron
Merci pour ces précisions. Autant prendre d'emblée de bonnes habitudes !
:angelic:

Pour la clarté, je vais donc garder les parenthèses (j'aime la ponctuation… :bookworm:) ; et déclarer des variables pour me rappeler à quoi elles servent.