Remplacement du contenu par la date du jour via VBA
RésoluGuy_L Messages postés 176 Date d'inscription samedi 16 septembre 2006 Statut Membre Dernière intervention 20 septembre 2024 - 26 mars 2024 à 13:03
- Remplacement du contenu par la date du jour via VBA
- Coco chat remplacement - Accueil - Réseaux sociaux
- Remplaçant de Coco : quelles solutions pour tchater gratuitement en ligne ? - Accueil - Réseaux sociaux
- Remplacer disque dur par ssd - Guide
- Mise a jour chrome - Accueil - Applications & Logiciels
- Mise a jour windows 10 - Accueil - Mise à jour
7 réponses
25 mars 2024 à 14:22
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
25 mars 2024 à 17:25
bonjour,
le texte "aujourd'hui" contenu dans des cellules, c'est bien du texte, pas dans une formule?
25 mars 2024 à 19:32
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
Modifié le 25 mars 2024 à 20:17
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
26 mars 2024 à 09:52
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
26 mars 2024 à 10:09
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.
26 mars 2024 à 11:36
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()"
26 mars 2024 à 12:03
Je réagissais à ceci: "Au final, afin qu'Excel interprète toute la colonne comme des dates, je rajouterai une conversion en dates format JJ/MM/AAAA"
Je pense que ce n'est pas une bonne approche, et je ne vois pas où tu fais cela dans le code VBA.
Modifié le 26 mars 2024 à 12:19
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 questionModifié le 25 mars 2024 à 20:44
' 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
26 mars 2024 à 09:57
Je ferais plutôt:
Dim f As date, li As Long, lifin As Long lifin = Range(codat & Rows.Count).End(xlUp).Row f = date For li = 1 To lifin If Range(codat & li).Value = "aujourd'hui" Then Range(codat & li) = f Next li
26 mars 2024 à 12:02
Voici le "bug"
26 mars 2024 à 12:19
tu as oublié
Const codat = "A"
un conseil, toujours mettre "option explicit" en début de module.
26 mars 2024 à 13:03
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