ddb8ffcbc1e5e2475a3016a5c7200f1416b7aef9
[worg.git] / org-tutorials / org-tableur-tutoriel.org
1 #+TITLE:      Utiliser Org comme tableur: une courte introduction
2 #+AUTHOR:     Worg
3 #+EMAIL:      bzg AT altern DOT org
4 #+OPTIONS:    H:3 num:nil toc:t \n:nil @:t ::t |:t ^:t -:t f:t *:t TeX:t LaTeX:t skip:nil d:(HIDE) tags:not-in-toc
5 #+STARTUP:    align fold nodlcheck hidestars oddeven lognotestate
6 #+SEQ_TODO:   TODO(t) INPROGRESS(i) WAITING(w@) | DONE(d) CANCELED(c@)
7 #+TAGS:       Write(w) Update(u) Fix(f) Check(c) 
8 #+LANGUAGE:   fr
9 #+PRIORITIES: A C B
10 #+CATEGORY:   worg
11 #+CONSTANTS: pi=3.14159265358979323846
12
13 [[file:~/install/git/worg/index.org][{Retour à l'index de Worg}]] -- [[file:org-spreadsheet-intro.org][{This tutorial in *english*}]]
14
15 * Introduction
16
17 Ce court tutorial expose les connaissances de base à acquérir pour utiliser
18 Org comme tableur.
19
20 Démarrons avec un tableau très simple :
21
22 | Étudiant | Maths | Physique |
23 |----------+-------+----------|
24 | Bertrand |    13 |       09 |
25 | Henri    |    15 |       14 |
26 | Arnold   |    17 |       13 |
27
28 Au format Org, ce tableau s'écrit ainsi :
29
30 : | Student  | Maths | Physics |
31 : |----------+-------+---------|
32 : | Bertrand |    13 |      09 |
33 : | Henri    |    15 |      14 |
34 : | Arnold   |    17 |      13 |
35
36 Le but de ce tutoriel est de comprendre comment aller de ce simple tableau 
37 à celui-ci, où nous calculons les moyennes par étudiant et par discipline:
38
39 | Étudiant | Maths | Physique | Moyenne |
40 |----------+-------+----------+---------|
41 | Bertrand |    13 |       09 |      11 |
42 | Henri    |    15 |       14 |    14.5 |
43 | Arnold   |    17 |       13 |      15 |
44 |----------+-------+----------+---------|
45 | Moyennes |    15 |       12 |    13.5 |
46
47 * Se familiariser avec les références
48
49 Commençons par la moyenne de chaque étudiants.
50
51 :  | Étudiant | Maths | Physique | Moyenne   |
52 :  |----------+-------+----------+-----------|
53 :  | Bertrand |    13 |       09 | [Formule] |
54 :  | Henri    |    15 |       14 |           |
55 :  | Arnold   |    17 |       13 |           |
56
57 Avant de pouvoir insérer une formule dans =[Formule]=, vous devez savoir
58 comment vous *référer* à une rangée, une colonne ou à une cellule.
59
60 La manière la plus simple d'apprendre la façon dont fonctionne les
61 références est de taper =C-c ?= quand vous êtes dans une cellule.
62
63 Par exemple, si vous êtes dans la cellule contenant =[Formule]=, =C-c ?=
64 vous indiquera =line @2, col $4, ref @2$4 or D2=, ce qui signifie que vous
65 êtes dans la seconde rangée (ou ligne) de la quatrième colonne, et la
66 référence à cette cellule est soit =@2$4= soit =D2=.
67
68 À tout moment, si vous êtes perdu dans les rangées et les colonnes, vous
69 pouvez toujours activer une grille de visualisation des références avec le
70 raccourci =C-c }=:
71
72 [[file:../images/bzg/reference_visualization.jpg]]
73
74 * Votre première formule
75
76 Placez le curseur dans le champ (vide) =[Formule]=.  Maintenant tapez
77 =:=vmean($2..$3)= dans ce champ.  Cette formule signifie: calculer la
78 moyenne (/mean/ en anglais) pour les champs compris entre la deuxième
79 cellule (=$2=) et la troisième cellule (=$3=) /dans cette rangée/.  Si vous
80 préférez utiliser une autre notation, tapez =:=vmean(B&..C&)= -- dans ce
81 cas, le caractère =&= signifie "dans cette rangée", ce qui est implicite
82 dans la notation précédente.
83
84 Toujours dans cette rangée, tapez =C-c C-c= - vous devriez observer deux
85 choses : 1) la formule est remplacée par le résultat du calcul et 2) une
86 nouvelle ligne commençant par =#+TBLFM= est insérée en bas du tableau.
87
88 La ligne =#+TBLFM= contient toutes les formules pour la table située
89 au-dessus -- faites attention avant d'éditer cette ligne manuellement.
90
91 * Formules pour les colonnes et pour les champs
92   :PROPERTIES:
93   :ID:       3f8d1e72-b076-49cc-9f3d-7da4da57dca1
94   :END:
95
96 Donc, nous avons désormais ce tableau :
97
98 : | Étudiant | Maths | Physique | Moyenne |
99 : |----------+-------+----------+---------|
100 : | Bertrand |    13 |       09 |      11 |
101 : | Henri    |    15 |       14 |         |
102 : | Arnold   |    17 |       13 |         |
103 : #+TBLFM: @2$4=vmean($2..$3)
104
105 Mais ce que nous voulons vraiment, c'est calculer les formules pour /tous
106 les champs de la colonne/ "Moyenne".  En d'autres termes, nous voulons en
107 fait une =formule de colonne= (/column formula/), pas seulement
108 une =formule de champ= (/field formula/.)
109
110 Pour remplacer la formule avec une formule de colonne, retournez dans le
111 champ où cette formule a été définie et tapez ~=vmean($2..$3)~.  Notez que
112 la seule différence avec ce que nous avons inséré plus haut est que cette
113 formule est préfixée par ~=~ au lieu de ~:=~.  Quand c'est fait, faites un
114 =C-c C-c= dans le champ : on vous demandera si vous voulez remplacer la
115 formule avec une formule de colonne, ce qui est précisément ce que nous
116 voulons.
117
118 Une fois que vous répondez « yes », la valeur dans le champ devrait être la
119 même qu'auparavant (à savoir =11=) et vous pouvez désormais mettre à jour
120 tous les champs de cette colonne en réappliquant toutes les formules avec
121 =C-u C-c *= (ou =C-c C-c= si vous êtes sur la ligne =#+TBLFM=.)
122
123 Donc nous avons maintenant ce tableau :
124
125 : | étudiant | Maths | Physique | Moyenne |
126 : |----------+-------+----------+---------|
127 : | Bertrand |    13 |       09 |      11 |
128 : | Henri    |    15 |       14 |    14.5 |
129 : | Arnold   |    17 |       13 |      15 |
130 : #+TBLFM: $4=vmean($2..$3)
131
132 Comme l'unique formule de la ligne =#+TBLFM= s'applique désormais à toute
133 la colonne, elle ne contient aucune référence à une rangée.  Avant, la
134 formule était appliquée au champ =@2$4=, elle est maintenant appliquée
135 pour toute la quatrième colonne.
136
137 Pour finir, nous pouvons ajouter la rangée pour les moyennes par
138 discipline.  Cette rangée contient deux /formules de cellue/, chacune
139 calculant la moyenne pour le champ situé au-dessus dans la même colonne :
140
141 : | Étudiant | Maths | Physique | Moyenne |
142 : |----------+-------+----------+---------|
143 : | Bertrand |    13 |       09 |      11 |
144 : | Henri    |    15 |       14 |    14.5 |
145 : | Arnold   |    17 |       13 |      15 |
146 : |----------+-------+----------+---------|
147 : | Moyennes |    15 |       12 |         |
148 : #+TBLFM: $4=vmean($2..$3)::@5$2=vmean(@2$2..@4$2)::@5$3=vmean(@2$3..@4$3)
149
150 Ce qui produit ce tableau :
151
152 | Étudiant | Maths | Physique | Moyenne |
153 |----------+-------+----------+---------|
154 | Bertrand |    13 |       09 |      11 |
155 | Henri    |    15 |       14 |    14.5 |
156 | Arnold   |    17 |       13 |      15 |
157 |----------+-------+----------+---------|
158 | Moyennes |    15 |       12 |         |
159 #+TBLFM: $4=vmean($2..$3)::@5$2=vmean(@2$2..@4$2)::@5$3=vmean(@2$3..@4$3)
160
161 * Éditer des formules de manière interactive
162
163 Pour l'instant nous avons défini les formules en les insérant directement
164 dans les cellules du tableau : taper ~=~ dans une cellule lance la
165 définition pour formule de colonne, et taper ~:=~ lance la définition pour
166 une formule de cellule.
167
168 Si vous préférez, vous pouvez éditer les formules dans le /minibuffer/:
169 utilisez =C-c == pour éditer les formules de colonne et =C-u C-c == pour
170 éditer les formules de cellule.
171
172 Mais vous pouvez aussi éditer les formules de manière plus interactive dans
173 un buffer dédié en tapant C-c '.  Le nouveau buffer liste toutes les
174 formules du tableau et facilite l'édition des références.
175
176 Quand le curseur est sur une référence, les champs correspondant du tableau
177 sont surlignés.  Sympa!  Mais vous pouvez faire encore plus : vous pouvez
178 en fait choisir la référence en utilisant les touches
179 =S-<left/right/up/down>= (shift + les touches du curseur).
180
181 [[file:../images/bzg/formulas_editor.jpg]]
182
183 Note : vous pouvez avoir peur que de déplacer une colonne avec
184 =M-<left/right>= ou bien une rangée du tableau avec =M-<up/down>= perturbe
185 les références de la ligne =#+TBLFM=, mais chaque movement met à jour
186 automagiquement les références de la ligne =#+TBLFM=.
187
188 * Calc et les formules Elisp
189
190 La syntaxe par défaut pour les formules est celle de Calc, la librairie de
191 GNU Emacs pour faire des calculs.
192
193 Voici un extrait du [[http://www.delorie.com/gnu/docs/calc/calc_21.html][manuel de Calc]] au sujet des formules algébriques :
194
195 : Les formules algébriques utilise les opérateurs `+', `-', `*', `/', 
196 : and `^'.  Vous pouvez utiliser les parenthèses pour clarifier l'ordre
197 : d'évaluation.  En l'absence de parenthèses, `^' est évalué en premier,
198 : puis `*', puis `/', et enfin `+' et `-'.  Par exemple, l'expression
199
200 : 2 + 3*4*5 / 6*7^8 - 9
201
202 : est equivalente à
203
204 : 2 + ((3*4*5) / (6*(7^8)) - 9
205
206 Dans les tableau org, vous pouvez utiliser des références à la place des
207 valeurs pour faire des calculs.  Simple comme bonjour.
208
209 Mais quid de l'utilisation de formules en Emacs lisp au lieu de Calc ?
210
211 Disons par exemple que vous voulez associer à chaque étudiant une décimal
212 du nombre Pi, en fonction de la moyenne de leurs notes en maths et en
213 physiques.
214
215 Pour cela vous aurez besoin de dire à Org quelle est la valeur que vous
216 prendrez comme valeur de Pi.  Vous pouvez le faire en ajoutant cette ligne.
217
218 : #+CONSTANTS: pi=3.14159265358979323846
219
220 (N'oubliez pas de taper =C-c C-c= sur la ligne =#+CONSTANTS= de façon à ce
221 qu'Org soit la prenne en compte.)
222
223 Ensuite vous pouvez définir une formule Emacs lisp telle que celle-ci :
224
225 : $5='(substring (number-to-string $pi) (round $4) (1+ (round $4)));N
226
227 Hum.  Voyons ce que ça veut dire.
228
229 - =(substring S A B)=: prendre une sous-chaîne de caractères entre les
230   positions =A= et =B= de la chaîne =S=.
231 - =(number-to-string $pi)=: convertir la constante "Pi" en chaîne de
232   caractères.
233 - =(round $4)=: prendre la valeur arrondie de la valeur de la colonne =$4=.
234 - =;N=: considérer que les valeurs dans les champs sont des nombres et non
235   des chaînes de caractères.
236
237 Si la moyenne d'un étudiant est de 10, cette formule renvoie la 10ème
238 décimale de Pi.
239
240 * Déboguer les formules
241
242 Donc votre tableau ressemble désormais à ceci :
243
244 : | Étudiant  | Maths | Physique | Moyenne | Pi  |
245 : |----------+-------+---------+------+-----------|
246 : | Bertrand |    13 |      09 |   11 |         5 |
247 : | Henri    |    15 |      14 | 14.5 |         7 |
248 : | Arnold   |    17 |      13 |   15 |         9 |
249 : #+TBLFM: $4=vmean($2..$3)::$5='(substring (number-to-string $pi) (round $4) (1+ (round $4)));N
250
251 Si vous revenez à ce tableau mais que vous avez la flemme de comprendre ce
252 que fait la function en Emacs lisp, vous pouvez aussi bien *déboguer* la
253 formule et suivre les étapes du calcul une par une.
254
255 Activez le débogueur de formules avec =C-c {= et tapez =C-c C-c= dans un
256 champ (ou =C-u C-c *= n'importe où dans cette table.)  Ceci lancera le
257 calcul de la formule étape par étape, et affichera des détails sur les
258 différentes étapes de toutes les formules dans un buffer distinct.
259
260 Voici ce à quoi ressemble un tel buffer :
261
262 : Substitution history of formula
263 : Orig:   '(substring (number-to-string $pi) (round $4) (1+ (round $4)));N
264 : $xyz->  '(substring (number-to-string 3.14159265358979323846) (round $4) (1+ (round $4)))
265 : @r$c->  '(substring (number-to-string 3.14159265358979323846) (round $4) (1+ (round $4)))
266 : $1->    '(substring (number-to-string 3.14159265358979323846) (round 11) (1+ (round 11)))
267 : Result: 5
268 : Format: NONE
269 : Final:  5
270
271 Une fois que vous avez fini de vérifier les formules, vous pouvez
272 désactiver le débogueur en tapant de nouveau =C-c {=.
273
274 * Et beaucoup, beaucoup plus...
275
276 Utiliser Org comme système pour des calculs sur des tableau est vraiment
277 très pratique.
278
279 Mais vous pouvez faire bien plus que tout ce qui a été présenté !  Utiliser
280 des références relatives, définir des noms pour les colonnes et des
281 paramètres pour les formules, définir des champs qui doivent être
282 automatiquement recalculés, etc.  Pour plus de détails sur l'utilisation
283 d'Emacs lisp dans les formules, reportez vous à [[file:org-spreadsheet-lisp-formulas.org][ce tutoriel (en anglais)]].
284
285 Allez voir du côté des [[http://orgmode.org/org.html#Advanced-features][fonctionnalités avancées]] dans le manuel d'Org-mode,
286 cela vous donnera un rapide aperçu...
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302