AccueilVersion Calc 1.x Version Calc 2.x Présentation Calc 3.xBien débuter Calc Fonctions Calc Exercices Calc FormulairesAstuces CalcPrécisions calculsLa bonne formuleProgrammation BasicLiens diversDéfinitionsRecherche sur siteHumourInfos, news

EXERCICES CALC. Calendrier annuel. Partie 1

 

Accès direct : Page 1 Page 2 Page 3


Nous allons créer un calendrier annuel, simple, pour commencer, mais déjà sujet à quelques pièges (parfois volontaires). Ouvrons donc un nouveau classeur qui contient par défaut 3 feuilles nommées : Feuille1, Feuille2, Feuille3.

Dans la première feuille, nous allons inscrire l'année désirée, comme sur cet exemple. Puis dans la 2ème feuille, nous allons créer notre tableau. Nous allons donc utiliser la fonction DATE.

Nous sélectionnons la cellule A1 de la feuille2. Pour entrer la fonction DATE(), nous pouvons l'entrer directement ou appeler l'AutoPilote de fonctions, par le menu normal Insertion, Fonction, ou directement par Ctrl+F2.

Dans la boite de dialogue AutoPilote de fonctions, choisissons Date&Heure, puis dans la liste des fonctions, DATE. Notez sur la partie droite un résumé simple de cette fonction.

En cliquant sur Suivant, la partie droite de la boite de dialogue se modifie pour s'adapter à la fonction demandée.

Il suffit donc d'entrer les données dans chaque case.

Pour l'année, par exemple, cliquez dans la zone blanche pour y placer le curseur, puis, cliquez sur l'onglet (dans la barre d'onglets)de la Feuille1 et sur la cellule B1, celle où se trouve l'année. La zone va se remplir automatiquement.

Dans la zone Année, on peut maintenant lire Feuille.B1 (cellule B1 de la Feuille1).

Comme nous commençons au 1er janvier, nous complétons Mois et Jour à 1.

Notez les affichages Résultat et Résultat partiel.

 

Mais nous n'allons tout de même pas utiliser cette méthode pour chaque jour de l'année. Maintenant que nous avons le premier jour, il suffit de reprendre cette date, augmentée de 1 jour, par la formule simple = contenu de la cellule+1. En A2, nous écrirons =A1+1

Il suffira donc de recopier vers le bas pour finir le mois. Parfait ? Pas vraiment. Pour les autres mois ?

STOP Comment pourriez-vous faire ?

Une des possibilités. Pour le mois de février,en B1, il suffit de faire =A1+31, puisque janvier a 31 jours. Faites l'essai, ça marche. Pour les jours suivant, 2 possibilités. Soit recopier la formule vers le bas, soit reprendre l'exemple de janvier avec =cellule+1. La seconde solution est nettement préférable. Les problèmes arriveront en fin de tableau.

Pour le 1er jour de mars, on ajoute 28 ou 29 ? Le problème du mois de février et des années bissextiles. Un fléau ! D'ailleurs, le mois de février, vous l'avez arrêté quand ? Le 28 ou le 29 ? Bon, ça on verra plus tard. Pour le mois de mars, nous avons 2 solutions élégantes.

Avec la fonction ESTBISSEXTILE. Cette fonction renvoie la valeur 1 ou VRAI si l'année est bissextile et 0 ou FAUX dans le cas contraire. En C1, pour le premier jour de mars, il suffira donc de faire =B1+28+ESTBISSEXTILE(A1) et de recopier vers le bas. Cette méthode va fonctionner jusqu'au dernier jour de l'année, en tenant compte du décalage de chaque mois. Ainsi pour le 1er jour d'avril, il faudra faire =B1+31+ESTBISSEXTILE(A1 )

La fonction BISSEXTILE() fonctionne avec n'importe quelle date dans l'année à analyser.

Autre solution. Utiliser la fonction JOURSDANSMOIS. Cette fonction utilise le même principe. On peut entrer n'importe quelle date, dans le mois (pas dans l'année) à analyser.

Le problème, toujours le 1er jour de mars, en C1. On entrera donc = B1 + JOURSDANSMOIS(B1) qui donnera le nombre de jours du mois de février de l'année à analyser. Cette fonction est intéressante, puisqu'il suffira de la recopier jusqu'à la fin du tableau (bas et droite) pour que tout fonctionne.

Dernier problème. Les fins de mois. Pour les mois de 30 jours, il suffit de supprimer la formule de la dernière cellule. Reste toujours le cas du 29 février qui existe ou n'existe pas suivant cas. Nous allons traiter ce cas avec les fonctions SI et MOIS. Globalement notre formule va être :

