Applescript et Numbers

Jalex07

Membre confirmé
27 Mars 2022
10
0
80
Bonjour,
Je débute avec Applescript et je voudrais écrire un script capable de récupérer la ligne et la colonne de la cellule active dans un fichier Numbers.
J'ai déjà réussi à lire et à écrire dans une cellule mais à condition de connaître son nom ("A2", "B5" ...). Mais comment faire pour obtenir la cellule sélectionnée dans le fichier ?
Si quelqu'un peut m'aider ...
Merci d'avance.
 
Bonjour,

Pour obtenir la sélection dans numbers il faut:
Set LaSelection to selection range

exemple:

Bloc de code:
tell application "Numbers"
    activate
    tell the first table of the active sheet of document 1
        set LaSelection to selection range
        set Lacellule to name of cell of LaSelection as string
        display dialog Lacellule
    end tell
end tell

Si plusieurs cellules sont sélectionnées tu ajoutes le numéro d'ordre de la cellule recherchée

Exemple: pour obtenir le nom de la deuxième cellule de la sélection


Bloc de code:
tell application "Numbers"
    activate
    tell the first table of the active sheet of document 1
        set LaSelection to selection range
        set Lacellule to name of cell 2 of LaSelection as string
        display dialog Lacellule
    end tell
end tell
 
Bonjour,

Pour obtenir la sélection dans numbers il faut:
Set LaSelection to selection range

exemple:

Bloc de code:
tell application "Numbers"
    activate
    tell the first table of the active sheet of document 1
        set LaSelection to selection range
        set Lacellule to name of cell of LaSelection as string
        display dialog Lacellule
    end tell
end tell

Si plusieurs cellules sont sélectionnées tu ajoutes le numéro d'ordre de la cellule recherchée

Exemple: pour obtenir le nom de la deuxième cellule de la sélection


Bloc de code:
tell application "Numbers"
    activate
    tell the first table of the active sheet of document 1
        set LaSelection to selection range
        set Lacellule to name of cell 2 of LaSelection as string
        display dialog Lacellule
    end tell
end tell
Bonjour et merci pour cette réponse rapide !
Malheureusement cela me donne une erreur lorsque je l'utilise : Il est impossible d’obtenir selection range of "C". ??
 
Bonjour,

Comment procèdes-tu ? car chez moi pas de problème

Faire un simple copié-collé du code dans une fenêtre de "Editeur de script".
Ouvrir Numbers, dans le document Numbers , sélectionner une cellule.

Exécuter le script, une fenêtre dialogue s'ouvre avec le nom de la cellule sélectionnée.
 
Bonjour,

Comment procèdes-tu ? car chez moi pas de problème

Faire un simple copié-collé du code dans une fenêtre de "Editeur de script".
Ouvrir Numbers, dans le document Numbers , sélectionner une cellule.

Exécuter le script, une fenêtre dialogue s'ouvre avec le nom de la cellule sélectionnée.
Oui merci. J'avis voulu mettre le nom du document (à la place de document 1) et j'avais fait une erreur. Maintenant ça marche. Encore merci.

J'aurais une autre question. Est-il possible d'utiliser un script pour trier une zone du fichier (type range) selon l'ordre croissant d'une de ses colonnes?
 
Bonjour,

Quelques précisions !

set LaSelection to selection range --récupère dans la variable LaSelection le chemin de la sélection

set Lacellule to name of cell of LaSelection --récupère dans la variable Lacellule le nom de la cellule sélectionnée si plusieurs cellules récupère le nom des cellules dans la variable au format liste. Pour l'afficher mettre la variable au format texte (as string). Si on veux le nom d'une cellule de la sélection il faut préciser le numéro d'ordre dans la sélection

