Comment obtenir efficacement le numéro de semaine d’une date donnée sur Excel ?
Dans ce tutoriel, je vais vous montrer comment obtenir le numéro d'une semaine à partir d’une date donnée dans Excel en évitant les erreurs fréquentes.
Cette fonctionnalité est très pratique pour organiser et analyser des données temporelles, mais il y a quelques pièges à connaître.
Suivez les étapes ci-dessous pour maîtriser l'utilisation des numéros de semaine dans Excel.
Téléchargement
Vous pouvez télécharger le fichier d'exemple de cet article en cliquant sur le lien suivant :
Tutoriel Vidéo
1. Les deux fonctions pour retourner le numéro de semaine
Comme nous venons de le voir dans l’introduction de ce tutoriel, nous allons maintenant découvrir comment obtenir le numéro de la semaine qui correspond à une date donnée.
Pour cela, Excel nous met à disposition deux fonctions.
La première d'entre elles est la fonction NO.SEMAINE(date;paramètre), qui existe depuis toujours dans Excel, mais qui suit le système de comptage des semaines utilisé aux États-Unis lequel ne suit pas tout à fait celui utilisé en France et dans d'autres pays européens.
Pour remédier à cette différence, Microsoft a introduit à partir d'Excel 2013 une nouvelle fonction appelée NO.SEMAINE.ISO(date). Cette fonction a été créée pour respecter la norme ISO 8601 du comptage des semaines, largement adoptée en Europe, qui prévoit que la première semaine de l'année doit avoir au moins 4 jours pour être rattachée sur cette année.
En d’autres termes, les jours du week-end (vendredi, samedi, dimanche) ne sont pas considérés comme appartenant à la première semaine d’une année donnée, contrairement au système de comptage utilisé en Amérique du Nord, où les numéros de semaine commencent dès le 1er janvier, quel que soit le jour de la semaine.
Cette différence sera donc une source d'erreur dans le cadre d'un calcul de numéros de semaine pour les années pour lesquelles la première semaine n'a pas encore 4 jours complets, c'est-à-dire pour lesquelles le 1er janvier tombe un vendredi, un samedi ou un dimanche.
2. La fonction NO.SEMAINE
Pour commencer, découvrons la fonction NO.SEMAINE().
Celle-ci permet comme nous venons de le voir d'obtenir le numéro de semaine à partir d'une date donnée. Elle est utilisée pour effectuer des calculs et des analyses basés sur des semaines, tels que les rapports hebdomadaires, la planification ou la gestion de projets.
La fonction NO.SEMAINE s'utilise de la manière suivante :
=NO.SEMAINE(date;paramètre)
Où :
- Date représente la date pour laquelle vous souhaitez obtenir le numéro de semaine.
- Paramètre est un argument facultatif qui permet de spécifier le système de comptage des semaines à utiliser. Si ce paramètre est omis, Excel utilise le système de comptage des semaines basé sur les normes américaines, c’est-à-dire en considérant des semaines commençant le dimanche, et se terminant le samedi.
=NO.SEMAINE(A9)
Pour une semaine du lundi au dimanche, nous utiliserons l’argument facultatif paramètre auquel nous affectons la valeur « 2 ».
=NO.SEMAINE(A9;2)
Ensuite, nous pouvons étendre la formule sur toutes les cellules de la colonne en double-cliquant sur la poignée de recopie, située en bas à droite de la cellule B9 :
Comme vous pouvez le constater, les 1er janvier des années 2023 et 2024 est considéré par la fonction NO.SEMAINE comme faisant partie de la première des semaines de ces années.
3. La fonction NO.SEMAINE.ISO
Maintenant, explorons la fonction NO.SEMAINE.ISO(), laquelle permet comme nous venons de le voir elle aussi d'obtenir le numéro de semaine à partir d'une date donnée, mais en respectant les règles spécifiques de la norme ISO 8601 pour le calcul des semaines.
La fonction NO.SEMAINE.ISO s'utilise de la même manière que la fonction NO.SEMAINE, à la différence qu’elle n’a pas d’argument facultatif « Paramètre », elle utilisera systématiquement des semaines du lundi au dimanche :
=NO.SEMAINE.ISO(date)
Où « date » représente la date pour laquelle vous souhaitez obtenir le numéro de semaine.
=NO.SEMAINE.ISO(A9)
Ici, tous les calculs de l’année 2023 ont systématiquement une semaine de décalage entre la fonction NO.SEMAINE et NO.SEMAINE.ISO, étant donné que celle-ci commence un dimanche.
En revanche, en 2024, les deux fonctions vont retourner des résultats identiques, car le 01/01/2024 tombe un lundi.
Comme vous pouvez le constater, il est donc important de choisir la fonction appropriée en fonction de vos besoins et des normes de comptage des semaines de votre région.
Si vous souhaitez suivre la norme ISO 8601, utilisez la fonction NO.SEMAINE.ISO pour garantir que les calculs des numéros de semaine sont conformes aux règles établies.
Cela vous permettra d'obtenir des résultats précis et cohérents, notamment lorsque vous effectuez des comparaisons et des analyses basées sur les numéros de semaine.
4. Utilisation du VBA pour obtenir le numéro de semaine
Si vous souhaitez automatiser le calcul des numéros de semaine dans Excel, vous pouvez utiliser le VBA (Visual Basic for Applications).
Il s’agit d’un langage de programmation intégré dans Excel qui vous permet d'automatiser des tâches et d'interagir avec les fonctionnalités du logiciel, que vous devez bien connaître si vous avez l’habitude de suivre les vidéos de la chaîne.
Ici, nous n’allons utiliser que des fonctionnalités simples de ce langage pour que le tutoriel soit facilement compréhensible par tous, mais si vous souhaitez en savoir davantage, vous pouvez découvrir mon livre dédié à la découverte de VBA pour les grands débutants en suivant ce lien.
Donc, pour obtenir le numéro de semaine en utilisant VBA, nous allons tout d’abord devoir ouvrir l'éditeur VBA (VBE), qui est l’application qui permet de créer, modifier et lancer les macros VBA.
Pour cela, la méthode la plus rapide consiste à utiliser le raccourci clavier [Alt]+[F11].
VBE s’ouvre alors, et nous retrouvons directement le projet sur lequel nous étions en train de travailler, c’est-à-dire le classeur Excel depuis lequel nous avions lancé l’éditeur.
Dans l'éditeur VBA, nous allons commencer par insérer un nouveau module en nous rendant dans le menu "Insertion" dans la barre de menu, afin de sélectionner "Module".
Cela créera un nouveau module dans votre projet VBA, un module étant une feuille dans laquelle nous allons saisir les lignes de code VBA.
Dans ce module, nous allons commencer par créer une nouvelle macro.
Pour créer la macro, il suffit d’utiliser le mot-clé « Sub », suivi du nom de la macro, ici « numeroSemaine ».
Sub numeroSemaine()
'Votre code pour obtenir le numéro de semaine ici
End Sub
Lorsque nous validons la création de celle-ci en appuyant sur la touche [Entrée] du clavier, VBE va ajouter une ligne « End Sub » qui va marquer la fin de la macro.
Tout ce qui se trouve entre ces deux lignes sera exécuté automatiquement à chaque fois que nous appellerons la macro « numeroSemaine ».
Ensuite, nous avons les étapes suivantes :
Pour commencer, nous déclarons une variable nommée « numeroSemaine » en utilisant le mot-clé "Dim" suivi du nom de la variable et du type de données. Dans ce cas, nous utilisons le type "Integer" pour stocker un nombre entier.
Dim numeroSemaine As Integer
Ensuite, nous attribuons à la variable "numeroSemaine" la valeur du numéro de semaine actuel en utilisant la fonction "WeekNum" de l'objet "WorksheetFunction".
Cette fonction prend la date actuelle en utilisant la fonction "Date" et retourne le numéro de semaine correspondant.
numeroSemaine = WorksheetFunction.WeekNum(Date)
Cette fonction « WeekNum » est l’équivalent de la fonction NO.SEMAINE que nous avions découverte un peu plus tôt.
Comme pour cette dernière, nous pouvons utiliser un argument facultatif pour spécifier le type de semaine à utiliser :
numeroSemaine = WorksheetFunction.WeekNum(Date, 2)
Enfin, pour afficher le numéro de semaine dans une boîte de message, nous utilisons la fonction "MsgBox".
MsgBox "Le numéro de semaine actuel est : " & numeroSemaine
Ainsi, lorsque vous exécuterez cette macro, une boîte de message apparaîtra avec le numéro de semaine actuel.
Pour utiliser la fonction équivalente à NO.SEMAINE.ISO et respecter la norme ISO 8601, nous utiliserons la fonction « IsoWeekNum », sans le deuxième argument:
numeroSemaine = WorksheetFunction.IsoWeekNum(Date)