Exercices complémentaires

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).

Exercice 1

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)).

Le traitement pour le calcul du mode

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) :

  1. Feuille data : copie en mémoire des données de la variable dont on veut calculer le mode.
  2. Sélection de la cellule A1 de la feuille calcul.
  3. Copie des données.
  4. Mise en place d'un tableau croisé dynamique ayant pour but de dresser une table des nombre d'occurrences de chaque modalité pour la variable étudiée :
    • les modalités (valeurs) de la variables seront placées en en-tête de ligne (le tableau dynamique n'aura donc que 2 colonnes).
    • Il sera placé en cellule F1 de la feuille calcul.
    • Il faudra retirer l'option de calcul de la somme des valeurs de la colonne (si vous refaites ultérieurement l'exercice Microsoft Excel, voyez par exemple la page ici pour la réalisation de ce point)
    • Ne mettez pas en place de filtre sur ce tableau croisé.
  5. Retour dans la feuille 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.

La macro

Il y a plusieurs difficultés dans l'enregistrement de la macro présentée juste avant l'étape 1 :

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).

  1. Sélection de la feuille calcul pour s'y placer (on y reste jusqu'à la dernière étape).
  2. Sélection de la cellule A1 de la feuille calcul.
  3. Collage des données.
  4. Copier-coller de la valeur de la cellule A1 en D1.
  5. Écriture en A1 du nom var.
  6. Actualisation du tableau croisé dynamique.
  7. Retour dans la feuille data.

Étape 2. Réalisez cette macro . Testez-la.

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 !


Exercice 2

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.

flèche page précédente flèche page suivane