SI(le mois de la première cellule est identique au mois de la cellule à analyser ; on affiche puisque ce sera le 29 février ; sinon on n'affiche rien).

STOP Savez vous écrire cette formule (en B29) et la formule initiale étant = A29 + JOURSDANSMOIS(A29)

Sur cet figure, voici le détail de la fonction à intégrer. La formule originale est intégrée dans la fonction SI une première fois pour calculer si le mois de la cellule A29 est différent du mois de la cellule B1, donc de la même colonne. Si le résultat est différent, on affiche rien (""); sinon, on calcule le résultat.

La formule est donc :

=SI(MOIS(A29+JOURSDANSMOIS(A29))<>MOIS(B$1);"";A29+JOURSDANSMOIS(A29))

A noter que nous pouvons écrire différemment pour un résultat identique :

=SI(MOIS(A29+JOURSDANSMOIS(A29))=MOIS(B$1);A29+JOURSDANSMOIS(A29);"")

 

 

 

Je vais vous montrer une autre méthode simple, pour un calendrier annuel simple en utilisant les fonctions LIGNE et COLONNE.

Effacez complètement la feuille2.

Au fait, savez-vous effacer toute une feuille d'un coup ? Sélectionnez la feuille entière en cliquant dans la zone à gauche de A et au-dessus de 1, comme sur cet exemple. La feuille entière passe en vidéo inverse.

Appuyez sur la touche Suppression, dans la boite de dialogue Supprimer du contenu, cochez Tout supprimer, puis OK. La feuille est vide.

Nous avons vu la fonction DATE ou l'on entre DATE(Année; mois; jour). Nous savons que l'année se trouve en Feuille1.B1 Les mois évoluent dans les colonnes et les jours dans les lignes. Autant se servir de fonctions existantes, les fonctions COLONNE et LIGNE à ne pas confondre avec COLONNES et LIGNES (au pluriel).

Utilisée seule, la fonction COLONNE dans une cellule quelconque renverra le numéro de colonne. En A1 ou A100, par exemple la valeur de retour sera 1. En C3 ou C10, par exemple, la valeur sera 3. Le principe est le même pour la fonction LIGNE.

Donc dans la cellule A1 de la Feuille2, on entrera la formule :

=DATE(Feuille1.B1;COLONNE();LIGNE())

Il suffira ensuite de recopier vers le bas pour les jours et la droite pour les mois.

Une erreur ? STOP Cherchez où est l'erreur.

Vous avez trouvé. Un problème d'adressage. Il faut être en en adressage absolu et rentrer la formule en A1 comme suit :

=DATE(Feuille1.$B$1;COLONNE();LIGNE())

C'est déjà plus simple, mais on peut mieux faire. Il suffit de nommer l'année pour rendre la formule plus lisible. Nous la nommerons donc ChoixAn. Il faut utiliser un nom pratique, mais il faut éviter de nommer Annee par exemple, puisqu'il existe une fonction ANNEE, et donc source de confusions. La formule devient donc :

=DATE(ChoixAn;COLONNE();LIGNE())

 

Notre calendrier fonctionne, mais avec des défauts. Le principal concerne les fins de mois inférieurs à 31 jours.

Les fins de mois sont difficiles (!) Le mois de février finit avec le début du mois de mars. Il va donc falloir trouver un moyen de cacher le surplus, tout en tenant compte des 28 ou 29 jours. Nous pouvons utiliser la méthode précédente, mais une autre solution existe. Nous verrons ça plus loin.

Autre souci. Rien n'est prévu pour inscrire les noms des mois et aussi l'année, puisque dans notre exemple on affiche l'année chaque jour, ce qui est ridicule.

Pour un calendrier annuel, on affiche en gros, l'année, puis les noms des mois, et enfin les jours seuls, comme par exemple, lundi 05.

Il faudrait donc insérer 2 lignes avant notre tableau. Allez-y. Insérez 2 lignes. Encore un problème. Les dates sont décalées. Les mois commencent en retard ! Evidement, il faut modifier en A3, maintenant, comme suit :

=DATE(ChoixAn;COLONNE();LIGNE()-2) Vous avez noté le -2 ? Il correspond aux 2 lignes de décalages. Il ne reste plus, une fois encore, qu'a recopier.

Pour les mois, en A2, inscrivez le nom du premier mois, janvier, puis recopiez vers la droite, les listes de tri feront leur travail. La ligne 1 sera réservée à l'affichage de l'année.

Notre calendrier est triste. Nous allons utiliser les formatages conditionnels pour améliorer la présentation. D'une part en faisant ressortir les dimanches et d'autre part, nous allons masquer les erreurs des fins de mois.

 

Dans la Feuille1, nous créons ce petit tableau qui va servir de base à nos formats conditionnels. Ci-contre, le tableau en cours de réalisation. Une date quelconque est entrée (ici le 5 janvier 2005) afin de voir l'évolution de la présentation. Cette date n'influera pas sur les autres cellules.

Et ici, le tableau fini. Les jours sont présentés différemment avec une mise en forme des cellules et un format date personnalisé (sauf si déjà existant) au format JJJ JJ ou NN JJ, ce qui est identique.

Les dates sont centrées et en gras pour les week-end, qui sont également bleus. Les cellules sont encadrées.

La dernière cellule, Néant, se sert d'une astuce. La date est toujours bien présente, mais invisible. Tous simplement parce qu'on utilise la couleur blanche comme couleur de caractère.

Il suffira ensuite de créer les styles StyleWeekEnd, StyleNormal, StyleNéant à l'aide du styliste dans OOo 1.1x ou de Styles et formatage dans OOo 2.x à partir des cellules définies.

Nous allons maintenant faire appel au formatage conditionnel. La priorité va être de masquer les cellules de fin de mois ne correspondant pas. Pour ça on appliquera le Style Néant qui masquera le contenu de la cellule. Donc sélectionnons le tableau des dates, puis appelons le formatage conditionnel, via le menu Format, Formatage conditionnel ou les raccourcis Alt+t, m.

 

Voici une vue partielle de la boite de dialogue Formatage conditionnel.

Il faut modifier la sélection et choisir Formule est. Dans notre cas, le tableau sélectionné est A3:L33, la cellule active étant la L33. Comme dans les exemples précédents, nous testons que le mois de la cellule concernée est différent de la première cellule du mois concerné. Ce qui explique les adressages relatifs et absolus de cette formule :

MOIS(L$3)<>MOIS(L33)

MOIS(L$3) correspond au 1er du mois de décembre.

MOIS(L33) correspond au 31 décembre.

L'adressage absolu de la ligne du 1er du mois ($3) est simple à comprendre. On prend toujours référence au 1er du mois. L'adressage relatif (L) est également simple. On va tester les différents mois.

Si vous ne comprenez pas très bien cette fonction, une fois appliquée, déplacez-vous dans les cellules du tableau, appelez le formatage conditionnel et regardez l'évolution des formules.

Enfin, pour finir, appliquez le style StyleNéant. Si vous n'avez pas fait d'erreur, les fins de mois inférieurs à 31 jours ne sont plus visibles.

Notre calendrier est triste. Ce serait quand même bien de voir au moins les dimanches. Très simple, encore grâce au formatage conditionnel.

Nous allons appliquer la fonction JOURSEM qui va renvoyer une valeur numérique en fonction du jour de la semaine. Dans notre cas, en condition 2, et après avoir sélectionné le tableau comme précédemment, la formule est JOURSEM(L33)=1 et en style de cellule, StyleWeekEnd.

 

Le résultat est déjà plus agréable.

Si vous souhaitez afficher les samedi et dimanche pour les week-end, il faut modifier la formule en ajoutant la fonction OU comme suit :

OU(JOURSEM(L33)=1;JOURSEM(L33)=7)

Dernier point. Pour les autres jours de la semaine, nous allons utiliser le style défini StyleNormal. Inutile de passer par le Formatage conditionnel.

Il suffit une fois de plus de sélectionner le tableau, d'appeler le Styliste, de choisir StyleNormal et de remplir tout.

Voici le résultat. Les noms de mois ne sont pas mis en forme, mais ça, vous savez faire !

Il existe encore d'autres solutions et améliorations, notamment pour afficher les jours fériés, fixes ou mobiles, les plannings. Regardez les pages suivantes.

 


Et maintenant, à vos claviers.

 

 

Ce site n'est plus mis à jour. Merci aux nombreux visiteurs depuis 2003. Consultez le Wiki LibreOffice.
   

Le tableur Calc par l'exemple : christianwtd@free.fr
Creative Commons License
This work is licensed under a Creative Commons Attribution-NonCommercial-ShareAlike 2.0 France License.

  .

Site optimisé pour Firefox


Dernière modification : 29/08/2010 à 18h48


Déjà plusieurs visites sur ce site depuis quelque temps (au moins vous et moi)

Compteur non certifié