Remplacement du contenu par la date du jour via VBA
RésoluGuy_L Messages postés 176 Date d'inscription Statut Membre Dernière intervention -
Bonjour
J'aimerai créer une macro (VBA Excel) pour remplacer le texte "aujourd'hui" contenu dans des cellules d'une colonne date par la date du jour AUJOURD'HUI().
J'ai essayé avec ceci mais ça ne fonctionne pas
1) attribution de la formule =AUJOURD'HUI() à la cellule A13
2) macro:
Dim jour As Variant jour = Range("A13").Value Selection.Replace What:="aujourd'hui", Replacement:=jour, LookAt:=xlPart, _ SearchOrder:=xlByRows, MatchCase:=False, SearchFormat:=False, _ ReplaceFormat:=False
ou encore
Selection.Replace What:="aujourd'hui", Replacement:=Cell(1,13), LookAt:=xlPart, _ SearchOrder:=xlByRows, MatchCase:=False, SearchFormat:=False, _ ReplaceFormat:=False
Ce n'est sans doute pas la bonne piste. Merci pour votre aide
- Remplacement du contenu par la date du jour via VBA
- Remplacement coco - Accueil - Réseaux sociaux
- Coco.fr remplacement - Accueil - Réseaux sociaux
- Mise a jour chrome - Accueil - Applications & Logiciels
- Mise a jour windows 10 - Accueil - Mise à jour
- Remplacer disque dur par ssd - Guide
7 réponses
Bonjour
Essaies ceci
Public Sub ok() Dim d As Date, f As String d = Range("A13").Value ' recuperation de la formule f = Range("A13").FormulaLocal ' on remplace par la date en dur (du jour ' où la macro est exécutée) If f = "=AUJOURDHUI()" Then Range("A13").Value = d End Sub
Cdlmnt
bonjour,
le texte "aujourd'hui" contenu dans des cellules, c'est bien du texte, pas dans une formule?
Salut yg_be
En lisant ton post, je viens de me rendre compte que mon interprétation de la demande était un brin hasardeuse !!
Deux solutions selon que "aujourd’hui" est tout seul ou mélangé à du texte
https://www.cjoint.com/c/NCzsCoOEIIB
Cdlmnt
Merci ccm81 et yg_be
Je dois repréciser le contexte, car il me semble que le script de ccm81 fait exactement l'inverse de ce que je voudrais faire.
En effet, si je l'ai bien décrypté, il remplace la date obtenue grâce à la formule AUJOURD'HUI() par le texte en dur (à moins que je n'aie pas compris).
En réalité, j'ai une colonne A dans laquelle sont listées des dates.
Au départ, elles sont collectées depuis un site où elles sont écrites de cette manière : 12 janv. 2024 (et c'est du texte pur)
Sauf pour les lignes où la date est la date courante où le mot "aujourd'hui" est à la place de la date (toujours en format texte).
Donc ma première opération a été de remplacer les mois écrits en texte comme ceci : "_avril_" (les _ représentent des espaces) par "/04/". Je l'ai fait pour les 12 mois de l'année et c'est bon.
Restent les lignes avec le mot "aujourd'hui" que je voudrais remplacer par la date courante. D'où le script...
Au final, afin qu'Excel interprète toute la colonne comme des dates, je rajouterai une conversion en dates format JJ/MM/AAAA
Du coup, j'espère avoir répondu implicitement à la question de yg_be.
Merci
Je ne comprends alors pas en quoi la première méthode présentée tout au départ ne fonctionne pas. J'ai testé, et cela fonctionne. D'ailleurs, que se passe-t-il quand tu l'utilises?
On peut d'ailleurs la simplifier, inutile de mettre une formule en A13:
Dim jour As date jour = date Selection.Replace What:="aujourd'hui", Replacement:=jour, LookAt:=xlPart, _ SearchOrder:=xlByRows, MatchCase:=False, SearchFormat:=False, _ ReplaceFormat:=False
Au lieu de d'abord remplacer les mois écrits en texte, puis de chipoter afin qu'Excel comprenne que c'est une date, il est de loin préférable de directement, en VBA, via la fonction dateserial, faire enregistrer une date par Excel.
Tout serait immédiatement beaucoup plus clair si tu partageais ton fichier.
Pour répondre à yg_be, voici le fichier (simplifié car il contient d'autres colonnes et davantage de lignes) https://www.cjoint.com/c/NCAkIUUSSFE
Je n'ai pas compris le sens de cette remarque : "puis de chipoter afin qu'Excel comprenne que c'est une date, il est de loin préférable de directement, en VBA, via la fonction dateserial, faire enregistrer une date par Excel."
il ne s'agit pas de "chipotage", Excel ne sait pas classer des dates qui n'en sont pas. Au mieux il ferait un tri alphabétique, mais ce n'est pas ce qui est recherché.
C'est pourquoi j'ai créé la macro (associée au fichier joint) qui modifie ces libellés en leur donnant un format 26/03/2024.
J'ai essayé les macros communiquées ci-dessus, notamment celle proposée ce jour à 9h52 par yg_be (qui se trouve aussi dans le fichier en lien ci-dessus sous l'appellation "Public Sub simpl()"
Si tu regardes bien, le "aujourd'hui" dans ton code VBA et le "aujourd’hui" dans ton fichier Excel ne sont pas identiques.
Le huitième caractère n'est pas le même.
Depuis le départ, tu écris "ça ne fonctionne pas", sans préciser ce qui se passe. Le replace ne fonctionne tout simplement pas, car tu ne fais pas la recherche du texte correct.
Tu aurais pu aussi simplifier le problème, et tester le code suivant, sans t'encombrer de la date du jour.
Selection.Replace What:="aujourd'hui", Replacement:="?", LookAt:=xlPart, _ SearchOrder:=xlByRows, MatchCase:=False, SearchFormat:=False, _ ReplaceFormat:=False
Ce qui confirme l'utilité de partager le fichier problématique.
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question' la cellule ne contient que aujourd'hui Const codat = "A" Public Sub ok() Dim f As String, li As Long, lifin As Long lifin = Range(codat & Rows.Count).End(xlUp).Row f = "=AUJOURDHUI()" For li = 1 To lifin If Range(codat & li).Value = "aujourd'hui" Then Range(codat & li).FormulaLocal = f Next li End Sub
Vois la première solution du post 3
Cdlmnt
Merci
Finalement le code qui fonctionne et que j'ai retenu est celui-ci (merci yg_be)
Dim jour As Date
jour = Date
Selection.Replace What:="aujourd’hui", Replacement:=jour, LookAt:=xlPart, _
SearchOrder:=xlByRows, MatchCase:=False, SearchFormat:=False, _
ReplaceFormat:=False
effectivement, je n'avais pas vu la "subtilité" de l'apostrophe