set Maselection to name of LaSelection --récupère dans la variable Maselection le nom des cellules au format tableau (si la sélection est de B4 à C5 --> B4:C5
 
Bonsoir,

Quand tu es dans l'éditeur de script tu ouvres le dictionnaire (-->fichier-->ouvrir le dictionnaire) tu choisis Numbers, tu trouveras les possibilités de scripts (syntaxe pas évidente , mais bon!) tu pourras voir pour le tri:

sort v : Sort the rows of the table.
sort table
by column : The column to sort by.
[direction ascending/‌descending]
[in rows range] : Limit the sort to the specified rows.

Note: Curieusement je ne vois tes messages que tard le soir, alors qu'il sont datés du matin (8h17) !!!
 
Bonjour,

Au vue des explications du dictionnaire de Numbers, pour trier.

Bloc de code:
set selection range to range "a14:e37" -- selectionne les cellules à trier exemple: le tableau de A14 à E37
        set LaSelection to selection range --obtient le chemin de la sélection
        sort by column "A" direction descending in rows LaSelection   -- descending pour un tri décroissant ou ascending (par défaut si pas renseigné) pour un tri croissant) de la colonne A

Dis moi si c'est bon !
 
Bonjour,
@Jalex07
Bloc de code:
set selection range to range "a14:e37" -- selectionne les cellules à trier exemple: le tableau de A14 à E37
set LaSelection to selection range --obtient le chemin de la sélection
sort by column "A" direction descending in rows LaSelection -- descending pour un tri décroissant ou ascending (par défaut si pas renseigné) pour un tri croissant) de la colonne A
Dis moi si c'est bon !
J'ai testé chez moi cela fonctionne !

As-tu pu tester ?
Est-ce bon pour toi ?
 
Bonjour,
@Jalex07

J'ai testé chez moi cela fonctionne !

As-tu pu tester ?
Est-ce bon pour toi ?
Oui. Merci.
Comme cela ça marche. Mais moi, ce qui m'intéresserait c'est de trouver "selection range" sans définir la sélection auparavant, càd. trouver la sélection qui est faite dans le fichier (par la choix de l'utilisateur).
Par ailleurs, je m'intéresse aussi à entrer dans un fichier "pages" et je peux sélectionner par exemple le dernier mot du texte :
[B]tell[/B] [I]application[/I] "Pages" [B]tell[/B] [I]document[/I] 1 [B] set[/B] dernierMot [B]to[/B] [B]last[/B] [I]word[/I] [B]of[/B] body text [B]end[/B] [B]tell end[/B] [B]tell[/B]
mais je voudrais pouvoir sélectionner par exemple le dernier "titre 2" ou un mot par la taille de ses caractères.
 
Pour obtenir la sélection, tu as la solution dans le message #2.
set Laselection to selection range

dans le message #9 il suffit de supprimer la 1ere ligne…
 
Pour obtenir la sélection, tu as la solution dans le message #2.
set Laselection to selection range

dans le message #9 il suffit de supprimer la 1ere ligne…
Non ça ne marche pas.
Voici mon code :

tell application "Numbers"
activate
tell table 1 of sheet 1 of document 1
set LaSelection to selection range
end tell
end tell

et tout ce que j'obtiens en retour c'est {}.
 
Pourtant ton code est bon et le variable laselection contient bien l'adresse de la sélection.
Pour afficher la sélection il faut récupérer le nom du chemin de la variable et lui demander de l'afficher avec un display dialog:
Ce qui donne :

Bloc de code:
tell application "Numbers"
    activate
    tell table 1 of sheet 1 of document 1
        set LaSelection to selection range
        set var_affiche to name of LaSelection
        display dialog var_affiche
    end tell
end tell
 
tell application "Numbers" activate tell table 1 of sheet 1 of document 1 set LaSelection to selection range set var_affiche to name of LaSelection display dialog var_affiche end tell end tell
Je te remercie de tes réponses.
Malheureusement, même avec cette dernière version, je n'obtiens que le message :
"Il est impossible d'obtenir name of {}"
 
Je te remercie de tes réponses.
Malheureusement, même avec cette dernière version, je n'obtiens que le message :
"Il est impossible d'obtenir name of {}"
En fait la seule manière que j'aie d'obtenir qqch est :

set MaTable to table 1 of sheet 1 of document 1
tell MaTable
set ligne to address of first item of selection range
...
end tell

Comme cela ça marche.
 
En fait la seule manière que j'aie d'obtenir qqch est :

set MaTable to table 1 of sheet 1 of document 1
tell MaTable
set ligne to address of first item of selection range
...
end tell

Comme cela ça marche.
Excuse!
set ligne to address of first item of rows of selection range
 
Pourtant avec le code du message #13

Je fais un copié collé de ce code dans Editeur de script, J'ouvre Numbers avec un tableau vierge, dans ce tableau je sélectionne un groupe de cellules.
J'exécute le script, il me donne bien ma sélection....
 
Pour t'aider voici un petit script qui t'affiche les différentes infos de la sélection. Puis le tri.

Bloc de code:
tell application "Numbers"
    activate
    tell the first table of the active sheet of document 1
        set LaSelection to selection range
        set Lacellule to name of cell 1 of LaSelection -- nom de la cellule 1 de la selection
        display dialog "Nom de la première cellule : " & Lacellule
        set a to name of LaSelection
        set b to name of cell of LaSelection -- liste des cellule dans une variable liste
        display dialog "Nom de la sélection : " & a -- nom de la selection
        display dialog "Liste des cellules de la sélection : " & b as string -- affiche la liste en string
    
        set colonne to name of column of cell 1 of LaSelection
        display dialog "colonne de la première cellule : " & colonne
        set ligne to address of first item of rows of selection range
        display dialog "ligne de la première cellule : " & ligne

--Pour trier
        set LaSelection to selection range --obtient le chemin de la sélection
        sort by column colonne direction descending in rows LaSelection -- descending pour un tri décroissant ou ascending (par défaut si pas renseigné) pour un tri croissant) de la première colonne de la sélection
