Pour partager cette vidéo sur les réseaux sociaux ou sur un site, voici son url :
Sujets que vous pourriez aussi aimer :Planning automatique des jours travaillés
Dans cette
formation Excel, nous proposons de découvrir les astuces permettant de construire la
suite logique des jours travaillés pour un salarié. Dans l'énumération automatique de ces dates, il s'agit de considérer les
jours ouvrés et ouvrables à inclure, ainsi que les
jours fériés et les congés à exclure.
Nous faciliterons ainsi la
construction automatisée de plannings de travail dédiés à chaque salarié, comme le présente le résultat de la capture ci-dessous. Nous choisissons l'un des mois de l'année et le
planning des jours travaillés, se construit automatiquement.
Quelques remarques préalables sont nécessaires avant de débuter.
Excel connaît le calendrier et ses subtilités. En conséquence, il manipule parfaitement les
dates. Certaines informations qu'il ne peut pas connaître doivent néanmoins lui être fournies. Il s'agit des périodes de
congés d'un salarié ou de certaines fêtes religieuses
fériées.
Source et présentation de la problématique
L'application doit être construite presque intégralement, notamment par des
calculs sur les dates. Nous proposons néanmoins de débuter les travaux à partir d'une source existante.
Ce classeur est constitué de deux feuilles. La seconde est nommée
Jours-feries. Elle est illustrée par la capture ci-dessous. Elle énumère dans un tableau, tous les
jours fériés sur plusieurs années, ainsi que les
dates de congés posées par un salarié. Une
fonction Excel sera capable de les intégrer pour les exclure du
planning à construire.
La première feuille se nomme
Jours-ouvres. C'est elle qui doit recevoir nos travaux pour permettre la construction du
planning de travail, sur la base des
jours ouvrables. A ce titre, vous notez la présence d'une liste déroulante en
cellule B2. Elle permet de sélectionner l'un des mois de l'année. C'est sur ce choix que le
planning doit se construire, en excluant les
jours fériés et les
jours de congés. Sa source de données est proposée dans une colonne arbitraire sur la droite de la feuille. Plus précisément, il s'agit de la
colonne Y, comme l'illustre la capture ci-dessous.
Et comme vous le remarquez, chaque mois est accompagné de son numéro. Nous en aurons besoin dans la reconstruction des
dates, grâce à des fonctions raisonnant sur des valeurs numériques et non des textes.
En ligne 4 de cette
feuille Jours-ouvres, sont listés les horaires de travail sur une journée. Donc, au choix du mois en B2, l'ensemble des jours travaillés doit se construire en colonne B, pour produire automatiquement le planning professionnel.
Suite logique des dates d'un mois de l'année
Avant cela, nous devons produire quelques calculs intermédiaires. Le premier d'entre eux consiste à recréer la suite logique des
dates, selon le
mois sélectionné. Plus spécifiquement, nous allons faire en sorte que cette suite logique démarre au jour précédent le début du mois. Ainsi, un deuxième calcul intermédiaire, pourra produire le prochain
jour ouvrable pour chaque date. En partant de celle qui précède le début du mois, potentiellement nous créerons le premier jour du mois. Potentiellement, car il ne doit pas s'agir d'un
jour férié ou d'un
jour de congé. Nous proposons d'exploiter la
fonction Excel Date, dans une colonne arbitraire sur la droite de la feuille, Ã partir de la cellule R3 par exemple. La syntaxe de cette fonction est la suivante :
=Date(Numéro_année ; Numéro_mois ; Numéro_jour)
Pour reconstruire une date précise, il faut donc lui passer dans l'ordre : L'année, le mois et le jour. Mais chacun de ces paramètres doit être transmis en valeur numérique. Par exemple pour le 30 Mai 2019, nous devons lui donner : 2019 puis 5 puis 30. En deuxième argument, nous allons devoir réaliser une recherche du mois sélectionné dans le tableau situé entre les colonnes Y et Z, pour restituer le numéro correspondant. La
fonction d'extraction dédiée se nomme RechercheV. Sa syntaxe est la suivante :
=RechercheV(Valeur_cherchée ; Tableau_de_recherche ; Numéro_de_colonne ; Faux)
La
valeur cherchée est le mois sélectionné dans la liste déroulante. C'est elle qui permettra de trouver le numéro correspondant. Le
tableau de recherche est la source de données située entre les colonnes Y et Z. Le
numéro de colonne doit indiquer dans quelle colonne se trouve l'information à retourner. Le numéro du mois est situé en deuxième colonne. Nous lui passerons donc le chiffre 2. Enfin, nous terminerons par le
paramètre Faux pour réaliser une recherche selon une correspondance exacte.
- Sélectionner la première cellule pour débuter le calcul, soit R3 comme nous l'avons dit,
- Taper le symbole = pour débuter la formule,
- Saisir le nom de la fonction pour construire une date, suivi d'une parenthèse, soit Date(,
- Saisir l'année en chiffres, par exemple 2020,
- Taper un point-virgule (;) pour passer dans l'argument numérique du mois,
- Saisir la fonction d'extraction suivie d'une parenthèse, soit RechercheV(,
- Sélectionner la cellule B2 pour indiquer le mois textuel à rechercher,
- Taper un point-virgule (;) pour passer dans l'argument du tableau de recherche,
- Sélectionner le tableau de recherche en le désignant par les étiquettes de colonne, ce qui donne : Y:Z,
- Taper un point-virgule (;) pour passer dans l'argument du numéro de colonne,
- Saisir le chiffre 2 pour indiquer la deuxième colonne, celle des numéros de mois,
- Taper un point-virgule suivi du texte Faux, soit : ;Faux, pour effectuer une recherche selon une correspondance exacte,
- Fermer la parenthèse de la fonction RechercheV,
- Taper un point-virgule (;) pour passer dans l'argument numérique du jour du mois,
- Saisir le chiffre 1 pour débuter à partir de la première date du mois sélectionné,
- Fermer la parenthèse de la fonction Date,
- Retrancher une unité à ce résultat, soit : -1,
- Valider la formule par le raccourci clavier CTRL + Entrée pour conserver la cellule active,
Dans notre cas, pour le mois d'Août sélectionné, nous obtenons en R3, le résultat suivant : Vendredi 31 Juillet 2020. Il s'agit donc bien du jour qui précède la première date du mois désigné. Elle s'affiche dans cette configuration en raison du
format Date longue, qui a été paramétré en amont sur cette plage de cellules. Cette date est bien dynamique. Si vous changez de mois avec la liste déroulante, son résultat s'adapte. Dans une évolution intéressante, il serait judicieux d'intégrer une seconde liste déroulante pour les années. L'année serait ainsi récupérée dynamiquement par la formule. Il s'agit maintenant de créer la suite logique. La technique est triviale. Il suffit d'ajouter un jour et de répliquer le calcul.
- Sélectionner la cellule juste en dessous, soit R4,
- Taper le symbole = pour débuter le calcul,
- Cliquer sur la cellule de la date à incrémenter, soit R3,
- Lui ajouter une unité, soit +1,
- Valider le calcul par le raccourci CTRL + Entrée,
- Puis, tirer la poignée du résultat sur une cinquantaine de lignes en dessous,
Nous obtenons bien l'enchaînement logique des dates situées juste après le premier jour reconstruit par calcul.
Construire la suite logique des jours ouvrables
Sur la base de cette série dynamique, nous devons désormais être en mesure de ne conserver que les
jours ouvrables. Nous avons le choix entre deux
fonctions que nous avait présentées la
formation Excel sur les heures et les dates. Il s'agit respectivement des fonctions
SERIE.JOUR.OUVRE et
SERIE.JOUR.OUVRE.INTL. La seconde est une subtilité de la première. La première considère le Samedi et le Dimanche comme les jours de Week-End par défaut. Ils ne sont donc pas restitués. La seconde permet de définir les jours de Week-End pour s'adapter à chaque métier. Souvent, les commerçants ferment le Lundi par exemple. Toutes deux, selon un argument facultatif, sont capables d'intégrer les
jours fériés à exclure de l'extraction, selon une plage de cellules de référence à lui transmettre. Dans notre cas souvenez-vous, il s'agit du tableau situé dans la
feuille Jours-feries.
Qui peut le plus, peut le moins ! Nous choisissons donc d'exploiter la seconde fonction, soit
SERIE.JOUR.OUVRE.INTL. Sa syntaxe est la suivante :
=Serie.Jour.Ouvre.Intl(Date_départ ; nb_jours_ajouter ; jours_week_end ; jours_fériés)
La
date de départ est la première date du calcul précédent. Nous l'utiliserons comme référence pour construire tous les
jours ouvrables qui s'en suivent. Nous fixerons le nombre de jours à ajouter sur la valeur 1. Nous demanderons ainsi à la fonction, à partir de la date de référence, de produire le
prochain jour ouvrable. Voilà pourquoi, nous avons débuté l'énumération au jour qui précède le début du mois. A partir du 30 Avril par exemple, grâce à cette méthode, la fonction retournera le 2 Mai, et non le 1
er Mai qui est un
jour férié. Et comme nous tirerons la poignée de la formule, pour chaque date de la série logique, nous extrairons ainsi uniquement les jours travaillés, sur la longueur du mois.
Les
jours de Week End consistent en un argument numérique qu'
Excel propose pendant la construction de la fonction. Il s'agira de définir la valeur qui correspond aux jours de fermeture de l'entreprise. Enfin, les
jours fériés doivent être définis par une plage de cellules qui les recense. Il s'agit du tableau de notre seconde feuille, dans laquelle nous en avons profité pour ajouter les
congés. Ils seront ainsi naturellement exclus afin de ne produire en retour que les
jours travaillés. Nous souhaitons construire cette nouvelle liste à côté de la précédente, soit à partir de la
cellule S3.
- Sélectionner la première cellule pour le calcul des jours travaillés, soit S3,
- Taper le symbole = pour débuter la formule,
- Saisir le nom de la fonction pour les jours ouvrables, suivi d'une parenthèse, soit Serie.Jour.Ouvre.Intl(,
- Cliquer sur la première date de la colonne R, soit R3, pour définir la date de départ,
- Taper un point-virgule (;) pour passer dans l'argument du nombre de jours à ajouter,
- Saisir le chiffre 1 suivi d'un point-virgule, soit 1; pour passer dans l'argument des jours de Week-End,
Comme vous le remarquez, une info-bulle se déclenche pour vous aiguiller dans le choix. Il s'agit de spécifier une valeur numérique correspondant aux jours non travaillés. Ainsi le paramètre 2 indique que le Week-End comprend le Dimanche et le Lundi. Quant à nous, nous choisissons de rester classiques.
- Saisir le chiffre 1 suivi d'un point-virgule, soit 1; pour passer dans l'argument des jours fériés,
- Cliquer sur l'onglet Jours_feries en bas de la fenêtre Excel pour activer sa feuille,
- Sélectionner toutes les dates à la souris, soit la plage de cellules C5:I15,
- Enfoncer la touche F4 du clavier pour figer ses bornes,
- Fermer la parenthèse de la fonction Serie.Jour.Ouvre.Intl,
- Valider la formule par le raccourci clavier CTRL + Entrée pour conserver la cellule active,
- Puis, double cliquer sur la poignée de la cellule pour répliquer la logique du calcul sur la hauteur des dates précédentes,
Comme vous le constatez, nous produisons ainsi une suite de dates pas tout à fait logique. Cependant elle débusque parfaitement les jours de Week-End ainsi que les jours fériés et les jours de congés. Il en résulte des redondances sur lesquelles nous allons nous arrêter pour les commenter. La formule que nous avons bâtie est la suivante :
=SERIE.JOUR.OUVRE.INTL(R3; 1; 1; 'Jours-feries'!$C$5:$I$15)
Dans notre cas, le mois de Juin est sélectionné par le biais de la liste déroulante. Le précédent calcul a donc débuté la série au Dimanche 31 mai 2020. Pourtant, la première date produite par notre formule sur les jours ouvrables, est le Mardi 2 Juin et non le Lundi 1
er Juin. Si vous consultez le tableau des jours fériés, vous constatez en effet que le Lundi de Pentecôte tombe le 1
er Juin en 2020. Notre formule réagit donc parfaitement, chassant les jours fériés en plus des Week-End.
Remarque : Comme dans le précédent calcul, nous avons pris soin de figer les bornes du tableau recensant les jours fériés. Nous avons en effet répliqué le calcul sur de nombreuses lignes vers le bas. Les références de ce tableau ne doivent pas suivre ce déplacement. Chaque calcul de jour ouvrable doit pouvoir se référer à cette liste, dont les bornes sont fixes. Le
livre sur les techniques avancées de calculs dans Excel, traite ces références absolues de façon détaillée.
Dans l'extrait de la capture ci-dessus, le mardi 2 Juin est répété deux fois. Souvenez-vous, en deuxième argument de la fonction, nous avons passé le chiffre 1 pour produire le prochain jour ouvrable, sur la base de la date de départ. Au 31 mai 2020, le jour travaillé suivant saute bien au 2 Juin. En tirant la poignée vers le bas, pour le Lundi 1
er Juin, le jour ouvrable suivant est toujours le 2 Juin, d'où la répétition. La logique est la même pour expliquer la redondance du Lundi 8 Juin, répété trois fois. A partir du Vendredi 5 juin, à cause du Week-End, le prochain jour travaillé saute bien au Lundi 8, idem pour le samedi et le dimanche qui suivent.
Repérer les dates uniques
Avant de pouvoir restituer l'enchaînement des
dates travaillées en colonne B du
planning, il nous reste un dernier calcul intermédiaire. Il s'agit de répliquer une technique que nous avions mise en oeuvre dans la
formation Excel pour supprimer les doublons. Cette technique consiste à repérer chaque valeur unique à l'aide d'un
numéro incrémenté. Ces numéros serviront alors et enfin à extraire les
dates uniques pour la
construction automatique du planning.
L'astuce consiste à compter la présence d'une date sur une plage de cellules. La fonction usuelle de dénombrement est
Nb.Si. Sa syntaxe est la suivante :
=Nb.Si(Plage_de_cellules ; Valeur_Ã _compter)
La plage de cellules doit progresser en même temps que le calcul est répliqué. En effet, une date ne peut être repérée que si elle n'a jamais été comptabilisée auparavant, attestant qu'elle est unique. Si nous appliquions la
fonction Nb.Si sur toute la colonne S, chaque date serait d'ores et déjà comptée au moins une fois. La valeur à compter est bien sûr la date à repérer. Il s'agit de celle qui figure sur la même ligne que celle du calcul.
Ce repère numérique ne doit être posé que si la date n'a jamais été comptabilisée. Il s'agit de vérifier un critère mettant en jeu la fonction Nb.Si et la valeur qu'elle retourne (>0 ?). Un test peut être vérifié dans
Excel grâce à la
fonction Si. Le
petit livre pour débuter les calculs présente cette fonction conditionnelle au travers d'exercices. Selon la validité du critère, un numéro incrémenté doit être inscrit. L'astuce consiste à exécuter la
fonction Excel Max, là encore, sur une plage de cellules qui progresse en même temps que le calcul. La
fonction Max retourne la valeur la plus grande d'une plage de cellules. Si nous incrémentons ce résultat d'une unité (+1) à chaque repérage, nous obtiendrons ces numéros. Ils permettront de marquer de façon évidente chaque date unique.
Par esprit de cohérence, nous proposons d'établir ce dernier calcul intermédiaire dans la colonne suivante, en colonne T à partir de la cellule T3 plus précisément.
- Sélectionner la première cellule pour le calcul de repérage, soit T3,
- Taper le symbole = pour débuter la formule,
- Saisir le nom de la fonction conditionnelle, suivi d'une parenthèse, soit Si(,
- Saisir le nom de la fonction de dénombrement suivi d'une parenthèse, soit Nb.Si(,
- Cliquer sur la première cellule au-dessus des jours ouvrables, soit S2,
- Taper le symbole deux points (:) pour générer la plage S2:S2,
- Figer seulement la première des deux, ce qui donne : $S$2:S2,
Nous démarrons ainsi l'analyse du décompte sur une plage de cellules qui ne représente que la cellule S2 au départ. Elle ne contient aucune date. Sa borne supérieure est figée tandis que sa borne inférieure ne l'est pas. Donc, lorsque nous tirerons la poignée du calcul vers le bas, cette plage progressera en hauteur, intégrant les dates à compter, au fur et à mesure. C'est ainsi que nous saurons s'il s'agit d'une nouvelle et qu'elle doit être repérée.
- Taper un point-virgule (;) pour passer dans l'argument de la valeur à compter,
- Sélectionner la première des dates ouvrables, soit la cellule S3,
- Fermer la parenthèse de la fonction Nb.Si,
- Taper le symbole supérieur suivi du chiffre 0, soit : >0, pour établir le critère à vérifier,
- Taper un point-virgule (;) pour passer dans la branche Alors de la fonction Si,
- Saisir deux guillemets ('') pour ne pas repérer la date lorsqu'elle est déjà connue,
- Taper un point-virgule (;) pour passer dans la branche Sinon de la fonction Si,
- Saisir le nom de la fonction retournant la plus grande valeur, suivi d'une parenthèse, soit Max(,
- Sélectionner la première cellule au-dessus du calcul, soit T2,
- Taper le symbole deux points (:) pour générer la plage T2:T2,
- Comme précédemment figer uniquement sa borne supérieure, ce qui donne : $T$2:T2,
Ainsi, au fur et à mesure de la progression du calcul, nous récupèrerons la dernière valeur générée, car la plus grande. Il ne nous reste justement plus qu'à incrémenter.
- Fermer la parenthèse de la fonction Max,
- Ajouter une unité à ce résultat, soit : +1,
- Fermer la parenthèse de la fonction Si,
- Valider la formule par le raccourci clavier CTRL + Entrée pour conserver la cellule active,
- Double cliquer sur la poignée du résultat pour répliquer la logique sur toutes les dates,
Comme vous le constatez, des numéros incrémentés apparaissent mais pas partout, fort heureusement. A chaque fois qu'une date est répétitive, la cellule du calcul reste muette grâce aux deux guillemets (''), déclenchés dans la branche Alors de la fonction Si. Le critère sur la
fonction Nb.Si a été vérifié (>0). Dans le cas contraire, c'est la branche Sinon qui se déclenche. Et la
fonction Max incrémentée sur la plage de cellules grandissante, fait son oeuvre. A chaque fois qu'une nouvelle date est repérée, elle est marquée par le dernier numéro, incrémenté d'une unité.
La formule que nous avons construite est la suivante :
=SI(NB.SI($S$2:S2;S3)>0; ''; MAX($T$2:T2)+1)
Désormais, chaque date travaillée est repérée de façon unique. Les Week-end, jours féries et congés sont exclus. Il s'agit d'exploiter ces marques pour extraire les dates correspondantes afin de générer automatiquement le
planning du salarié.
Extraire les dates sans doublons
Trois calculs intermédiaires ont donc été nécessaires pour préparer le
calcul d'extraction. L'objectif est d'effectuer la recherche des numéros incrémentés pour restituer la date repérée sur la même ligne. La
formation Excel sur l'extraction des données d'une référence, nous avait appris ces techniques. Il s'agit d'
imbriquer les fonctions de recherche Index et Equiv, selon les syntaxes respectives suivantes :
=Index(Tableau_de_recherche ; Numéro_de_ligne ; Numéro_de_colonne)
=Equiv(Valeur_cherchée ; Colonne_de_recherche ; 0)
La
fonction Index permet d'extraire une information située au croisement d'une ligne et d'une colonne, dans un tableau de recherche. Le tableau de recherche correspond aux deux colonnes énumérant les dates ouvrables et leurs numéros incrémentés, soit la
plage S:T. Le numéro de colonne est connu. La date à extraire est située dans la première des deux.
L'indice de ligne dépend en revanche de la position des numéros incrémentés. En deuxième argument de la
fonction Index, c'est l'imbrication avec la
fonction Equiv qui doit retourner cette information dynamique. La valeur cherchée est ce numéro incrémenté. Pour précisément qu'il suive l'incrémentation en même temps que le calcul est répliqué, nous effectuerons la recherche de :
Ligne(A1). La
fonction Excel Ligne retourne l'indice de ligne d'une cellule qui lui est passée en paramètre. La cellule A1 est située sur la première ligne. Donc la
fonction Ligne retournera 1, puis 2, 3 etc..., au fur et à mesure que le calcul est répliqué et que A1 devient A2, A3 etc...
Cette valeur doit être cherchée dans une colonne, plus précisément la colonne T, celle des numéros incrémentés. Le dernier argument de la
fonction Equiv est réglé à 0. C'est ainsi que la recherche est effectuée selon une correspondance exacte.
Cette formule doit débuter dans la première cellule des dates du planning, soit en B5.
- Sélectionner la cellule B5 et taper le symbole = pour débuter le calcul,
- Saisir le nom de la fonction d'extraction suivi d'une parenthèse, soit Index(,
- Sélectionner les deux colonnes du tableau de recherche par leurs étiquettes, ce qui donne S:T,
- Taper un point-virgule (;) pour passer dans l'argument de l'indice de ligne,
- Saisir la fonction indiquant la ligne d'une valeur cherchée, suivie d'une parenthèse, soit Equiv(,
- Saisir la fonction donnant la ligne d'une cellule suivie d'une parenthèse, soit Ligne(,
- Sélectionner une cellule de la première ligne sur la feuille, par exemple A1,
- Fermer la parenthèse de la fonction Ligne,
- Taper un point-virgule (;) pour passer dans l'argument de la colonne de recherche,
- Désigner la colonne des numéros incrémentés, ou saisir ses références, soit T:T,
- Taper un point-virgule suivi du chiffre 0, soit : ;0, pour une correspondance exacte,
- Fermer la parenthèse de la fonction Equiv,
- Taper un point-virgule (;) pour passer dans l'argument de la colonne de la fonction Index,
- Saisir le chiffre 1 pour désigner la première colonne du tableau de recherche, soit les dates,
- Fermer la parenthèse de la fonction Index,
- Valider le calcul par CTRL + Entrée,
- Puis tirer la poignée de la cellule sur une trentaine de lignes vers le bas,
Les dates uniques sont toutes rapatriées et le planning se construit. Vous remarquez l'absence des jours de Week-End notamment.
La formule d'extraction que nous avons construite est la suivante :
=INDEX(S:T; EQUIV(LIGNE(A1); T:T; 0); 1)
Pour la construction du planning, vous avez de même noté l'apparition automatique du quadrillage. Il s'agit d'une
règle de mise en forme conditionnelle, créée en amont. Elle consiste à appliquer des bordures aux cellules, sur la largeur du tableau, lorsqu'une date est détectée dans la colonne B. La règle de base est la suivante :
=$B5<>''
La condition est toujours vérifiée sur la présence de la date. Donc la cellule est figée en colonne. Pour que le quadrillage puisse se construire sur les autres lignes, la même condition doit être vérifiée. Donc nous avons défigé la cellule du critère en ligne.
- A l'aide de la liste déroulante en B2, choisir cette fois le mois de Mai,
Comme vous le constatez, le
planning des jours travaillés se recompose automatiquement. En 2020, la première date tombe un Lundi 4 mai. Le vendredi 1
er Mai, veille de Week-End, est donc bien exclu. Il en va de même pour le Vendredi 8 Mai et le Jeudi 21 Mai.
Pour que les congés puissent être interprétés, dans notre cas, il convient de modifier l'année 2018 par 2020, dans les dates référencées sur la seconde feuille.
Dans une prochaine formation, nous aboutirons ce
planning de travail. Nous proposerons le choix de l'année ainsi que le choix du salarié dans des listes déroulantes. Les congés du salarié ainsi désigné, seront automatiquement considérés par les calculs pour la
construction du planning. Bien sûr, il s'agira aussi de limiter l'énumération des dates à celle du mois sélectionné.
Dernière remarque, l'intégration du calcul d'extraction dans une fonction de gestion d'erreur est judicieuse. Elle permet d'éviter les mauvaises surprises lorsqu'aucune date n'est sélectionnée par exemple.
=SIERREUR(INDEX(S:T; EQUIV(LIGNE(A1); T:T; 0); 1); '')