| | Numbers : tableaux croisés dynamiques (2) | |
| | Auteur | Message |
---|
TG Légende vivante
Nombre de messages : 5791 Age : 60 Planète : Paradis n°2 Matos : MacBook Pro 16" 2019 • Big Sur Date d'inscription : 12/11/2006
| Sujet: Numbers : tableaux croisés dynamiques (2) 4/23/2010, 22:45 | |
| Dans un précédent post, j'avais débroussaillé un peu le terrain côté tableaux croisés. Mais la construction et le déverminage de formules ne sont pas une gymnastique toujours aisée. Des questions récentes qui m'ont aiguillé vers l'usage d'AppleScript pour piloter Numbers j'ai tiré l'idée de créer un outil automatisant un peu le processus. En répondant à une série de questions, il vous guidera vers le résultat avec un effort raisonnable. À placer dans le menu des scripts pour Numbers histoire de l'avoir à portée de main... TéléchargementÀ vous, amis visiteurs : MacNOMODO ne vous vend rien, ne vous demande pas de faire de dons. Les participations que nous préférons sont celles qui animent et font vivre ce forum. Si vous appréciez ce que vous trouvez ici, votre plus grand soutien sera votre inscription. | |
| | | Mateo1200 Blanc bec
Nombre de messages : 2 Date d'inscription : 06/02/2013
| Sujet: Re: Numbers : tableaux croisés dynamiques (2) 2/6/2013, 16:50 | |
| Bonjour, Je n'arrive pas à faire fonctionner ce script. Ou doit-on le mettre exactement ? Si je le dezip sur mon bureau il me met le message suivant : "mpossible de lire le fichier car le script n’est pas modifiable (il est enregistré comme fichier exécutable uniquement)." Merci de votre aide.
Je suis sous 10.8. | |
| | | Doubleyou Légende vivante
Nombre de messages : 6324 Age : 54 Planète : de dingues Matos : un truc avec une pomme dessus et d'autres machins coûteux Date d'inscription : 19/11/2006
| Sujet: Re: Numbers : tableaux croisés dynamiques (2) 2/7/2013, 08:31 | |
| Salut. Il faut décompresser le zip et placer le script dans ~/Bibliothèque/Scripts/Numbers Si le dossier Numbers n'existe pas dans le répertoire Scripts, il faut le créer. Nota bene : il s'agit de la bibliothèque de votre compte, celle qui est cachée et à laquelle on accède via le menu Aller du Finder en maintenant la touche alt. Ensuite vous lancez l'éditeur AppleScript. Dans ses préférences, vous cochez "Afficher le menu des scripts dans la barre de menu". Le sigle AppleScript d'ajoute à la barre de menu en haut à droite. Vous ouvrez Numbers. Cliquez sur le sigle AppleScript de la barre de menu et vous y retrouverez le script Tableau Croisé dans un sous menu Numbers. @TG Ce n'est pas que je veux faire mon prosélyte OpenSource mais ce serait bien si tu donnais le code du script, sous licence GPL, BSD ou carrément WTFPL. _______________ Art. 10. Nul ne doit être inquiété pour ses opinions, même religieuses, pourvu que leur manifestation ne trouble pas l'ordre public établi par la Loi. Art. 11. La libre communication des pensées et des opinions est un des droits les plus précieux de l'Homme : tout Citoyen peut donc parler, écrire, imprimer librement, sauf à répondre de l'abus de cette liberté dans les cas déterminés par la Loi. Art. 12. La garantie des droits de l'Homme et du Citoyen nécessite une force publique : cette force est donc instituée pour l'avantage de tous, et non pour l'utilité particulière de ceux auxquels elle est confiée.
| |
| | | TG Légende vivante
Nombre de messages : 5791 Age : 60 Planète : Paradis n°2 Matos : MacBook Pro 16" 2019 • Big Sur Date d'inscription : 12/11/2006
| Sujet: Re: Numbers : tableaux croisés dynamiques (2) 2/7/2013, 22:00 | |
| Je donne. Mais comme j'ai peu de temps en ce moment, je veux bien que tu t'en occupes. On peut mettre en open source et laisser la référence à MacNOMODO ? | |
| | | Doubleyou Légende vivante
Nombre de messages : 6324 Age : 54 Planète : de dingues Matos : un truc avec une pomme dessus et d'autres machins coûteux Date d'inscription : 19/11/2006
| Sujet: Re: Numbers : tableaux croisés dynamiques (2) 2/8/2013, 00:00 | |
| Pour ça, rien de mieux que la License BSD. Il suffit de remplacer ce qui fait référence à l'Université de Berkeley par MacNOMODO ou ce que tu veux. _______________ Art. 10. Nul ne doit être inquiété pour ses opinions, même religieuses, pourvu que leur manifestation ne trouble pas l'ordre public établi par la Loi. Art. 11. La libre communication des pensées et des opinions est un des droits les plus précieux de l'Homme : tout Citoyen peut donc parler, écrire, imprimer librement, sauf à répondre de l'abus de cette liberté dans les cas déterminés par la Loi. Art. 12. La garantie des droits de l'Homme et du Citoyen nécessite une force publique : cette force est donc instituée pour l'avantage de tous, et non pour l'utilité particulière de ceux auxquels elle est confiée.
| |
| | | Mateo1200 Blanc bec
Nombre de messages : 2 Date d'inscription : 06/02/2013
| Sujet: Re: Numbers : tableaux croisés dynamiques (2) 2/8/2013, 20:52 | |
| Merci cela fonctionne parfaitement maintenant Est-il possible de voir la source de ce code pour voir comment ça fonctionne un peut ? j'aimerai développer d'autre de ces petites merveilles pour Numbers N'y aurait-il pas des moyens de mieux intégrer ces scripts dans Numbers ? Merci encore. | |
| | | TG Légende vivante
Nombre de messages : 5791 Age : 60 Planète : Paradis n°2 Matos : MacBook Pro 16" 2019 • Big Sur Date d'inscription : 12/11/2006
| Sujet: Re: Numbers : tableaux croisés dynamiques (2) 2/8/2013, 22:29 | |
| Pour autant que je me souvienne, je n'ai pas protégé le code. Tu l'ouvres dans l'éditeur AppleScript et tout est accessible.
Pour le reste, AppleScript a sa philosophie qui n'est pas celle de VBA. | |
| | | Doubleyou Légende vivante
Nombre de messages : 6324 Age : 54 Planète : de dingues Matos : un truc avec une pomme dessus et d'autres machins coûteux Date d'inscription : 19/11/2006
| Sujet: Re: Numbers : tableaux croisés dynamiques (2) 2/9/2013, 10:59 | |
| - TG a écrit:
- Pour autant que je me souvienne, je n'ai pas protégé le code.
Tu l'ouvres dans l'éditeur AppleScript et tout est accessible.
Pour le reste, AppleScript a sa philosophie qui n'est pas celle de VBA. Que neni. Verrouillé. C'était le pourquoi de ma demande. _______________ Art. 10. Nul ne doit être inquiété pour ses opinions, même religieuses, pourvu que leur manifestation ne trouble pas l'ordre public établi par la Loi. Art. 11. La libre communication des pensées et des opinions est un des droits les plus précieux de l'Homme : tout Citoyen peut donc parler, écrire, imprimer librement, sauf à répondre de l'abus de cette liberté dans les cas déterminés par la Loi. Art. 12. La garantie des droits de l'Homme et du Citoyen nécessite une force publique : cette force est donc instituée pour l'avantage de tous, et non pour l'utilité particulière de ceux auxquels elle est confiée.
| |
| | | TG Légende vivante
Nombre de messages : 5791 Age : 60 Planète : Paradis n°2 Matos : MacBook Pro 16" 2019 • Big Sur Date d'inscription : 12/11/2006
| Sujet: Re: Numbers : tableaux croisés dynamiques (2) 2/9/2013, 16:50 | |
| - Doubleyou a écrit:
- TG a écrit:
- Pour autant que je me souvienne, je n'ai pas protégé le code.
Tu l'ouvres dans l'éditeur AppleScript et tout est accessible.
Pour le reste, AppleScript a sa philosophie qui n'est pas celle de VBA. Que neni. Verrouillé.
C'était le pourquoi de ma demande. Ah ! Bon. Ben c'est une erreur. | |
| | | TG Légende vivante
Nombre de messages : 5791 Age : 60 Planète : Paradis n°2 Matos : MacBook Pro 16" 2019 • Big Sur Date d'inscription : 12/11/2006
| Sujet: Re: Numbers : tableaux croisés dynamiques (2) 2/9/2013, 17:01 | |
| Alors, voilà le code de cet outil : - Code:
-
-- ©2010 TG for MacNOMODO users -- All rights reserved. -- Redistribution and use in source and binary forms, with or without -- modification, are permitted provided that the following conditions are met: -- -- Redistributions of source code must retain the above copyright -- notice, this list of conditions and the following disclaimer. -- Redistributions in binary form must reproduce the above copyright -- notice, this list of conditions and the following disclaimer in the -- documentation and/or other materials provided with the distribution. -- Neither the name of TG or MacNOMODO may be used to endorse or -- promote products derived from this software without specific prior -- written permission. -- -- THIS SOFTWARE IS PROVIDED BY TG AND MacNOMODO ``AS IS'' AND ANY -- EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED -- WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE -- DISCLAIMED. IN NO EVENT SHALL TG AND MacNOMODO BE LIABLE FOR ANY -- DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES -- (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; -- LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND -- ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -- (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -- SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
set strDialogTitle to "Tableau croisé" set strDataRange to "Plage de données à prendre en compte :" set strRangeError to " : la plage indiquée est invalide." set str1or2dimensions to "Combien de dimensions souhaitez-vous analyser ?" set strFirstDimension to "Colonne de la première dimension :" set strSecondDimension to "Colonne de la seconde dimension :" set strInvalidDimension to " : la colonne indiquée est invalide." set strOutOfRangeDimension to " : la colonne indiquée est hors plage." set strWhichFunction to "Quelle fonction de comptage voulez-vous utiliser ?" set strNB to "NB" set strSUM to "SOMME" set SUMIFS to "=SOMME.SIS(" set COUNTIFS to "=NB.SIS(" set INDEX1 to "=INDEX(" set INDEX2 to ";SI(ESTERREUR(EQUIV(" set INDEX3 to "EQUIV(" set SUM to "=SOMME(" set strDataColumn to "Colonne contenant les données à additionner :" set strTitleSize to "Combien y a-t-il de lignes de titre ?" set strResultDest to "Placer le résultat dans :" set strNewTable to "Nouvelle table" set strNewSheet to "Nouvelle feuille" set strNoSelection to "Sélectionnez une plage de cellules et recommencez..."
set A2 to missing value set B1 to missing value set B2 to missing value
tell application "Numbers" tell document 1 set noSelection to true repeat with s from 1 to the count of sheets tell sheet s repeat with t from 1 to the count of tables if the (count of cells) of the selection range of table t is not 0 then set noSelection to false tell table t --try if the (count of cells) of the selection range is 1 then set selectionRange to (a reference to the cell range) else set selectionRange to (a reference to the selection range) end if -- -- saisie de la plage de données -- set done to false set strInvalidAnswer to "" repeat until done set dataRangeName to display dialog strInvalidAnswer & strDataRange ¬ default answer (the name of selectionRange) as text ¬ with title strDialogTitle set dataRangeName to (text returned of dataRangeName) try set dataRangeFullName to name & "::" & dataRangeName get (range dataRangeFullName) set sourceRange to (a reference to range dataRangeFullName) set done to true on error set strInvalidAnswer to (dataRangeName & strRangeError & return & return) as text beep 2 end try end repeat if the (count of columns of sourceRange) is 1 then set dims to 1 set dim1 to name of column 1 of sourceRange set dim1N to address of column dim1 else set dims to (button returned of (display dialog str1or2dimensions buttons {"1", "2"} with title strDialogTitle)) as integer -- -- saisie de la première dimension -- set done to false set strInvalidAnswer to "" repeat until done set dim1 to display dialog strInvalidAnswer & strFirstDimension ¬ default answer first character of ((name of cell 1 of column 1 of sourceRange) as text) ¬ with title strDialogTitle & " (" & dataRangeFullName & ")" set dim1 to (text returned of dim1) try set dim1N to address of column dim1 if dim1N < (address of first column of sourceRange) or dim1N > (address of last column of sourceRange) then beep 2 set strInvalidAnswer to (dim1 & strOutOfRangeDimension & return & return) as text else set done to true end if on error set strInvalidAnswer to (dim1 & strInvalidDimension & return & return) as text beep 2 end try end repeat if dims = 2 then -- -- saisie de la seconde dimension -- set done to false set strInvalidAnswer to "" repeat until done set dim2 to display dialog strInvalidAnswer & strSecondDimension ¬ default answer first character of ((name of cell 1 of column 2 of sourceRange) as text) ¬ with title strDialogTitle & " (" & dataRangeFullName & ")" set dim2 to (text returned of dim2) try set dim2N to address of column dim2 if dim2N < (address of first column of sourceRange) or dim2N > (address of last column of sourceRange) then beep 2 set strInvalidAnswer to (dim2 & strOutOfRangeDimension & return & return) as text else set done to true end if on error set strInvalidAnswer to (dim2 & strInvalidDimension & return & return) as text beep 2 end try end repeat end if end if set dataC to missing value if the (count of columns of sourceRange) is not dims then if button returned of (display dialog strWhichFunction buttons {strNB, strSUM} with title strDialogTitle) is strSUM then -- -- saisie de la plage de données -- set done to false set strInvalidAnswer to "" repeat until done set dataC to display dialog strInvalidAnswer & strDataColumn ¬ default answer first character of ((name of cell 1 of column (dims + 1) of sourceRange) as text) ¬ with title strDialogTitle & " (" & dataRangeFullName & ")" set dataC to (text returned of dataC) try set dataN to address of column dataC if dataN < (address of first column of sourceRange) or dataN > (address of last column of sourceRange) then beep 2 set strInvalidAnswer to (dataC & strOutOfRangeDimension & return & return) as text else set done to true end if on error set strInvalidAnswer to (dataC & strInvalidDimension & return & return) as text beep 2 end try end repeat end if end if set headSize to (button returned of (display dialog strTitleSize buttons {"0", "1", "2"} with title strDialogTitle & " (" & dataRangeFullName & ")")) as integer set firstLine to (address of first row of sourceRange) + headSize set lastLine to address of last row of sourceRange set xDim1 to name & "::$" & dim1 & "$" & firstLine & ":$" & dim1 & "$" & lastLine if dataC is not missing value then set xData to name & "::$" & dataC & "$" & firstLine & ":$" & dataC & "$" & lastLine end if set A2 to INDEX1 & xDim1 & INDEX2 & "$A1+0,0001;" & xDim1 & ";-1));" & INDEX3 & "$A1&\" \";" & xDim1 & ";-1);" & INDEX3 & "$A1+0,0001;" & xDim1 & ";-1));1)" if dims is 1 then if dataC is missing value then set B2 to (COUNTIFS & xDim1 & ";$A2)") as text else set B2 to (SUMIFS & xData & ";" & xDim1 & ";$A2)") as text end if else set xDim2 to name & "::$" & dim2 & "$" & firstLine & ":$" & dim2 & "$" & lastLine set B1 to INDEX1 & xDim2 & INDEX2 & "A$1+0,0001;" & xDim2 & ";-1));" & INDEX3 & "A$1&\" \";" & xDim2 & ";-1);" & INDEX3 & "A$1+0,0001;" & xDim2 & ";-1));1)" if dataC is missing value then set B2 to (COUNTIFS & xDim1 & ";$A2;" & xDim2 & ";B$1)") as text else set B2 to (SUMIFS & xData & ";" & xDim1 & ";$A2;" & xDim2 & ";B$1)") as text end if end if --on error -- return "giving up" --end try end tell end if end repeat if A2 is not missing value then set dest to missing value if (button returned of (display dialog strResultDest buttons {strNewTable, strNewSheet} with title strDialogTitle)) as text is strNewTable then set dest to make new table end if end if end tell end repeat if A2 is not missing value then if dest is missing value then set dest to make new sheet set dest to (a reference to table 1 of dest) end if set masksheet to make new sheet repeat while the (count of rows of dest) > 2 delete last row of dest end repeat repeat while the (count of columns of dest) > 2 delete last column of dest end repeat set the value of cell "A2" of dest to A2 set the value of cell "B1" of dest to B1 set the value of cell "B2" of dest to B2 set done to false repeat until done add row below last row of dest if the value of last cell of column 1 of dest is 0 then set done to true end if end repeat set the value of last cell of column 1 of dest to "Total" set the value of last cell of column 2 of dest to SUM & name of cell 2 of column 2 of dest & ":" & name of cell ((count of cells of column 2 of dest) - 1) of column 2 of dest & ")" set done to false repeat until done add column after last column of dest if the value of last cell of row 1 of dest is 0 then set done to true end if end repeat set the value of last cell of row 1 of dest to "Total" repeat with r from 2 to (count of cells of column 2 of dest) set the value of last cell of row r of dest to SUM & name of cell 2 of row r of dest & ":" & name of cell ((count of cells of row r of dest) - 1) of row r of dest & ")" end repeat delete masksheet end if if noSelection then beep display alert strNoSelection as informational end if end tell end tell | |
| | | Doubleyou Légende vivante
Nombre de messages : 6324 Age : 54 Planète : de dingues Matos : un truc avec une pomme dessus et d'autres machins coûteux Date d'inscription : 19/11/2006
| Sujet: Re: Numbers : tableaux croisés dynamiques (2) 2/9/2013, 17:40 | |
| Merci TG ! Pour ceux qui se demandent : 1) vous faites un copié du code 2) vous ouvrez l'Editeur AppleScript 3) vous copiez le code dans l'Editeur AppleScript 4) vous l'enregistrez sous forme d'un script _______________ Art. 10. Nul ne doit être inquiété pour ses opinions, même religieuses, pourvu que leur manifestation ne trouble pas l'ordre public établi par la Loi. Art. 11. La libre communication des pensées et des opinions est un des droits les plus précieux de l'Homme : tout Citoyen peut donc parler, écrire, imprimer librement, sauf à répondre de l'abus de cette liberté dans les cas déterminés par la Loi. Art. 12. La garantie des droits de l'Homme et du Citoyen nécessite une force publique : cette force est donc instituée pour l'avantage de tous, et non pour l'utilité particulière de ceux auxquels elle est confiée.
| |
| | | Contenu sponsorisé
| Sujet: Re: Numbers : tableaux croisés dynamiques (2) | |
| |
| | | | Numbers : tableaux croisés dynamiques (2) | |
|
Sujets similaires | |
|
| Permission de ce forum: | Vous ne pouvez pas répondre aux sujets dans ce forum
| |
| |
| |