Pour partager cette vidéo sur les réseaux sociaux ou sur un site, voici son url :
Sujets que vous pourriez aussi aimer :Jours de semaine entre deux dates
Dans ce cas pratique, nous allons démontrer comment il est possible de restituer toutes les
dates d'un
jour de semaine précis, pour une période variable définie par l'utilisateur.
Dans l'exemple illustré par la capture, l'utilisateur définit une période débutant le 1
er Avril 2020 et s'achevant le 30 Mai 2020. De même, il choisit le
jour de semaine 5, soit le
Vendredi. Et aussitôt, un calcul restitue les
dates de tous les
Vendredis situés entre ces deux bornes. C'est une
technique matricielle qui apporte la solution.
Source et présentation
Nous proposons tout d'abord de récupérer une petite structure existante pour simplifier les travaux.
L'extraction des
dates doit intervenir en colonne E, à partir de la cellule E5. Cette extraction dépend de trois contraintes. Il s'agit tout d'abord de la
date de début à renseigner en cellule C5. Il s'agit ensuite de la
date de fin à inscrire en cellule C7. Enfin, il s'agit de spécifier le
numéro de semaine, grâce à une liste déroulante en cellule C9. D'ailleurs, en modifiant ce numéro de semaine, vous constatez que le jour correspondant est automatiquement inscrit en toutes lettres juste en-dessous, en cellule C10. Il existe un petit tableau de correspondance entre ces numéros et les jours sur la droite de la feuille, entre les colonnes S et T. En C10, l'extraction du jour en texte est réalisée grâce à la
fonction RechercheV :
=SIERREUR(RECHERCHEV(C9; S2:T8; 2; FAUX); '')
Extraire les dates d'un jour de semaine
Nous le disions, pour restituer toutes les dates d'un jour de semaine sur une période définie, des
techniques matricielles sont nécessaires. L'idée consiste à agir sur une
matrice virtuelle représentant toutes les
dates dans l'intervalle. Sur cette
matrice, un critère doit vérifier les correspondances trouvées avec le
jour de semaine spécifié. Les
fonctions Si et
JourSem doivent être impliquées dans ce
raisonnement matriciel. De plus, pour que ces dates soient regroupées, la
fonction Petite.Valeur est incontournable.
- Sélectionner la plage de cellules E5:E14,
- Taper le symbole égal (=) pour initier la formule matricielle,
- Inscrire la fonction de gestion des anomalies suivie d'une parenthèse, soit : SiErreur(,
Arbitrairement, nous décidons de restituer 10 dates dans l'intervalle défini, ni plus ni moins. Mais il se peut que la période soit raccourcie et que le nombre à afficher soit inférieur. Dans ce cas, pour que la formule répliquée ne génère pas d'erreur, nous décidons de les neutraliser.
- Taper la fonction regroupant les petites valeurs suivie d'une parenthèse, soit : Petite.Valeur(,
Cette extraction croissante des dates correspondantes regroupées est soumise à critère.
- En conséquence, inscrire la fonction conditionnelle suivie d'une parenthèse, soit : Si(,
Ces correspondances doivent être établies sur les jours de semaine.
- Inscrire la fonction pour le jour de semaine d'une date suivie d'une parenthèse, soit : Joursem(,
Bien entendu, ce sont toutes les dates qui doivent être analysées. Nous n'allons donc pas lui passer une seule date mais la
matrice virtuelle représentant toutes les dates comprises dans l'intervalle défini. C'est la
fonction Ligne avec les bornes inférieures et supérieures qui permet de simuler cette
matrice.
- Inscrire cette fonction suivie d'une parenthèse, soit : Ligne(,
Nous le disions cette
matrice est virtuelle. Nous allons la construire de toutes pièces en transmettant ses bornes par l'intermédiaire des cellules pour la date de début et la date de fin. Elle doit donc être interprétée.
- Inscrire la fonction d'interprétation suivie d'une parenthèse, soit : Indirect(,
- Inscrire les coordonnées de la date de début, soit C5,
Ainsi, nous définissons la borne supérieure pour la
matrice des dates à analyser.
- Taper le symbole de concaténation (&) pour poursuivre la construction de la matrice,
- Inscrire le symbole deux points entre guillemets, soit : ':',
Ainsi, nous annonçons la borne inférieure à suivre pour finaliser la construction de la
matrice.
- Taper de nouveau le symbole de concaténation, soit : &,
- Désigner la date de fin en cliquant sur sa cellule C7,
- Fermer la parenthèse de la fonction Indirect,
- Puis, fermer la parenthèse de la fonction Ligne,
- Taper un point-virgule (;) pour passer dans le second argument de la fonction JourSem,
- Saisir le chiffre 2 pour raisonner sur le calendrier français,
Ainsi, la
fonction JourSem considère le
Lundi comme le premier
jour de la semaine. Par défaut, elle raisonne sur le calendrier américain. Et dans ce contexte, c'est le
Dimanche qui est considéré comme le premier
jour de la semaine.
- Fermer la parenthèse de la fonction JourSem,
- Taper le symbole égal (=) pour l'égalité du critère à honorer,
- Puis, cliquer sur la cellule C9 pour désigner le numéro de semaine choisi,
De cette manière, nous cherchons toutes les
dates de cette
matrice virtuelle pour lesquelles le
numéro de semaine est identique à celui défini par l'utilisateur avec la liste déroulante.
- Taper un point-virgule (;) pour passer dans la branche Alors de la fonction Si,
- Reconstruire exactement la même matrice que celle du critère : Ligne(Indirect(C5 & ':' & C7)),
Nous désignons donc de nouveau la
matrice de toutes les dates comprises entre la borne de départ et la borne de fin. Mais comme elle est soumise à la condition de la
fonction Si, seules les dates concordant avec le
numéro de semaine seront retenues. De plus, comme elle est inscrite dans la
fonction Petite.Valeur, le rang de cette dernière va permettre de les extraire certes dans l'ordre croissant, mais surtout de façon regroupée.
- Fermer la parenthèse de la fonction Si,
Sa branche Sinon est ainsi ignorée. Les non concordances ne nous intéressent pas.
- Taper un point-virgule (;) pour passer dans l'argument du rang de la fonction Petite.Valeur,
- Saisir alors la syntaxe suivante : {1;2;3;4;5;6;7;8;9;10},
Les accolades sont prépondérantes. Ce sont elles qui définissent une
matrice de rangs à respecter dans ce
raisonnement matriciel. En partant de la plus petite valeur, nous indiquons que nous souhaitons tout d'abord extraire la date correspondante la plus petite, et les suivantes jusqu'à la dixième.
- Fermer la parenthèse de la fonction Petite.Valeur,
- Taper un point-virgule (;) pour passer dans le second argument de la fonction SiErreur,
- Inscrire deux guillemets, soit : '', pour neutraliser les anomalies si elles apparaissent,
- Puis, fermer la parenthèse de la fonction SiErreur,
- Enfin, valider cette formule matricielle par le raccourci clavier CTRL + MAJ + Entrée,
Toutes les
dates apparaissent. Comme vous pouvez le voir, elles correspondent toutes au
jour de semaine choisi. De plus, elles appartiennent toutes à l'intervalle défini par les bornes de la période. La syntaxe de la
formule matricielle que nous avons construite est la suivante :
=SIERREUR(PETITE.VALEUR(SI(JOURSEM(LIGNE(INDIRECT(C5 & ':' & C7)); 2)=C9; LIGNE(INDIRECT(C5 & ':' & C7))); {1; 2; 3; 4; 5; 6; 7; 8; 9; 10}); '')
Bien sûr, si vous changez le
numéro du jour de la semaine, les résultats s'actualisent parfaitement pour offrir toutes les
dates correspondantes, à l'intérieur de la période définie.