Remplacement du contenu par la date du jour via VBA

Résolu
Guy_L Messages postés 178 Date d'inscription   Statut Membre Dernière intervention   -  
Guy_L Messages postés 178 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

7 réponses

  1. ccm81 Messages postés 11033 Statut Membre 2 434
     

    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
  2. yg_be Messages postés 23437 Date d'inscription   Statut Contributeur Dernière intervention   Ambassadeur 1 588
     

    bonjour,

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

    0
  3. ccm81 Messages postés 11033 Statut Membre 2 434
     

    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
  4. Guy_L Messages postés 178 Date d'inscription   Statut Membre Dernière intervention   1
     

    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
    1. yg_be Messages postés 23437 Date d'inscription   Statut Contributeur Dernière intervention   1 588
       

      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
    2. yg_be Messages postés 23437 Date d'inscription   Statut Contributeur Dernière intervention   1 588
       

      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
      1. Guy_L Messages postés 178 Date d'inscription   Statut Membre Dernière intervention   1 > yg_be Messages postés 23437 Date d'inscription   Statut Contributeur Dernière intervention  
         

        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
      2. yg_be Messages postés 23437 Date d'inscription   Statut Contributeur Dernière intervention   1 588 > Guy_L Messages postés 178 Date d'inscription   Statut Membre Dernière intervention  
         

        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
      3. yg_be Messages postés 23437 Date d'inscription   Statut Contributeur Dernière intervention   1 588 > Guy_L Messages postés 178 Date d'inscription   Statut Membre Dernière intervention  
         

        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
  5. Vous n’avez pas trouvé la réponse que vous recherchez ?

    Posez votre question
  6. ccm81 Messages postés 11033 Statut Membre 2 434
     
    ' 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
    1. yg_be Messages postés 23437 Date d'inscription   Statut Contributeur Dernière intervention   1 588
       

      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
  7. Guy_L Messages postés 178 Date d'inscription   Statut Membre Dernière intervention   1
     
    0
    1. yg_be Messages postés 23437 Date d'inscription   Statut Contributeur Dernière intervention   1 588
       

      tu as oublié

      Const codat = "A"

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

      0
  8. Guy_L Messages postés 178 Date d'inscription   Statut Membre Dernière intervention   1
     

    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