display dialog "la sélection à été trié suivant la colonne " & colonne & " en décroissant"
    
    end tell
end tell

Edit: Bien sur pour le tri il faut que les cellules de la première colonne contiennent des valeurs ...
 
Dernière édition:
Pour t'aider voici un petit script qui t'affiche les différentes infos de la sélection. Puis le tri.

Bloc de code:
tell application "Numbers"
    activate
    tell the first table of the active sheet of document 1
        set LaSelection to selection range
        set Lacellule to name of cell 1 of LaSelection -- nom de la cellule 1 de la selection
        display dialog "Nom de la première cellule : " & Lacellule
        set a to name of LaSelection
        set b to name of cell of LaSelection -- liste des cellule dans une variable liste
        display dialog "Nom de la sélection : " & a -- nom de la selection
        display dialog "Liste des cellules de la sélection : " & b as string -- affiche la liste en string
   
        set colonne to name of column of cell 1 of LaSelection
        display dialog "colonne de la première cellule : " & colonne
        set ligne to address of first item of rows of selection range
        display dialog "ligne de la première cellule : " & ligne

--Pour trier
        set LaSelection to selection range --obtient le chemin de la sélection
        sort by column colonne direction descending in rows LaSelection -- descending pour un tri décroissant ou ascending (par défaut si pas renseigné) pour un tri croissant) de la première colonne de la sélection
display dialog "la sélection à été trié suivant la colonne " & colonne & " en décroissant"
   
    end tell
end tell

Edit: Bien sur pour le tri il faut que les cellules de la première colonne contiennent des valeurs ...
Je te remercie encore de tes efforts ... mais j'ai recopié ce bloc de code, j'ai sélectionné des cellules dans un fichier numbers et j'obtiens :
Erreur de script
Il est impossible d’obtenir cell 1 of {}.
 
A priori le message indique qu'il ne trouve pas le tableau.

Dans Numbers as-tu plusieurs documents ou plusieurs feuilles ou plusieurs tableaux ?

change la ligne 3 du script:
tell the first table of the active sheet of document 1
par
tell the first table of the active sheet of front document

Qui s'occupe alors du document qui a le focus.