Ci-suivent quelques exercices pour les plus rapides ou pour réviser.
Le premier exercice reste néanmoins important car il montre un problème potentiel avec Open Office (le problème ne se pose pas avec Microsoft Excel).
Cet exercice doit être réalisé avec Open Office pour voir le problème qui nécessite l'édition du code.
Dans cet exercice, nous reprenons notre exercice avec le calcul de mode mais choisissons d'utiliser un tableau croisé dynamique pour calculer le mode à la place de l'usage de la formule NB.SI
. Notre but est d'étudier un problème qui peut se rencontrer avec les macros quand on utilise un tableau croisé dynamique.
Récupérez ici le fichier de travail. Ce fichier est celui qu'on a utilisé dans l'exercice précédente avec des formules permettant de récupérer le mode. Ces formules utilisent les fonctions EQUIV
et INDIRECT
car ont été présentées dans une partie Si du temps
du support 5 (TD 6) (et la méthode de calcul du mode utilisée ici a été présentée dans une partie Si du temps
du support 6 (TD 7)).
La méthode de calcul du mode utilisée est la suivante (on suppose que les données à analyser ont été copiées en mémoire comme dans l'exercice précédent) :
data: copie en mémoire des données de la variable dont on veut calculer le mode.
A1
de la feuille calcul.
F1
de la feuille calcul.
data: les formules pré-définies dans le classeur permettent de calculer le mode en colonnes
I
.Pour exemple, ci-suit le tableau dynamique obtenu si la variable considérée est le mois de naissance
Étape 1. Appliquez cette méthode (sans macro pour l'instant) pour calculer le mode d'une des variables. Cela va mettre en place le tableau croisé dynamique et les formules.
Il y a plusieurs difficultés dans l'enregistrement de la macro présentée juste avant l'étape 1 :
A1
(de la feuille calcul. Nous mettrons le nom
var. Cela permettra d'avoir toujours le même titre de colonne pour la mise en œuvre du tableau croisé.
varen
A1
et modifiez le tableau croisé dynamique en conséquence.datale nom de la variable pour lequel le mode est affichée de manière cohérente avec ce que nous avons réalisé jusque là.
var, on sauvegardera la valeur de la cellule
A1
en D1
(Si vous avez mis le tableau croisé à cet endroit, mettez-le ailleurs ou considérez une autre cellule que D1
)D1
et non en A1
.En résumé, la macro a créer devra réaliser les opérations suivantes.
Avant l'exécution de la macro (et donc, de manière conseillée, avant son enregistrement), il faudra penser à copier les données d'une variable (en-tête compris).
calculpour s'y placer (on y reste jusqu'à la dernière étape).
A1
de la feuille calcul.
A1
en D1
.A1
du nom var.
data.
Vous allez certainement avoir une mauvaise surprise : le tableau n'est pas rafraîchi malgré tous vos efforts !
C'est un autre petit bug d'OpenOffice, mais celui-ci est facile à rectifier. Éditez cette macro "var2" (Outils > Macros > Gérer les macros > OpenOffice.org Basic...) et regardez les dernières lignes de code (un peu avant la dernière ligne end sub
). Vous allez trouver ceci :
rem ----------------------------------------------------------------------
rem dispatcher.executeDispatch(document, ".uno:RecalcPivotTable", "", 0, Array())
Effacez le deuxième rem
pour obtenir
rem ----------------------------------------------------------------------
dispatcher.executeDispatch(document, ".uno:RecalcPivotTable", "", 0, Array())
puis sauvez. Maintenant, votre macro devrait fonctionner !
Dans un nouveau fichier ods
, refaites le premier exemple (jeu de la vie). La feuille
du classeur comportera une plage contenant les valeurs d'une génération et une plage
dans laquelle seront calculées les valeurs de la génération suivante selon les principes
énoncés dans le premier exercice. Une macro sera ensuite mise en place pour pouvoir,
en cliquant sur un bouton, sélectionner les valeurs de la seconde plage et les copier
dans la première afin de calculer les valeurs de la génération suivante.