emacs/doc/translations/fr/misc/ses-fr.texi

1632 lines
59 KiB
Plaintext
Raw Permalink Blame History

This file contains invisible Unicode characters

This file contains invisible Unicode characters that are indistinguishable to humans but may be processed differently by a computer. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

\input texinfo @c -*- mode: texinfo; coding: utf-8; -*-
@c %**start of header
@setfilename ../../../../info/ses-fr.info
@documentlanguage fr
@documentencoding UTF-8
@settitle @acronym{SES}: Le tableur simple dEmacs
@include docstyle.texi
@setchapternewpage off
@syncodeindex fn cp
@syncodeindex vr cp
@syncodeindex ky cp
@c %**end of header
@copying
Ce fichier documente @acronym{SES} : le tableur simple dEmacs (Simple
Emacs Spreadsheet).
Copyright @copyright{} 2002--2024 Free Software Foundation, Inc.
@quotation
Permission is granted to copy, distribute and/or modify this document
under the terms of the GNU Free Documentation License, Version 1.3 or
any later version published by the Free Software Foundation; with no
Invariant Sections, with the Front-Cover Texts being ``A GNU Manual,''
and with the Back-Cover Texts as in (a) below. A copy of the license
is included in the section entitled ``GNU Free Documentation License.''
(a) The FSF's Back-Cover Text is: ``You have the freedom to copy and
modify this GNU manual.''
@end quotation
@end copying
@dircategory Emacs misc features
@direntry
* @acronym{SES}-fr: (ses-fr). Le tableur simple dEmacs.
@end direntry
@finalout
@titlepage
@title @acronym{SES}
@subtitle Le tableur simple dEmacs
@author Jonathan A. Yavner
@author @email{jyavner@@member.fsf.org}
@page
@vskip 0pt plus 1filll
@insertcopying
@end titlepage
@contents
@c ===================================================================
@ifnottex
@node Top
@comment node-name, next, previous, up
@top @acronym{SES}: Simple Emacs Spreadsheet
@display
@acronym{SES} est mode majeur de GNU Emacs pour éditer des fichiers
tableur, c.-à-d.@: des fichiers contenant une grille rectangulaire de
cellules. Les valeurs des cellules sont spécifiées par des formules
pouvant se référer aux valeurs dautres cellules.
@end display
@end ifnottex
Pour les rapports danomalie, utiliser @kbd{M-x report-emacs-bug}.
@insertcopying
@menu
* Boniment: Sales Pitch. Pourquoi utiliser @acronym{SES}?
* Tuto: Quick Tutorial. Une introduction sommaire
* Les bases: The Basics. Les commandes de base du tableur
* Fonctions avancées: Advanced Features. Vous voulez en savoir plus ?
* Pour les gourous: For Gurus. Vous voulez en savoir @emph{encore plus} ?
* Index: Index. Index des concepts, fonctions et variables
* Remerciements: Acknowledgments. Remerciements
* Licence GNU pour la documentation libre: GNU Free Documentation License. La licence de cette documentation.
@end menu
@c ===================================================================
@node Sales Pitch
@comment node-name, next, previous, up
@chapter Boniment
@cindex features
@itemize --
@item Créer et éditer des feuilles de calcul avec un minimum de tracas.
@item Prise en charge complète du Défaire/Refaire/Sauvegarde auto.
@item Protection contre les virus enfouis dans les feuilles de calcul.
@item Les formules de cellule sont directement du code Emacs Lisp.
@item Fonctions dimpression pour contrôler lapparence des cellules.
@item Raccourcis clavier intuitifs : C-o = insérer une ligne, M-o = insérer une colonne, etc.
@item « Débordement » des valeurs de cellule longues dans les cellules vides suivantes.
@item La ligne den-tête montre les lettres désignant les colonnes.
@item Autocomplétion pour la saisie des symboles de cellules nommées lors de la saisie des formules.
@item Couper, copier et coller peut transferer les formules et les fonctions dimpression.
@item Import and export de valeurs séparées par des tabulations, ou de formules séparées par des tabulations.
@item Format de fichier en texte, facile à bidouiller.
@end itemize
@c ===================================================================
@node Quick Tutorial
@chapter Tuto
@cindex introduction
@cindex tuto
Si vous désirez être rapidement lancé et pensez que vous savez ce que
vous attendez dun tableur simple, alors ce chapitre peut être tout ce
dont vous avez besoin.
Premièrement, visitez un nouveau fichier avec pour extension de nom de
fichier @file{.ses}. Emacs vous présente alors une feuille de calcul
vide contenant une seule cellule.
Commencez par saisir une ligne den-tête : @kbd{"Revenu@key{RET}}. Le
guillemet double @code{"} indique que vous saisissez une cellule
textuelle, il ne fait pas partie de la valeur de la cellule, et aucun
guillemet de fermeture nest nécessaire.
Pour insérer votre première valeur de revenu, vous devez dabord
redimensionner la feuille. Appuyer sur la touche @key{TAB} pour
ajouter une nouvelle cellule et revenez à elle en remontant.
Saisissez un nombre, tel que @samp{2.23}. Puis continuer pour ajouter
quelques valeurs supplémentaires de revenu, par ex. :
@example
@group
A
Revenu
2.23
0.02
15.76
-4.00
@end group
@end example
Pour additionner les valeurs entre elles, saisissez une expression
Lisp :
@example
(+ A2 A3 A4 A5)
@end example
Peut-être désirez vous ajouter une cellule à la droite de la cellule
@samp{A4} pour expliquer pourquoi vous avez une valeur négative. En
appuyant sur @kbd{TAB} dans cette cellule vous ajouter entièrement une
nouvelle colonne @samp{B} où vous pourrez ajouter une telle note.
La colonne est assez étroite par défaut, mais en appuyant sur @kbd{w}
vous pouvez la redimensionner selon vos besoins. Faites la de 22
caractères de large. Vous pouvez maintenant ajoutez des notes
descriptives pour chacune des cases, par ex.@: :
@example
@group
A B
Revenu
2.23 Frais de consultation
0.02 Opinion informée
15.76 Stand limonade
-4 Prêt à Joseph
14.01 Total
@end group
@end example
Par défaut, limpression des valeurs de cellule se fait alignée à
droite, cest la raison dun tel alignement pour les notes dans la
colonne @samp{B}. Pour changer cela, vous pouvez saisir une fonction
dimpression pour la colonne entière, en utilisant par ex. @kbd{M-p
("%s")}. Le fait que @code{"%s"} soit contenu dans une liste indique à
@acronym{SES} que lalignement est à faire à gauche. Vous pouvez
lemporter sur la fonction dimpression de colonne pour lune
quelconque de ses cellules en donnant une fonction dimpression par
cellule avec @kbd{p}.
Vous pouvez nommer une fonction dimpression, et utiliser le nom de la
fonction à la place de sa définition, de sorte à faciliter la
modification de limpression de toutes les cellules utilisant cette
fonction. Par exemple tapez @kbd{M-x
ses-define-local-printer@key{ret}}, puis @kbd{note@key{ret}}, puis
@kbd{("%s")} pour définir une fonction dimpression nommée @code{note}
dont la définition est @code{("%s")}, puis sur la colonne @samp{B} tapez
@kbd{M-p note@key{ret}}
@example
@group
A B
Revenu
2.23 Frais de consultation
0.02 Opinion informée
15.76 Stand limonade
-4 Prêt à Joseph
14.01 Total
@end group
@end example
Si maintenant vous redéfinissez @code{note} avec pour nouvelle
définition @kbd{("*%s")} qui ajoute un astérisque @code{*} devant le
texte, la zone dimpression est modifiée ainsi :
@example
@group
A B
Revenu
2.23 *Frais de consultation
0.02 *Opinion informée
15.76 *Stand limonade
-4 *Prêt à Joseph
14.01 *Total
@end group
@end example
Notez que la cellule @samp{B1} reste affichée vide et nest pas
affichée comme @samp{*}. Cest parce que la valeur de la cellule est
@code{nil}, et que les fonctions dimpression définies à partir dune
chaîne de formatage comme @code{"%s"} dans @code{("%s")} impriment
systématiquement @code{nil} comme une chaîne vide, et tentent
dimprimer toute valeur non-@code{nil} en utilisant la fonction
standarde @code{format} avec la chaîne de formatage, et si cela
échoue, utilisent la fonction de repli @code{ses-prin1} la place.
Si maintenant Joseph rembourse son prêt, vous pourriez effacer cette
case ; par ex.@: en positionnant le curseur sur la cellule A5 et en
appuyant sur @kbd{C-d}. Si vous faites celle le total imprimé dans la
cellule A6 affichera @samp{######}. La raison de cela est la valeur
dans une cellule vide est typiquement @code{nil} et que lopérateur
@code{+} ordinaire échoue à gérer une telle valeur. Au lieu de vider
la cellule, vous pourriez littéralement saisir @samp{0}, ou supprimer
entièrement la ligne en utilisant @kbd{C-k}. Une alternative est
dutiliser la fonction spéciale @code{ses+} au lieu du @code{+}
ordinaire :
@example
(ses+ A2 A3 A4 A5)
@end example
Pour rendre une formule robuste au changement de géométrie de la
feuille, vous pouvez utiliser la macro @code{ses-range} pour faire
référence à une plage de cellules par ses extrémités, par ex. :
@example
(apply 'ses+ (ses-range A2 A5))
@end example
(Le @code{apply} est nécessaire parce que @code{ses-range} produite
une @emph{liste} de valeurs, ce qui ouvre des possibilités plus
complexes).
Alternativement vous pouvez utiliser le modificateur @code{!} de
@code{ses-range} pour retirer les cellules vides de la liste renvoyée,
ce qui permet dutiliser @code{+} au lieu de @code{ses+}:
@lisp
(apply '+ (ses-range A2 A5 !))
@end lisp
@c ===================================================================
@node The Basics
@comment node-name, next, previous, up
@chapter Les bases
@cindex commandes de base
@cindex base, commandes de
@findex ses-jump
@findex ses-mark-row
@findex ses-mark-column
@findex ses-mark-whole-buffer
@findex set-mark-command
@findex keyboard-quit
Pour créer une nouveau tableur, visitez un fichier inexistant dont le
nom se termine en @file{.ses}. Par exemple, @kbd{C-x C-f essai.ses
@key{ret}}.
Un @dfn{identificateur de cellule} est un symbole avec une lettre de
colonne et un numéro de ligne. La cellule B7 est la 2e column de la
7e ligne. Pour les feuilles très larges, il ya deux lettres de
colonne : la cellule AB7 les la 28e colonne de la 7e ligne. Les
feuilles encore plus larges ont AAA1, etc. On se déplace avec les
commandes ordinaires de déplacement dEmacs.
@table @kbd
@item j
Déplace le point vers la cellule spécifiée par identificateur
(@code{ses-jump}). À moins que la cellule ne soit une cellule
renommée, lidentificateur est insensible à la casse. Un argument
préfixe @math{n} déplace vers la cellule de coordonnées @math{(n\div
R, n \% C)} pour une feuille de @math{R} ligne et @math{C} colonnes,
et @samp{A1} étant aux coordonnées @math{(0,0)}. La façon dont
lidentificateur ou largument préfixe de commande sont interprétés
peut être personnalisée via les variables
@code{ses-jump-cell-name-function} et @code{ses-jump-prefix-function}.
@end table
Le Point est toujours sur le bord de gauche dune cellule, ou à la fin
de ligne vide. Quand la marque est inactive, la cellule courante est
soulignée. Quand la marque est active, la plage est le rectangle de
cellules mis en vedette (@acronym{SES} utilise toujours le mode de
marque transitoire). Faire glisser la souris de @samp{A1} à @samp{A3}
crée la plage @samp{A1-A2}. Beaucoup de commandes @acronym{SES}
opèrent seulement sur une seule cellule, et non sur une plage.
@table @kbd
@item C-@key{SPC}
@itemx C-@@
Règle la marque au point (@code{set-mark-command}).
@item C-g
Désactive la marque (@code{keyboard-quit}).
@item M-h
Met en vedette la ligne courante (@code{ses-mark-row}).
@item S-M-h
Met en vedette la colonne courante (@code{ses-mark-column}).
@item C-x h
Mettre en vedette toutes les cellules (@code{mark-whole-buffer}).
@end table
@menu
* Formules: Formulas.
* Redimensionner: Resizing.
* Fonctions dimpression: Printer functions.
* Effacer des cellules: Clearing cells.
* Copier/couper/coller: Copy/cut/paste.
* Personnaliser @acronym{SES}: Customizing @acronym{SES}.
@end menu
@node Formulas
@section Formules de cellule
@cindex formules
@cindex formules, saisire
@cindex valeurs
@cindex valeurs de cellule
@cindex éditer des cellules
@findex ses-read-cell
@findex ses-read-symbole
@findex ses-edit-cell
@findex ses-recalculate-cell
@findex ses-recalculate-all
Pour insérer une valeur dans une cellule, tapez juste une expression
numérique, un @samp{"texte entre guillemets anglais"}, ou une
expression Lisp.
@table @kbd
@item 0..9
Auto-insérer un nombre (@code{ses-read-cell}).
@item -
Auto-insérer un nombre négatif (@code{ses-read-cell}).
@item .
Auto-insérer un nombre décimal (@code{ses-read-cell}).
@item "
Auto-insérer une chaîne de caractères. Le guillemet anglais de
terminaison est inséré automatiquement (@code{ses-read-cell}).
@item (
Auto-insérer une expression. La parenthèse de droite est insérée
automatiquement (@code{ses-read-cell}). Pour accéder à la valeur
dune autre cellule, il suffit dutiliser son identificateur dans
votre expression. Dès que lautre cellule change, la formule de cette
cellule-ci est réévaluée. En tapant lexpression, vous pouvez
utiliser les raccourcis clavier suivants :
@table @kbd
@item M-@key{TAB}
pour compléter les noms de symboles, et
@item C-h C-n
pour lister les symboles de cellules renommées dans un tampon daide.
@end table
@item ' @r{(apostrophe)}
Entrer un symbole (@code{ses-read-symbol}). @acronym{SES} se souvient
de tous les symboles qui ont été utilisés comme formules, de sorte que
vous pouvez taper juste le début dun symbole et utiliser
@kbd{@key{SPC}}, @kbd{@key{TAB}}, et @kbd{?} pour le compléter.
@end table
Pour saisire quelque-chose dautre (par ex., un vecteur), commencer
avec un chiffre, puis effacer le chiffre et tapez ce que vous désirez.
@table @kbd
@item @key{RET}
Édite la formule existante dans la cellule courante (@code{ses-edit-cell}).
@item C-c C-c
Force le recalcul de la cellule ou plage courante (@code{ses-recalculate-cell}).
@item C-c C-l
Recalcule la feuille entière (@code{ses-recalculate-all}).
@end table
@node Resizing
@section Redimensionner la feuille
@cindex redimensionner des feuilles
@cindex dimensions
@cindex ligne, ajout ou suppression
@cindex colonne, ajout ou suppression
@cindex ajouter des lignes ou colonnes
@cindex insérer des lignes ou colonnes
@cindex enlever des lignes ou colonnes
@cindex supprimer des lignes ou colonnes
@findex ses-insert-row
@findex ses-insert-column
@findex ses-delete-row
@findex ses-delete-column
@findex ses-set-column-width
@findex ses-forward-or-insert
@findex ses-append-row-jump-first-column
Commande de base :
@table @kbd
@item C-o
(@code{ses-insert-row})
@item M-o
(@code{ses-insert-column})
@item C-k
(@code{ses-delete-row})
@item M-k
(@code{ses-delete-column})
@item w
(@code{ses-set-column-width})
@item @key{TAB}
Déplace le point sur la prochaine cellule vers la droite, ou insère
une nouvelle colonne si on est déjà sur la dernière cellule de la
ligne, ou insère une nouvelle ligne si on est sur la ligne de
terminaison (@code{ses-forward-or-insert}).
@item C-j
Insère une nouvelle ligne sous la ligne courante et va à la colonne A
de cette ligne (@code{ses-append-row-jump-first-column}).
@end table
En redimensionnant la feuille (à moins que vous ne fassiez que changer
la largeur dune colonne) les références de cellule au sein des
formules sont toutes relocalisées de sorte à continuer à faire
référence aux mêmes cellules. Si une formule mentionne B1 et que vous
insérez une nouvelle première ligne, alors la formule mentionnera B2.
Si vous supprimez une cellule à laquelle une formule fait référence,
le symbole de cellule est supprimé de la formule, de sorte que
@code{(+ A1 B1 C1)} après suppression de la troisième colonne devient
@code{(+ A1 B1)}. Au cas où cela ne serait pas ce que vous désiriez :
@table @kbd
@item C-_
@itemx C-x u
Défait laction action précédente (@code{(undo)}).
@end table
@node Printer functions
@section Fonctions dimpression
@cindex fonctions dimpression
@cindex formatage de cellule
@cindex cellules, formater
Les fonctions dimpression convertissent des valeurs binaires de
cellule en formes dimpression quEmacs affiche à lécran.
@menu
* Différents types de fonctions dimpression: Various kinds of printer functions.
* Configurer quelle fonction dimpression sapplique: Configuring what printer function applies.
* Les fonctions dimpression standardes: Standard printer functions.
* Les fonctions dimpression locales: Local printer functions.
* Écrire une fonctions dimpression lambda: Writing a lambda printer function.
@end menu
@node Various kinds of printer functions
@subsection Différents types de fonctions dimpression
Lorsque on configure quelle fonction dimpression sapplique
(@pxref{Configuring what printer function applies}), on peut saisir
une fonction dimpression comme lune des possibilités suivantes :
@itemize
@item
Une chaîne de formatage, telle que @samp{"$%.2f"}. la chaîne formatée
résultante est alignée à droite au sein de la cellule
dimpression. Pour obtenir un alignement à gauche, utilisez des
parenthèses : @samp{("$%.2f")}.
@item
Une fonction dimpression peut aussi être une fonction à un argument
dont la valeur renvoyée est une chaîne (pour obtenir un alignement à
droite) ou une liste dune chaîne (pour obtenir un alignement à
gauche). Une telle fonction peut à son tour être configurée comme :
@itemize
@item
Une expression lambda, par exemple :
@lisp
(lambda (x)
(cond
((null x) "")
((numberp x) (format "%.2f" x))
(t (ses-center-span x ?# 'ses-prin1))))
@end lisp
Pendant la saisie dune lambda, vous pouvez utiliser @kbd{M-@key{TAB}}
pour completer les noms de symboles.
@item
Un symbole faisant référence à une fonction dimpression standarde
(@pxref{Standard printer functions}).
@item
Un symbole faisant référence à une fonction dimpression locale
(@pxref{Local printer functions}).
@end itemize
@end itemize
@node Configuring what printer function applies
@subsection Configurer quelle fonction dimpression sapplique
Chaque cellule a une fonction dimpression. Si cest @code{nil},
alors la fonction dimpression de la colonne de cette cellule est
utilisée. Et si cela est aussi @code{nil}, alors la fonction
dimpression par défaut de la feuille est utilisée.
@table @kbd
@item p
@findex ses-read-cell-printer
Saisit une fonction dimpression pour la cellule ou plage courante
(@code{ses-read-cell-printer}).
@item M-p
@findex ses-read-column-printer
Saisit une fonction dimpression pour la colonne courante (@code{ses-read-column-printer}).
@item C-c C-p
@findex ses-read-default-printer
Saisit la fonction dimpression par défaut de la feuille
(@code{ses-read-default-printer}).
@end table
Les commandes @code{ses-read-@var{xxx}-printer} permettent les commandes
suivantes pendant lédition:
@table @kbd
@item @key{arrow-up}
@itemx @key{arrow-down}
Pour parcourir lhistorique : les commandes
@code{ses-read-@var{xxx}-printer} ont leur propre historique de
mini-tampon, il est préchargé avec lensemble de toutes les fonctions
dimpression utilisées dans cette feuille, plus les fonctions
dimpression standardes (@pxref{Standard printer functions}) et les
fonctions dimpression locales (@pxref{Local printer functions}).
@item @key{TAB}
Pour compléter les symboles de fonctions dimpression locales, et
@item C-h C-p
Pour lister les fonctions dimpression locales dans un tampon daide.
@end table
@node Standard printer functions
@subsection Les fonctions dimpression standardes
Mise à part @code{ses-prin1}, les autres fonctions dimpression
standardes ne conviennent que pour les cellules, et non pour les
colonnes ou comme fonction dimpression par défaut de la feuille,
parce quelles formatent la valeur en utilisant la fonction
dimpression de colonne (ou par défaut si @code{nil}) et ensuite
post-traite le résultat, par ex.@: le centre :
@ftable @code
@item ses-center
Centre juste.
@item ses-center-span
Centrer en débordant sur les cellules vides suivantes.
@item ses-dashfill
Centrer en utilisant des tirets (@samp{-}) au lieu despaces.
@item ses-dashfill-span
Centrer avec tirets et débordement.
@item ses-tildefill-span
Centrer avec tildes (@samp{~}) et débordement.
@item ses-prin1
Cest la fonction dimpression de repli, utilisée quand lappel à la
fonction dimpression configurée envoie une erreur.
@end ftable
@node Local printer functions
@subsection Les fonctions dimpression locales
@findex ses-define-local-printer
Vous pouvez définir une fonction dimpression locale à la feuille avec
la commande @code{ses-define-local-printer}. Par exemple, définissez
une fonction dimpression @samp{toto} à @code{"%.2f"}, et ensuite
utilisez le symbole @samp{toto} comme fonction dimpression. Ensuite,
si vous rappelez @code{ses-define-local-printer} sur @samp{toto} pour
le redéfinir comme @code{"%.3f"}, alors toutes les cellules utilisant
la fonction dimpression @samp{toto} seront re-imprimées conformément.
Il peut arriver que vous désiriez définir ou redéfinir certaines
fonctions dimpression à chaque fois que vous ouvrez une feuille. Par
exemple, imaginez que vous désiriez définir/re-définir automatiquement
une fonction dimpression locale @code{euro} pour afficher un nombre
comme une somme en euros, par exemple le nombre @code{3.1} serait
affiché comme @code{3.10@dmn{}@euro{}}. Pour faire cela dans tout
tampon SES qui nest pas en lecture seule, vous pouvez ajouter ce
genre de code à votre fichier dinit @file{.emacs} :
@lisp
(defun my-ses-mode-hook ()
(unless buffer-read-only
(ses-define-local-printer
'euro
(lambda (x)
(cond
((null x) "")
((numberp x) (format "%.2f€" x))
(t (ses-center-span x ?# 'ses-prin1)))))))
(add-hook 'ses-mode-hook 'my-ses-mode-hook)
@end lisp
Si vous remplacez la commande @code{ses-define-local-printer} par la
fonction @code{ses-define-if-new-local-printer}
@findex ses-define-if-new-local-printer
la définition ne se produira que si aucune fonction dimpression de
même nom nest déjà définie.
@node Writing a lambda printer function
@subsection Écrire une fonctions dimpression lambda
Vous pouvez écrire une fonction dimpression avec une expression
lambda prenant un seul argument en deux cas :
@itemize
@item
quand vous configurez la fonction dimpression sappliquant à
une cellule ou colonne, ou
@item
quand vous définissez une fonction dimpression avec la commande
@code{ses-define-local-printer}.
@end itemize
En faisant cela, prenez garde à ce que la valeur renvoyée soit une
chaîne, ou une liste contenant une chaîne, même quand largument
dentrée a une valeur inattendue. Voici un exemple :
@example
(lambda (val)
(cond
((null val) "")
((and (numberp val) (>= val 0)) (format "%.1f" val))
(t (ses-center-span val ?# 'ses-prin1))))
@end example
Cet exemple fait ceci :
@itemize
@item
Quand la cellule est vide (c.-à-d.@: quand @code{val} est @code{nil}),
imprime une chaîne vide @code{""}
@item
Quand la valeur de cellule est un nombre positif ou nul, formate la
valeur en notation à virgule fixe avec une decimale après la virgule
@item
Sinon, gère la valeur comme erronnée en limprimant comme une
s-expression (avec @code{ses-prin1}), centrée et entourée de
croisillons @code{#} de bourrage.
@end itemize
Une autre précaution à prendre est déviter un débordement de pile à
cause dune fonction dimpression se rappelant elle-même sans
fin. Cette erreur peut se produire quand vous utilisez une fonction
dimpression locale comme fonction dimpression de colonne, et que
cette fonction dimpression locale appelle implicitement la fonction
dimpression de colonne courante, ainsi elle se rappelle elle-même
récursivement. Imaginez par exemple que vous désirez créer une
fonction dimpression locale @code{=bourre} qui centre le contenu
imprimé dune cellule et lentoure de signes égal @code{=}, et que
vous le faites (erronnément) comme cela :
@lisp
;; CODE ERRONÉ
(lambda (x)
(cond
((null x) "")
(t (ses-center x 0 ?=))))
@end lisp
Comme @code{=bourre} utilise la fonction dimpression standarde
@code{ses-center} mais sans lui passer exemplicitement une fonction
dimpression, @code{ses-center} appelle la fonction dimpression de
colonne courante sil y en a une, ou la fonction dimpression par
défaut de la feuille sinon. Aussi, utiliser @code{=bourre} comme
fonction dimpression de colonne aura pour résultat de causer un
débordement de pile dans cette colonne sur toute cellule non vide,
puisque @code{ses-center} rappelle récursivement la fonction qui l'a
appelé. @acronym{SES} ne vérifie pas cela ; il vous faut donc faire
attention. Par exemple, reécrivez @code{=bourre} ainsi :
@lisp
(lambda (x)
(cond
((null x) "")
((stringp x) (ses-center x 0 ?= " %s "))
(t (ses-center-span x ?# 'ses-prin1))))
@end lisp
Le code ci-dessus est réparé au sens où @code{ses-center} et
@code{ses-center-span} sont toutes deux appelées avec un dernier
argument @var{printer} explicite spécifiant la fonction d'impression,
respectivement @code{" %s "} et @code{'ses-prin1}.
Le code ci-dessus applique le bourrage de @code{=} seulement aux
chaînes ; et aussi il entoure la chaîne par un espace de chaque côté
avant de bourrer avec des signes @code{=}. Ainsi la chaîne @samp{Ula}
saffichera comme @samp{@w{=== Ula ===}} dans une colonne large de 11
caractères. Toute valeur qui nest ni @code{nil} (c.-à-d.@: une
cellule vide) ni une chaîne est affichée comme une erreur par lusage
de bourrage par des croisillons @code{#}.
@node Clearing cells
@section Effacer des cellules
@cindex effacer, commandes
@findex ses-clear-cell-backward
@findex ses-clear-cell-forward
Ces commandes règlent à la fois la formule et la fonction dimpression
à @code{nil} :
@table @kbd
@item @key{DEL}
Se deplace à gauche et efface la cellule (@code{ses-clear-cell-backward}).
@item C-d
Efface la cellule et se déplace à droite (@code{ses-clear-cell-forward}).
@end table
@node Copy/cut/paste
@section Copier, couper, et coller
@cindex copier
@cindex couper
@cindex coller
@findex kill-ring-save
@findex mouse-set-region
@findex mouse-set-secondary
@findex ses-kill-override
@findex yank
@findex clipboard-yank
@findex mouse-yank-at-click
@findex mouse-yank-at-secondary
@findex ses-yank-pop
Les fonctions de copie opèrent sur des regions rectangulaires de
cellules. Vous pouvez coller les copies dans des tampons
non-@acronym{SES} pour exporter le texte dimpression.
@table @kbd
@item M-w
@itemx [copy]
@itemx [C-insert]
Copie les cellules en vedette vers lanneau presse-papier et le
presse-papier primaire (@code{kill-ring-save}).
@item [drag-mouse-1]
Marque une region et la copie vers lanneau presse-papier et le
presse-papier primaire (@code{mouse-set-region}).
@item [M-drag-mouse-1]
Marque une region et la copie vers lanneau presse-papier et le
presse-papier secondaire (@code{mouse-set-secondary}).
@item C-w
@itemx [cut]
@itemx [S-delete]
Les fonctions couper ne suppriment pas en fait de lignes ou de
colonnes --- elles les copient et puis les effacent
(@code{ses-kill-override}).
@item C-y
@itemx [S-insert]
Colle à partir de lanneau presse-papier (@code{yank}). Les fonctions
coller se comportent différemment selon le format du texte quelles
insèrent :
@itemize @bullet
@item
Quand on colle des cellules qui ont été coupées ou copiées à partir
dun tampon @acronym{SES}, le texte dimpression est ignoré et
seulement la formule et fonction dimpression jointes sont insérées ;
les références de cellule de la formule sont relocalisées à moins que
vous nutilisiez @kbd{C-u}.
@item
Le texte collé écrase un rectangle de cellules dont le coin haut
gauche est la cellule courante. Si une partie du rectangle est
au-délà des bords de la feuille, vous devez confirmer laugmentation
de la taille de la feuille.
@item
Du texte Non-@acronym{SES} est dordinaire inséré comme formule de
remplacement pour la cellule courante. Si la formule serait un
symbole, elle est traitée comme une chaîne à moins que vous
nutilisiez @kbd{C-u}. Les formules collées comprenant des erreurs de
syntaxe sont toujours traitées comme des chaînes.
@end itemize
@item [paste]
Colle à partir du presse-papier primaire ou de lanneau presse-papier
(@code{clipboard-yank}).
@item [mouse-2]
Règle le point et colle à partir du presse-papier primaire
(@code{mouse-yank-at-click}).
@item [M-mouse-2]
Règle le point et colle à partir du presse-papier secondaire
(@code{mouse-yank-secondary}).
@item M-y
Immédiatement après un coller, vous pouvez remplacer le texte avec un
élément précédent à partir de lanneau presse-papier
(@code{ses-yank-pop}). Contrairement au yank-pop standard dEmacs, la
version de @acronym{SES} utilise @code{undo} pour supprimer lancien
collage. Est-ce que cela ne fait aucune différence ?
@end table
@node Customizing @acronym{SES}
@section Personnaliser @acronym{SES}
@cindex personnaliser
@vindex enable-local-eval
Par défaut, une feuille venant dêtre créée a 1 ligne et 1 colonne.
La largeur de colonne est 7 et la fonction dimpression par défaut est
@samp{"%.7g"}. Chacune de ces choses peut être personnalisée. Allez
voir dans le groupe « ses ».
Après avoir saisi une valeur de cellule, normalement
@code{forward-char} est appelé, ce qui déplace le point vers la
cellule suivante à droite, ou à la première cellule à gauche de la
ligne suivante si la cellule courante est la plus à droite de la
feuille. Vous pouvez personnaliser @code{ses-after-entry-functions}
pour que le déplacement soit vers la gauche ou le haut ou le bas.
Pour un mouvement diagonal, selectionnez deux fonctions de la liste.
@vindex ses-jump-cell-name-function
@code{ses-jump-cell-name-function} est une variable personnalisable
réglée par défaut à la fonction @code{upcase}. Cette fonction est
appelée quand vous passez un nom de cellule à la commande
@command{ses-jump} (@kbd{j}), et que ce nom nest pas le nom dune
cellule renommée. Elle change le nom de cellule saisi en celui de la
cellule vers laquelle sauter. Le réglage par défaut @code{upcase} vous
permet de saisir le nom de cellule en bas de casse. Un autre usage de
@code{ses-jump-cell-name-function} pourrait être une
internationalisation pour convertir des caractères non latins en
équivalents latins pour nommer la cellule. Au lieu dun nom de
cellule, la fonction peut renvoyer des coordonnées de cellule sous la
forme dun cons, par exemple @code{(0 . 0)} pour la cellule @code{A1},
@code{(1 . 0)} pour la cellule @code{A2}, etc.
@vindex ses-jump-prefix-function
@code{ses-jump-prefix-function} est une variable personnalisable
réglée par défaut à la fonction @code{ses-jump-prefix}. Cette fonction
est appelée quand vous donnez un argument préfixe à la commande
@command{ses-jump} (@kbd{j}). Elle renvoie un nom de cellule ou des
coordonnées de cellule correspondant à largument préfixe. Les
coordonnées de cellule sont sous la forme dun cons, par exemple
@code{(1 . 0)} pour la cellule @code{A2}. Le réglage par défaut
@code{ses-jump-prefix} numérote les cellules de gauche à droite et
puis de haut en bas, de sorte que si on suppose une feuille 4×3,
largument préfixe @samp{0} saute à la cellule @samp{A1}, largument
préfixe @samp{2} saute à @samp{C1}, largument préfixe @samp{3} saute
à @samp{A2}, etc.
@vindex ses-mode-hook
@code{ses-mode-hook} est un crochet de mode normal (une liste de
fonctions qui sexécutent quand le mode @acronym{SES} démarre sur un
tampon).
@vindex safe-functions
La variable @code{safe-functions} est une liste de fonctions
potentiellement risquées à traiter comme si elles étaient sûres lors
de lanalyse des formules et fonctions dimpression. @xref{Virus
protection}. Avant de personnaliser @code{safe-functions},
réfléchissez à quel point vous faites confiance à la personne qui vous
suggère cette modification. La valeur @code{t} désactive toute
protection anti-virus. Une valeur donnant une liste-de-fonctions peut
rendre une feuille « trop bien », mais elle crée aussi des portes
dérobées dans votre armure anti-virus. Pour que votre protection
contre les virus fonctionne, vous devez toujours appuyer sur @kbd{n}
quand un avertissement contre un virus vous est présenté, à moins que
vous compreniez ce que le code en question essaie de faire. Nécoutez
pas ceux qui vous racontent de personnaliser @code{enable-local-eval}
--- cette variable est pour les gens qui ne portent pas de ceinture de
sécurité !
@c ===================================================================
@node Advanced Features
@chapter Fonctions avancées
@cindex avancées, fonctions
@findex ses-read-header-row
@table @kbd
@item C-c M-C-h
(@code{ses-set-header-row}).
@findex ses-set-header-row
@kindex C-c M-C-h
La ligne den-tête au sommet de la fenêtre @acronym{SES} affiche
normalement la ligne de colonne pour chaque colonne. Vous pouvez la
régler pour afficher une copie de lune des lignes, tell que quune
ligne de titres de colonnes, ainsi cette ligne sera toujours visible.
Par défaut la commande règle la ligne courante comme en-tête ;
utiliser C-u pour une invite à désigner la ligne den-têre. Régler la
ligne den-tête à la ligne 0 pour afficher les lettres de colonne de
nouveau.
@item [header-line mouse-3]
Affiche un menu pour régler la ligne courante comme en-tête, ou
revenir à des lettres de colonne.
@item M-x ses-rename-cell
@findex ses-rename-cell
Renomme une cellule pour passer d'un nom standard du genre de A1 à
toute chaîne pouvant être un nom valide pour une variable locale (Voir
aussi @ref{Nonrelocatable references}).
@item M-x ses-repair-cell-reference-all
@findex ses-repair-cell-reference-all
Quand vous interrompez la mise à jour dune formule de cellule en
tapant @kbd{C-g}, alors cela peut casser le lien de référence de
cellule, ce qui compromet la mise à jour automatique de cellule quand
toute autre cellule dont elle dépend est modifiée. Pour réparer cela,
utilisez la fonction @code{ses-repair-cell-reference-all}
@end table
@menu
* La zone dimpression: The print area.
* Plages dans les formules: Ranges in formulas.
* Trier par colonne: Sorting by column.
* Fonctions de formule standardes: Standard formula functions.
* Plus sur limpression de cellule: More on cell printing.
* Import et export: Import and export.
* Protection contre les virus: Virus protection.
* Feuilles avec détails et synthèse: Spreadsheets with details and summary.
@end menu
@node The print area
@section La zone dimpression
@cindex zone dimpression
@cindex impression, zone d
@findex widen
@findex ses-renarrow-buffer
@findex ses-reprint-all
Un fichier @acronym{SES} consiste en une zone dimpression et une zone
de données. Normalement le tampon est réduit de sorte à nafficher
que la zone dimpression. La zone dimpression est en lecture seule,
hormis pour les commandes spéciales de @acronym{SES} ; elle contient
les valeurs de cellule formatées par les fonctions dimpression. La
zone de données enregistre les formules, fonctions dimpression, etc.
@table @kbd
@item C-x n w
Affiche à la fois les zones dimpression et de données (@code{widen}).
@item C-c C-n
Affiche seulement la zone dimpression (@code{ses-renarrow-buffer}).
@item S-C-l
@itemx M-C-l
Recrée la zone dimpression en réévaluant pour toutes les cellules sa
fonction dimpression (@code{ses-reprint-all}).
@end table
@node Ranges in formulas
@section Plages dans les formules
@cindex plages
@findex ses-insert-plage-click
@findex ses-insert-plage
@findex ses-insert-ses-plage-click
@findex ses-insert-ses-plage
@vindex de
@vindex à
Une formule du genre de :
@lisp
(+ A1 A2 A3)
@end lisp
est la somme de trois cellules spécifiques. Si vous insérez une
nouvelle deuxième ligne, la formule devient
@lisp
(+ A1 A3 A4)
@end lisp
et la nouvelle ligne nest pas incluse dans la somme.
La macro @code{(ses-range @var{de} @var{à})} sévalue en une liste des
valeurs dans un rectangle de cellules. Si votre formule est
@lisp
(apply '+ (ses-range A1 A3))
@end lisp
et que vous insérez une nouvelle deuxième ligne, elle devient
@lisp
(apply '+ (ses-range A1 A4))
@end lisp
et la nouvelle ligne est incluse dans la somme.
Alors que vous saisissez ou éditez une formule dans le minitampon,
vous pouvez sélectionner une plage dans la feuille (en utilisant la
souris ou le clavier), et injecter une représentation de cette plage
dans votre formule. Supposez que vous sélectionnez @samp{A1-C1} :
@table @kbd
@item [S-mouse-3]
Insère @samp{A1 B1 C1} (@code{ses-insert-range-click})
@item C-c C-r
Version clavier (@code{ses-insert-range}).
@item [C-S-mouse-3]
Insère @samp{(ses-range A1 C1)} (@code{ses-insert-ses-range-click}).
@item C-c C-s
Version clavier (@code{ses-insert-ses-range}).
@end table
Si vous supprimez la cellule @var{de} ou @var{à} dune plage, la
cellule la plus proche toujours existante est utilisée à la place. Si
vous supprimez lentière plage, le relocalisateur de formule supprime
le @samp{ses-range} de la formule.
Si vous insérez une nouvelle ligne juste au delà de la fin dune plage
à une colonne, ou une nouvelle colonne juste au delà dune plage à une
ligne, la nouvelle cellule est incluse dans la plage. Les nouvelles
cellules insérées juste avant une plage ne sont pas incluses.
Des fanions peuvent être ajoutés à @code{ses-range} immédiatement
après la cellule @var{à} .
@table @code
@item !
Les cellules vides de la plage peuvent être enlevées en ajoutant le
fanion @code{!}. Une cellule vide est une cellule dont la valeur est
lun des symboles @code{nil} ou @code{*skip*}. Par exemple
@code{(ses-range A1 A4 !)} fait la même chose que @code{(list A1 A3)}
quand les cellules @code{A2} et @code{A4} sont vides.
@item _
Les valeurs de cellules vides sont remplacées par largument suivant
le fanion @code{_}, ou @code{0} quand le fanion @code{_} est le
dernier dans la liste darguments. Par exemple @code{(ses-range A1 A4
_ "vide")} fera la même chose que @code{(list A1 "vide" A3 "vide")}
quand les cellules @code{A2} et @code{A4} sont vides. Similairement,
@code{(ses-range A1 A4 _ )} fera la même chose que @code{(list A1 0 A3
0)}.
@item >v
Quand lordre a de limportance, liste les cellules en lisant les
cellules ligne par ligne de la cellule en haut à gauche vers la
cellule en bas à droite. Ce fanion est fourni pour être complet car
cest déjà lordre par défaut.
@item <v
Liste les cellules en lisant les cellules ligne par ligne de la
cellule en haut à droite vers la cellule en bas à gauche.
@item v>
Liste les cellules en lisant les cellules colonne par colonne de la
cellule en haut à gauche vers la cellule en bas à droite.
@item v<
Liste les cellules en lisant les cellules colonne par colonne de la
cellule en haut à droite vers la cellule en bas à gauche.
@item v
Un raccourci pour @code{v>}.
@item ^
Un raccourci pour @code{^>}.
@item >
Un raccourci pour @code{>v}.
@item <
Un raccourci pour @code{>^}.
@item *
Au lieu de lister les cellules, en fait un vecteur ou une matrice Calc
(@pxref{Top,,,calc,GNU Emacs Calc Manual}). Si la plage contient
seulement une ligne ou une colonne un vecteur est fait, sinon une
matrice est faite.
@item *2
Idem que @code{*} à ceci près quune matrice est toujours faite même
quand il y a une seule ligne ou colonne dans la plage.
@item *1
Idem que @code{*} à ceci près quun vecteur est toujours fait même
quand il ny a quune ligne ou colonne dans la plage, c.-à-d.@: que la
matrice correspondante est aplatie.
@end table
@node Sorting by column
@section Trier par colonne
@cindex trier
@findex ses-sort-column
@findex ses-sort-column-click
@table @kbd
@item C-c M-C-s
Trie les cellules dune plage en utilisant lune des colonnes
(@code{ses-sort-column}). Les lignes (ou lignes partielles si la
plage ninclut pas toutes les colonnes) sont réarrangées de sorte que
la colonne choisie soit ordonnée.
@item [header-line mouse-2]
La façon la plus facile de trier est de cliquer sur mouse-2 sur la
ligne den-tête de colonne (@code{ses-sort-column-click}).
@end table
La comparaison du tri utilise @code{string<}, ce qui fonctionne bien
pour des nombres alignés à droite ou des chaînes alignées à gauche.
Avec un argument préfixe, trie dans lordre descendant.
Les lignes sont déplacées une à la fois, avec relocalisation des
formules. Ceci fonctionne bien si les formules font référence à
dautres cellules dans leur ligne, mais non pas si bien pour des
formules qui font référence à dautres lignes dans la plage ou à des
cellules hors de la plage.
@node Standard formula functions
@section Fonctions de formule standardes
@cindex fonctions standardes de formule
@cindex *skip*
@cindex *error*
@findex ses-delete-blanks
@findex ses-average
@findex ses+
Souvent on désire quun calcul exclue les cellules vides. Voici
quelques fonctions utiles à appeler dans vos formules :
@table @code
@item (ses-delete-blanks &rest @var{args})
Renvoie une liste dont toutes les cellules vides (dont la valeur est
soit @code{nil} ou @code{'*skip*}) ont été supprimées. Lordre des
arguments est inversé. Prière de noter que @code{ses-range} a un
modificateur @code{!} qui permet de supprimer les cellules vides,
ainsi il est possible décrire :
@lisp
(ses-range A1 A5 !)
@end lisp
au lieu de
@lisp
(apply 'ses-delete-blanks (ses-range A1 A5 <))
@end lisp
@item (ses+ &rest @var{args})
Somme des arguments non vides pris en ordre inverse.
@item (ses-average @var{liste})
Moyenne des éléments non vides de @var{liste}. Ici la liste est
passée comme un seul argument, vu que typiquement on la forme avec
@code{ses-range}.
@end table
@node More on cell printing
@section Plus sur limpression de cellule
@cindex cellule, plus sur l'impression
@cindex impression de cellule
@findex ses-truncate-cell
@findex ses-recalculate-cell
Valeurs spéciales de cellule :
@itemize
@item nil
simprime typiquement de la même façon que "", mais permet que la
cellule précédente déborde dessus.
@item '*skip*
remplace nil quand la cellule précédente déborde effectivement ; rien
nest donc imprimée pour cette cellule.
@item '*error*
indique que la formule a signalé une erreur au lieu de produire une
valeur : la cellule imprimée est remplie de croisillons (#).
@end itemize
Lorsque la fonction dimpression est définie par une chaîne de
formatage, par ex. @samp{"%.3f"}, @acronym{SES} imprime
automatiquement @code{nil} comme une chaîne vide, mais si la fonction
dimpression est définie par une expression lambda, vous devez définir
explicitement comment @code{nil} est traité, par ex. :
@example
(lambda (x)
(cond
((null x) "")
((stringp x) (list x))
((numberp x) (format "%.3f" x))
(t (ses-prin1 x)))
@end example
imprime @code{nil} comme une chaîne vide, aligne à gauche la valeur si
cest une chaîne, et si cest un nombre laligne à droite en
limprimant avec trois décimales.
Il nest pas nécessaire par contre que vous vous souciez de
@code{'*skip*} dans la définition dune fonction dimpression, en
effet aucune fonction dimpression nest appelée sur @code{'*skip*}.
Si le résultat de la fonction dimpression est trop large pour la
cellule et que la cellule suivante est @code{nil}, le résultat
débordera sur la cellule suivante. Les résultats très larges peuvent
déborder sur plusieurs cellules. Si le résultat est trop large pour
lespace disponible (jusqu'à la fin de la ligne ou la prochaine
cellule non-@code{nil}), le résultat est tronqué si la valeur de
cellule est une chaîne, ou remplacé par des croisillons (@samp{#})
sinon.
@acronym{SES} pourrait être perturbé par des résultats de fonction
d'impression contenant des sauts de ligne ou des tabulations, aussi
ces caractères sont remplacés par des points d'interrogation.
@table @kbd
@item t
Confine une cellule à sa propre colonne (@code{ses-truncate-cell}).
Ceci vous permet de déplacer le point sur la cellule de droite qui
sinon serait couverte par un débordement. Si vous ne modifiez pas la
cellule de droite, la cellule confinée débordera de nouveau la
prochaine fois quelle sera imprimée.
@item c
Appliquée à une seule cellule, cette commande affiche dans la zone
décho toute erreur de formule ou erreur dimpression survenue pendant
le recalcul/la réimpression (@code{ses-recalculate-cell}). Vous
pouvez utiliser cela pour défaire leffet de @kbd{t}.
@end table
Quand une fonction dimpression signale une erreur, la fonction
dimpression de repli
@findex ses-prin1
@code{ses-prin1} lui est substituée. Ceci est utile quand votre
fonction dimpression de colonne est seulement numérique et que vous
utilisez une chaîne comme valeur de cellule. Notez que la fonction
dimpression par défaut standarde est @samp{"%.7g"} qui est numérique
seulement, ainsi les cellules auxquelles la fonction dimpression par
défaut standarde sapplique et qui ne sont pas vides et ne contiennent
pas un nombre utilisent la fonction dimpression de repli
@code{ses-prin1}, par ex.@: les cellules qui contiennent une chaîne
font cela. @kbd{c} sur de telles cellules affiche « Format specifier
doesn't match argument type ».
@node Import and export
@section Import et export
@cindex import et export
@cindex export, et import
@findex ses-export-tsv
@findex ses-export-tsf
@table @kbd
@item x t
Exporte une plage de cellules comme des valeurs séparées par des
tabulations (@code{ses-export-tsv}).
@item x T
Exporte une plage de cellules comme des formules séparées par des
tabulations (@code{ses-export-tsf}).
@end table
Le texte exporté va dans lanneau presse-papier ; vous pouvez le
coller dans un autre tampon. Les colonnes sont séparées par des
tabulations, les lignes par des sauts de lignes.
Pour importer du texte, utilisez nimporte laquelle des commandes
coller où le texte à coller contient des tabulations et/ou des sauts de
lignes. Les formules importées ne sont pas relocalisées.
@node Virus protection
@section Protection contre les virus
@cindex virus protection
À chaque fois une formule ou fonction dimpression est lue dun
fichier ou est collée dans la feuille, elle est marquée comme
« nécessitant une vérification de sécurité ». Plus tard, quand la
formule ou la fonction dimpression est évaluée pour la première fois,
elle est vérifiée comme sûre en utilisant le prédicat @code{unsafep} ;
si elle savère « potentiellement risquée », la formule ou fonction
dimpression en question est affichée et vous devez appuyer @kbd{Y}
pour lapprouver ou @kbd{N} pour utiliser un substitut. Le substitut
signale toujours une erreur.
Les formules ou fonctions dimpression que vous tapez sont
immédiatement vérifiées quant à leur sûreté. Si elles savèrent
potentiellement risquées et que vous appuyez @kbd{N} pour refuser,
laction est annulée et lancienne formule ou fonction dimpression
demeure.
En plus des virus (qui tentent de se recopier dans dautres
fichiers), @code{unsafep} peut aussi détecter toutes sortes de chevaux
de Troie, tels que des feuilles de calcul qui effacent les fichiers,
envoient des courriels, inondent des sites Web, corrompent vos
réglages dEmacs, etc.
Généralement, les formules et fonctions dimpression de feuilles sont
des choses simples qui nont pas besoin de faire des traitements
exotiques, aussi toute partie potentiellement dangereuse de
lenvironnement Emacs Lisp peut être exclus sans entraver votre style
comme écrivain de formule. Lisez la documentation dans
@file{unsafep.el} pour plus dinformation sur la façon dont les formes
Lisp sont classifiées comme sûres ou risquées.
@node Spreadsheets with details and summary
@section Feuilles avec détails et synthèse
@cindex détails et synthèse
@cindex synthèses, et détails
Une organisation usuelle pour une feuille de calcul est davoir un tas
de lignes de « détail », chacune décrivant possiblement une
transaction, et ensuite un ensemble de lignes de « synthèse » qui
affichent chacune des données condensées pour un certain sous-ensemble
des détails. @acronym{SES} prend en charge ce type dorganisation via
la fonction @code{ses-select}.
@table @code
@item (ses-select @var{de-plage} @var{test} @var{à-plage})
Renvoie un sous-ensemble de @var{à-plage}. Pour chaque membre dans
@var{de-plage} qui est égal à @var{test}, le membre correspondant de
@var{à-plage} est inclus dans le résultat.
@end table
Exemple dutilisation :
@lisp
(ses-average (ses-select (ses-range A1 A5) 'Bidochon (ses-range B1 B5)))
@end lisp
Ceci calcule la moyenne des valeurs de la colonne @samp{B} pour les
lignes dont la valeur dans la colonne @samp{A} est le symbole
@samp{'Bidochon}.
Vous vous demandez peut-être pourquoi les arguments de
@code{ses-select} ne consistent pas au lieu de @var{à-plage} de
décalages @var{décalage-à-la-ligne} et @var{décalage-à-la-colonne}
relativement à @var{de-plage} : spécifier @var{à-plage} explicitement
assure que la formule est recalculée si lune quelconque des cellules
de cette plage est modifiée.
Le fichier @file{etc/ses-example.el} dans la distribution Emacs est un
exemple dune feuille organisée en détails-et-synthèse.
@c ===================================================================
@node For Gurus
@chapter Pour les gourous
@cindex avancées, fonctions
@cindex fonctions avancées
@menu
* Mises à jour différées: Deferred updates.
* Références non-relocalisables: Nonrelocatable references.
* La zone données: The data area.
* Variables locales-tampon dans les feuilles: Buffer-local variables in spreadsheets.
* Utilisation de advice-add dans @acronym{SES}: Uses of advice-add in @acronym{SES}.
@end menu
@node Deferred updates
@section Mises à jour différées
@cindex différées, mises à jour
@cindex mises à jour différées
@vindex run-with-idle-timer
Pour épargner du temps de calcul redondant, les cellules dont le
recalcul est rendu nécessaire par des changements dans dautres
cellules sont ajoutées à un ensemble. À la fin de la commande, chaque
cellule de cet ensemble est recalculée une fois. Ceci peut créer un
nouvel ensemble de cellules nécessitant un recalcul. Ce processus est
répété jusqu'à ce que lensemble soit vide ou que des références
circulaires soient détectées. Dans les cas extrêmes, et notamment si
une référence circulaire est en cours de détection, vous pourriez voir
des messages de progression de la forme « Recalculating... (@var{nnn}
cells left) ». Si vous interrompez le calcul avec @kbd{C-g}, la
feuille demeurera dans un état incohérent, utilisez alors @kbd{C-_} ou
@kbd{C-c C-l} pour réparer cela.
Pour épargner encore plus de temps en évitant les écritures
redondantes, les cellules qui sont modifiées sont ajoutées à un
ensemble au lieu dêtre immédiatement écrites dans la zone de
données. Chaque cellule de cet ensemble est écrite une fois à la fin
de la commande. Si vous modifiez un grand nombre de cellules, vous
pourriez voir un message de progression de la forme
« Writing... (@var{nnn} cells left) ». Ces écritures différées de
cellules ne peuvent pas être interrompues par @kbd{C-g}, alors il vous
faudra juste attendre.
@acronym{SES} utilise @code{run-with-idle-timer} pour déplacer le
souligné de cellule quand Emacs fait défiler le tampon à la fin dune
commande, et aussi pour @c xxx narrow and underline
réduire et souligner après visiter un fichier. Ceci peut être visible
par une perturbation transitoire après visiter un fichier et certaines
commandes de défilement. Vous pouvez continuer à taper sans vous
inquiéter de cette perturbation.
@node Nonrelocatable references
@section Références non relocalisables
@cindex non-relocalisables, références
@cindex références non-relocalisables
@kbd{C-y} relocalise toutes les références de cellule dans une formule
collée, alors que @kbd{C-u C-y} nen relocalise aucune. Et pour les
cas mélangés ?
La meilleure approche est de renommer les cellules que vous @emph{ne}
voulez @emph{pas} être relocalisables en utilisant
@code{ses-rename-cell}.
@findex ses-rename-cell
Les cellules qui nont pas un style de nom du genre de A1 ne sont pas
relocalisées au collage. En utilisant cette méthode, les cellules
concernées ne seront pas relocalisées quelle que soit la formule où
elles apparaissent. Prière toutefois de noter que dans une formule
contenant quelque plage @code{(ses-range @var{cell1} @var{cell2})}
alors dans la formule collée chacune des bornes @var{cell1} et
@var{cell2} de la plage est relocalisée, ou non, indépendemment, selon
quelle est nommée du genre de @samp{A1} ou renommée.
Une méthode alternative est dutiliser
@lisp
(symbol-value 'B3)
@end lisp
pour faire une @dfn{référence absolue}. Le relocalisateur de formule
saute par dessus tout ce qui est sous un @code{quote}, aussi cela ne
sera pas relocalisé quand on le colle ou quand des lignes/colonnes
sont insérées/supprimées. Toutefois, @samp{B3} ne sera pas
enregistrée comme une dépendance de cette cellule, et donc cette
cellule ne sera pas mise à jour automatiquement quand @samp{B3} est
modifiée, cest pourquoi lusage de @code{ses-rename-cell} est la
plupart du temps préférable.
Les variables @code{row} et @code{col} sont liées dynamiquement
pendant lévaluation dune formule de cellule. Vous pouvez utiliser
@lisp
(ses-cell-value row 0)
@end lisp
pour obtenir la valeur de la colonne la plus à gauche de la ligne
courante. Ce type de dépendance nest pas non plus enregistré.
@node The data area
@section La zone de données
@cindex données, zone de
@cindex zone de données
@findex ses-reconstruct-all
Commence avec un caractère saut de page (de code ASCII 014 en octal),
suivi par un ensemble de macros de définition de cellule pour chaque
ligne, suivi par lensemble des définitions de fonctions dimpression
locales, suivi par les largeurs de colonnes, fonctions dimpression de
colonne, fonction dimpression par défaut, et ligne den-tête. Ensuite
il y a les paramètres globaux (ID de format fichier, nombre de lignes,
nombre de colonnes, nombre de fonctions dimpression locales) et les
variables locales (spécification du mode @acronym{SES} pour le tampon,
etc.).
Quand un fichier @acronym{SES} est chargé, tout dabord les paramètres
globaux sont chargés, puis lensemble de la zone de données est
@code{eval}ué, et finalement les variables locales sont traitées.
Vous pouvez éditer la zone de données, mais ninsérez pas ni ne
supprimez de sauts de ligne, hormis dans la partie des variables
locales, en effet @acronym{SES} localise les choses en comptant les
sauts de ligne. Utilisez @kbd{C-x C-e} à la fin dune ligne pour
installer ce que vous avez édité dans les structures de données de la
feuille (ceci ne met pas à jour la zone dimpression, utilisez, par
ex., @kbd{C-c C-l} pour cela).
La zone de données est maintenue comme une image des structures de
données de la feuille stockée dans des variables locales tampon au
moment du chargement initial de la zone. Si le contenu de la zone de
données se trouve corrompu par la suite, vous pouvez essayer de
reconstruire la zone de données à partir des structures de données
avec :
@table @kbd
@item C-c M-C-l
(@code{ses-reconstruct-all}).
@end table
@node Buffer-local variables in spreadsheets
@section Les variables locales-tampon dans les feuilles de calcul
@cindex locales-tampon, variables
@cindex variables locales-tampon
Vous pouvez ajouter des variables locales supplémentaires à la liste
au bas de la zone de données, telles que des constantes cachées
auxquelles vous désirez faire référence dans vos formules.
Vous pouvez initialiser la variable @code{ses--symbolic-formulas} pour
être une liste de symboles (comme une suite de chaînes entre
parenthèses) à proposer comme complétions pour la commande @kbd{'}.
Cette liste initiale de complétions sera utilisée à la place de
lensemble effectif des symboles-comme-formules de la feuille.
Pour un exemple de ceci, voir le fichier @file{etc/ses-example.ses}.
Si (pour une raison quelconque) vous désirez que vos formules ou
fonctions dimpression sauvegardent des données dans des variables,
vous devez déclarer ces variables comme locales tampon pour éviter un
avertissement de virus.
Vous pouvez définir des fonctions en en faisant des valeurs pour la
fausse variable locale @code{eval}. De telles fonctions peuvent
ensuite être utilisées dans les formules et comme fonctions
dimpression, mais dordinaire chaque @code{eval} est présenté à
lutilisateur pendant le chargement du fichier comme un virus
potentiel. Et cela peut devenir gênant.
Vous pouvez définir des fonctions dans votre fichier @file{.emacs}.
Toute personne pourra encore lire la zone dimpression de votre
feuille, mais ne pourra pas recalculer ou réimprimer quoi que ce soit
qui dépende de vos fonctions. Pour éviter des avertissements contre
les virus, chaque fonction utilisée dans une formule nécessite
@lisp
(put 'le-nom-de-votre-fonction 'safe-function t)
@end lisp
@node Uses of advice-add in @acronym{SES}
@section Utilisation de advice-add dans @acronym{SES}
@findex advice-add
@findex copy-region-as-kill
@findex yank
@table @code
@item copy-region-as-kill
Quand on copie de la zone dimpression dune feuille, traite la région
comme un rectangle et joint pour chaque cellule sa formule et sa
fonction dimpression comme des propriétés @code{'ses}.
@item yank
Quand on colle dans la zone dimpression dune feuille de calcul,
essaie de coller comme des cellules (si le texte à coller a des
propriétés @code{'ses}), ensuite comme des formules séparées par des
tabulations, ensuite (si tout le reste a échoué) comme une seule
formule pour la cellule courante.
@end table
@c ===================================================================
@node Index
@unnumbered Index
@printindex cp
@c ===================================================================
@node Acknowledgments
@unnumbered Remerciements
Codé par :
@quotation
@c jyavner@@member.fsf.org
Jonathan Yavner,
@c monnier@@gnu.org
Stefan Monnier,
@c shigeru.fukaya@@gmail.com
Shigeru Fukaya,
@c vincent.belaiche@@sourceforge.net
Vincent Belaïche
@end quotation
@noindent
Manuel Texinfo de :
@quotation
@c jyavner@@member.fsf.org
Jonathan Yavner,
@c brad@@chenla.org
Brad Collins,
@c vincent.belaiche@@sourceforge.net
Vincent Belaïche
@end quotation
@noindent
Idées de :
@quotation
@c christoph.conrad@@gmx.de
Christoph Conrad,
@c cyberbob@@redneck.gacracker.org
CyberBob,
@c syver-en@@online.no
Syver Enstad,
@c fischman@@zion.bpnetworks.com
Ami Fischman,
@c Thomas.Gehrlein@@t-online.de
Thomas Gehrlein,
@c c.f.a.johnson@@rogers.com
Chris F.A. Johnson,
@c lyusong@@hotmail.com
Yusong Li,
@c juri@@jurta.org
Juri Linkov,
@c maierh@@myself.com
Harald Maier,
@c anash@@san.rr.com
Alan Nash,
@c pinard@@iro.umontreal.ca
François Pinard,
@c ppinto@@cs.cmu.edu
Pedro Pinto,
@c xsteve@@riic.at
Stefan Reichör,
@c epameinondas@@gmx.de
Oliver Scholz,
@c rms@@gnu.org
Richard M. Stallman,
@c teirllm@@dms.auburn.edu
Luc Teirlinck,
@c jotto@@pobox.com
J. Otto Tennant,
@c jphil@@acs.pagesjaunes.fr
Jean-Philippe Theberge,
@c rrandresf@@hotmail.com
Andrés Ramírez
@end quotation
@c ===================================================================
@node GNU Free Documentation License
@appendix GNU Free Documentation License
@include doclicense.texi
@bye
@c Local Variables:
@c ispell-dictionary: "fr"
@c End: