Remplacement du contenu par la date du jour via VBA

Résolu
Guy_L Messages postés 176 Date d'inscription samedi 16 septembre 2006 Statut Membre Dernière intervention 20 septembre 2024 - Modifié le 25 mars 2024 à 13:20
Guy_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

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

A voir également:

7 réponses

ccm81 Messages postés 10900 Date d'inscription lundi 18 octobre 2010 Statut Membre Dernière intervention 2 novembre 2024 2 425
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

0
yg_be Messages postés 23335 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 18 novembre 2024 Ambassadeur 1 551
25 mars 2024 à 17:25

bonjour,

le texte "aujourd'hui" contenu dans des cellules, c'est bien du texte, pas dans une formule?

0
ccm81 Messages postés 10900 Date d'inscription lundi 18 octobre 2010 Statut Membre Dernière intervention 2 novembre 2024 2 425
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

0
Guy_L Messages postés 176 Date d'inscription samedi 16 septembre 2006 Statut Membre Dernière intervention 20 septembre 2024 1
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

0
yg_be Messages postés 23335 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 18 novembre 2024 1 551
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
0
yg_be Messages postés 23335 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 18 novembre 2024 1 551
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.

0
Guy_L Messages postés 176 Date d'inscription samedi 16 septembre 2006 Statut Membre Dernière intervention 20 septembre 2024 1 > yg_be Messages postés 23335 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 18 novembre 2024
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()"

0
yg_be Messages postés 23335 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 18 novembre 2024 1 551 > Guy_L Messages postés 176 Date d'inscription samedi 16 septembre 2006 Statut Membre Dernière intervention 20 septembre 2024
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.

0
yg_be Messages postés 23335 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 18 novembre 2024 1 551 > Guy_L Messages postés 176 Date d'inscription samedi 16 septembre 2006 Statut Membre Dernière intervention 20 septembre 2024
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.

0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
ccm81 Messages postés 10900 Date d'inscription lundi 18 octobre 2010 Statut Membre Dernière intervention 2 novembre 2024 2 425
Modifié 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

0
yg_be Messages postés 23335 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 18 novembre 2024 1 551
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
0
Guy_L Messages postés 176 Date d'inscription samedi 16 septembre 2006 Statut Membre Dernière intervention 20 septembre 2024 1
26 mars 2024 à 12:02
0
yg_be Messages postés 23335 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 18 novembre 2024 1 551
26 mars 2024 à 12:19

tu as oublié

Const codat = "A"

un conseil, toujours mettre "option explicit" en début de module.

0
Guy_L Messages postés 176 Date d'inscription samedi 16 septembre 2006 Statut Membre Dernière intervention 20 septembre 2024 1
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

0