4 METHODES POUR INSERER LA DATE DU JOUR RAPIDEMENT DANS UNE CELLULE SUR EXCEL (avec et sans VBA)
Dans ce tutoriel, je vais dans un premier temps vous montrer les différentes méthodes qui permettent d’insérer automatiquement la date du jour, ainsi que l’heure actuelle dans une cellule Excel. Puis dans une seconde partie, nous verrons comment enregistrer les heures de réalisation des évènements intervenant sur le classeur (enregistrement, ouverture, impression,...)
Téléchargement
Vous pouvez télécharger le fichier d'exemple de cet article en cliquant sur le lien suivant :
Tutoriel Vidéo
Partie 1 : 4 METHODES POUR INSERER LA DATE DU JOUR RAPIDEMENT DANS UNE CELLULE SUR EXCEL (avec et sans VBA) (voir le tutoriel)
Partie 2 : ENREGISTRER LES HEURES DE REALISATION DES EVENEMENTS SUR LES FEUILLES EXCEL (voir le tutoriel)
1. Les formules AUJOURDHUI() et MAINTENANT()
TÉLÉCHARGER LE SUPPORT DE CE COURS
Vous trouverez très régulièrement de nouvelles vidéos sur la chaîne, alors pensez à vous abonner pour ne manquer aucune astuce et devenir rapidement un pro d’Excel (cliquez-ici) !
______________________________________________
La méthode la plus simple pour insérer la date du jour dans une cellule est d’utiliser la fonction dédiée d’EXCEL : il s’agit de la fonction AUJOURDHUI().
Celle-ci se contente de renvoyer simplement la valeur qui correspond, et a pour particularité de ne nécessiter aucun argument !
=AUJOURDHUI()
Et voici le résultat :
Comme vous pouvez le constater, EXCEL en plus de simplement valider le résultat de la formule en a également déduit qu’il s’agissait d’une date et adapté le formatage de la cellule afin de faire apparaître celle-ci sous le bon format (jj/mm/aaaa).
Une autre particularité de la formule AUJOURDHUI(), c’est que celle-ci est dynamique ! En d’autres termes, celle-ci va s’actualiser à chaque recalcul ou ouverture du classeur.
Ici, nous avons simplement ouvert le classeur le lendemain pour constater que la date insérée dans la cellule a été modifiée !
Il existe encore une autre fonction, qui permet tout comme la fonction AUJOURDHUI() de récupérer la date du jours, mais qui en plus affiche l’heure. Il s’agit de la fonction MAINTENANT() :
=MAINTENANT()
Ici encore la fonction MAINTENANT() n’attend aucun argument pour fonctionner, et le format appliqué à la cellule permet de visionner simplement le résultat avec le formatage adéquat :
2. Construire une formule AUJOURDHUI() non dynamique
Parfois il se peut que le caractère dynamique de la fonction AUJOURDHUI() ne corresponde pas au résultat souhaité.
En effet, imaginons que nous souhaitions insérer la date du jour et l’heure dans une cellule afin de dater le début de remplissage d’un document.
Si nous travaillons plusieurs jours sur ce même document, nous ne souhaiterons évidemment pas que la valeur de cette cellule s’actualise lors de chacune de ces journées.
Malheureusement, le fonctionnement de la fonction AUJOURDHUI() (tout comme la fonction MAINTENANT()), ne permet pas d’arriver à ce résultat, celles-ci n’acceptant aucun paramètre.
Nous allons donc devoir construire notre propre fonction personnalisée, en la développant en VBA.
Pas d’inquiétude, nous verrons que celle-ci ne soulève aucune difficulté particulière, même pour les plus grands débutants de VBA. Mais bien évidemment si vous souhaitez apprendre à maîtriser le langage VBA, je vous invite à suivre la formation gratuite d’excelformation.fr en suivant ce lien.
Pour commencer, nous lançons l’éditeur de code VBA, en utilisant une des 13 méthodes que nous avons détaillé dans le chapitre 8 : « COMMENT LANCER UNE MACRO VBA », par exemple cliquant sur le bouton Visual Basic du menu développeur :
Ensuite nous insérons un nouveau module dans lequel nous saisirons la fonction qui sera ainsi accessible dans l’ensemble des feuilles de calcul du classeur (Menu Insertion > Module) :
Et enfin, nous créons la fonction personnalisée, en utilisant le mot-clé Function suivi du nom de la fonction (ici nous l’appellerons AUJOURDHUI_STATIC) :
Function AUJOURDHUI_STATIC()
End Function
Nous validons la création de la fonction en appuyant simplement sur la touche [Entrée] du clavier.
L’éditeur va alors ajouter automatiquement les parenthèses en fin de ligne, ainsi que la commande End Function qui permet de terminer celle-ci !
En VBA, l’équivalent de la fonction EXCEL MAINTENANT() est la fonction Now.
Nous n’avons donc besoin que d’une seule ligne d’instruction qui consiste à appliquer la valeur retournée par Now sur la fonction personnalisée, et pour cela nous utilisons simplement le symbole d’égalité (« = ») :
Function AUJOURDHUI_STATIC()
AUJOURDHUI_STATIC = Now
End Function
Ensuite, pour utiliser la fonction dans la feuille calcul, nous procédons comme pour n’importe quelle autre fonction (nous tapons simplement le symbole égal, suivi du nom de la fonction) :
Puis nous validons en appuyant sur la touche [Entrée] du clavier :
Ensuite, nous pouvons relancer le calcul de la feuille de calcul en appuyant sur la touche [F9] du clavier afin de constater que la cellule ne sera pas modifiée, au contraire de la cellule située juste au-dessus qui contient la fonction AUJOURDHUI() :
Pour forcer l’actualisation de la valeur, il suffit de cliquer dans la barre des formules (ou d’appuyer sur la touche [F2]), puis de valider à nouveau la formule en appuyant une fois encore sur la touche [Entrée] du clavier :
3. Créer un bouton pour insérer la date
Maintenant voyons une nouvelle méthode pour insérer automatiquement la date du jour dans la cellule active, en cliquant cette fois-ci simplement sur un bouton présent dans la feuille de calcul !
Pour cela, commençons par insérer le bouton en question en dessinant un simple rectangle (menu Insertion > Formes > Rectangle) :
Après avoir dessiné le rectangle, nous effectuons un clic-droit, afin de choisir l’option Modifier le texte, ce qui nous permet d’afficher un texte sur le bouton :
Ensuite, nous revenons dans l’éditeur de code pour y insérer la procédure suivante, juste en dessous de la fonction personnalisée que nous avons saisie dans la partie précédente :
Sub insererDateEtHeure()
ActiveCell = Now
End Sub
Celle-ci se contente d’entrer la valeur retournée par la fonction Now (la date et l’heure actuelle) directement dans la cellule active, elle-même récupérée par ActiveCell.
Il suffit ensuite de lier le bouton à cette macro en effectuant un nouveau clic-droit, pour cette fois-ci sélectionner Affecter une macro.
Et dans la fenêtre qui s’affiche, nous choisissons la nouvelle macro en double-cliquant sur son nom :
À présent, il suffit de sélectionner une cellule, puis de cliquer sur le bouton « Insérer la date et l’heure » pour saisir directement la valeur de la date et de l’heure dans la cellule :
Pour n’obtenir que la date, il suffit de modifier le formatage de la cellule (par exemple en Date courte) :
4. Insérer la date en une fraction de seconde avec les raccourcis clavier !
Je ne le répèterai jamais assez, mais les raccourcis claviers permettent de gagner énormément de temps !
Et comme nous l’avions déjà découvert dans l’article dédié, il se trouve justement qu’Excel propose deux raccourcis claviers qui permettent d’insérer la date dans une cellule :
- Insérer la date : utilisez la combinaison [Ctrl]+[;]
- Insérer l’heure : utilisez la combinaison [Ctrl]+[:]
Comme la méthode précédente, ces raccourcis clavier permettent d’insérer la date « en dure » dans la cellule et donc de ne pas la mettre à jour d’une ouverture ultérieure.
5. Horodater les évènements importants du classeur
TÉLÉCHARGER LE SUPPORT DE CE COURS
Vous trouverez très régulièrement de nouvelles vidéos sur la chaîne, alors pensez à vous abonner pour ne manquer aucune astuce et devenir rapidement un pro d’Excel (cliquez-ici) !
______________________________________________
Maintenant que nous avons vu en détail comment insérer dynamiquement la date du jour ainsi que l’heure actuel dans une cellule, voyons comment exploiter cela pour enregistrer dans une feuille de calcul tous les évènements importants intervenant au sein d’un classeur.
Pour cela, nous allons exploiter le classeur mis en place au cours des parties précédentes (que je vous invite à télécharger en vous rendant en haut de cet article).
Pour commencer créons une nouvelle feuille de calcul au sein de ce classeur en cliquant simplement sur le petit bouton plus en bas à gauche :
Appelons cette feuille : « logs » :
Ensuite, nous saisissons simplement un titre à cette feuille de calcul, ainsi que les titres des deux colonnes du tableau dans lequel nous insèrerons nos relevés d’évènement :
Pour insérer simplement des entrées dans ce tableau, nous allons le convertir en tableau de donnée (pour connaître tous les avantages des tableaux de données, je vous invite à suivre le tutoriel dédié sur excelformation.fr en cliquant ici).
Pour créer le tableau, nous sélectionnons simplement une des deux cellules de titre, puis nous nous rendons dans le menu Insertion du ruban > Tableau :
Excel nous affiche alors la fenêtre suivante :
Dans cette fenêtre, nous retrouvons les coordonnées du tableau, puis nous cochons la case Mon tableau comporte des en-têtes afin de spécifier à Excel que les deux cellules correspondantes sont effectivement des cellules de titres.
Enfin, nous validons la création du tableau en appuyant sur le bouton [OK] :
À ce moment-là, nous nous retrouvons effectivement avec un nouveau tableau de données structurées, qui évidemment ne contient encore aucune ligne en dehors de la ligne des titres de colonne.
Il ne nous reste plus qu’à donner un nom clairement explicite à ce tableau, afin de pouvoir le remplir simplement à partir de VBA (menu Création du ruban, qui n’apparaît que lorsqu’une des cellule du tableau est sélectionnée, puis saisir le nom dans la zone de saisie située tout à gauche, et enfin nous validons le nom en appuyant sur la touche [Entrée] du clavier) :
Et voilà, notre tableau est maintenant prêt à être alimenté à partir des différents évènements importants intervenants sur la feuille de calcul.
En VBA, un événement permet de lancer automatiquement une ou plusieurs instructions lorsque quelque chose se passe au sein d’un classeur ou plus particulièrement dans une feuille de calcul.
Pour connaître l’ensemble des évènement à disposition, rendons nous dans le code du classeur au sein de VBE en double cliquant sur l’objet ThisWorkbook à partir de la fenêtre d’exploration du Projet :
Si la fenêtre d’exploration du projet n’est pas affichée, rendez-vous dans le menu Affichage afin de cliquer sur le menu Explorateur de projets :
Cela étant fait, nous choisissons l’option Workbook depuis le premier menu déroulant situé au-dessus de la feuille de code :
Et ensuite, nous pouvons découvrir tous les évènements disponibles directement depuis le second menu :
Le premier évènement qui va nous intéresser est l’évènement Open. Celui-ci sera en effet instancié à chaque fois que le classeur va être ouvert.
Nous cliquons simplement sur Open et la procédure suivante va alors s’ajouter automatiquement dans la feuille de code :
Private Sub Workbook_Open()
End Sub
Et c’est à l’intérieur de cette procédure que nous allons maintenant pouvoir saisir les lignes de code qui vont nous permettre d’enregistrer l’heure d’ouverture du fichier.
Pour cela, nous utilisons simplement l’instruction ListRows.Add depuis le tableau structuré que nous avions appelé _logs.
Voici la ligne de code à ajouter dans l’évènement Workbook_Open :
With Sheets("logs").ListObjects("_logs").ListRows.Add
.Range(1) = "Ouverture du classeur"
.Range(2) = Now
End With
Si cette partie de code vous parait relativement obscure, ne vous en faites pas, nous reviendrons très bientôt sur la gestion des tableaux structurés depuis VBA dans un tutoriel.
À présent, nous pouvons tester l’évènement, en relançant le fichier de travail (après avoir évidemment enregistré celui-ci avant de le fermer).
Comme vous pouvez alors le constater, l’heure d’ouverture a bien été enregistrée :
Ensuite, nous pouvons répéter l’opération pour les autres évènements :
- Enregistrer les heures d’enregistrement : Workbook_BeforeSave
- Lancement d’une impression : Workbook_BeforePrint
- Fermeture du classeur : Workbook_BeforeClose
Private Sub Workbook_BeforeClose(Cancel As Boolean)
With Sheets("logs").ListObjects("_logs").ListRows.Add
.Range(1) = "Fermeture du classeur"
.Range(2) = Now
End With
End Sub
Private Sub Workbook_BeforePrint(Cancel As Boolean)
With Sheets("logs").ListObjects("_logs").ListRows.Add
.Range(1) = "Impression"
.Range(2) = Now
End With
End Sub
Private Sub Workbook_BeforeSave(ByVal SaveAsUI As Boolean, Cancel As Boolean)
With Sheets("logs").ListObjects("_logs").ListRows.Add
.Range(1) = "Enregistrement du classeur"
.Range(2) = Now
End With
End Sub
Pour aller encore un niveau plus loin, nous pouvons également enregistrer le nom de la personne qui effectue l’opération.
Pour cela, nous commençons par ajouter une troisième colonne dans notre tableau que nous appelons Utilisateur :
Puis, dans chacun des évènements, nous ajoutons la ligne suivante qui permet d’enregistrer dans cette troisième colonne le nom de l’utilisateur :
.Range(3) = Application.UserName
Il est également possible d’enregistrer des évènements en rapport non plus avec le classeur, mais plus spécifiquement sur une feuille de calcul.
Par exemple, supposons que nous voulions logger les modifications intervenant sur la cellule de la feuille
Cette fois-ci, nous récupérons l’évènement propre à cette feuille en cliquant sur celle-ci depuis l’explorateur de projets :
Puis, nous sélectionnons l’évènement Change de l’objet Worksheet :
Cet évènement Worksheet_Change est vraiment bien conçu, car celui nous transfert une variable Target qui contient la ou les cellules qui ont subi le changement :
Private Sub Worksheet_Change(ByVal Target As Range)
End Sub
Pour commencer, nous allons pouvoir analyser celle-ci afin de contrôler qu’il s’agisse bien de la cellule B15 qui nous intéresse :
If Target = Range("b15") Then
End If
Et seulement lorsque tel est le cas, nous pourrons enregistrer l’heure de la modification, exactement comme nous l’avons fait juste avant :
Private Sub Worksheet_Change(ByVal Target As Range)
If Target = Range("b15") Then
With Sheets("logs").ListObjects("_logs").ListRows.Add
.Range(1) = "Modification de la cellule B15"
.Range(2) = Now
.Range(3) = Application.UserName
End With
End If
End Sub
Si en revanche, nous souhaitons connaître les heures de toutes les modifications, alors il suffirait de retirer le test If et d’enregistrer les coordonnées de la cellule modifiée grâce à la propriété Adresse de la variable Target (qui est bien évidemment typée en tant que Range) :
With Sheets("logs").ListObjects("_logs").ListRows.Add
.Range(1) = "Modification de la cellule " & Target.Address
.Range(2) = Now
.Range(3) = Application.UserName
End With