Utiliser Remplacer avec une macro

Résolu
Bonjour,

Je vais devenir fou, et j'espère que vous allez pouvoir m'aider :)

Je cherche à remplacer des dates qui ont un format de cellule par défaut Type "*14/03/2001" en utilisant une macro. Les dates sont toutes dans une colonne jour par jour

01/01/2002
02/01/2002
...
31/12/2002

Je voudrais remplacer toutes les dates de novembre à mars par "hiver" et avril à octobre par "été". Si je le fais manuellement, je n'ai qu'à lancer la fonction rechercher et remplacer, écrire dans recherche : */01/* et dans remplacer : hiver
Le faire douze fois pour chaque moi et le tour et joué, il y a peut être plus simple avec une boucle mais ce n'est pas trop fatiguant... par contre, ça se complique sérieusement lorsque je cherche à faire la manipulation à l'aide d'une macro !

En effet, lorsque je lance une macro, que je fais la manipulation, et que je test ma macro : RIEN ne se passe.

        
Sub Test()

Sheets("new").Select
    Cells.Replace What:="***/01/***", Replacement:="hiver", LookAt:=xlPart, _
        SearchOrder:=xlByRows, MatchCase:=False, SearchFormat:=False, _
        ReplaceFormat:=False
    Cells.Replace What:="***/02/***", Replacement:="hiver", LookAt:=xlPart, _
        SearchOrder:=xlByRows, MatchCase:=False, SearchFormat:=False, _
        ReplaceFormat:=False
    Cells.Replace What:="***/03/***", Replacement:="hiver", LookAt:=xlPart, _
        SearchOrder:=xlByRows, MatchCase:=False, SearchFormat:=False, _

' ETC pour l'ensemble de l'année

    Sheets("Facture Gaz").Select
    Range("D13").Select
    ActiveCell.FormulaR1C1 = _
        "=SUMIF(new!R[-10]C[-3]:R[354]C[-3],""été"",new!R[-10]C[25]:R[355]C[25])"
    ActiveCell.Offset(1, 0).Range("A1").Select
    Range("D14").Select
    ActiveCell.FormulaR1C1 = _
        "=SUMIF(new!R[-11]C[-3]:R[353]C[-3],""hiver"",new!R[-11]C[25]:R[354]C[25])"
    ActiveCell.Offset(1, 0).Range("A1").Select
        
End Sub


J'ai donc essayé de changer préalablement le format de la date, j'ai essayé tout un tas de commande pré conçues par d'autre mais je n'ai pas réussi à assembler quelque chose qui fonctionne, par exemple avec ce bout de code

Sub test()

Sheets("new").Columns(1).Replace.Cell "***/2/***", "hiver"
    
End Sub


Bref... je me dis que peut être le plus simple est de faire une boucle, mais je ne sais pas trop comment m'y prendre. Alors si quelqu'un peut m'envoyer sur une piste ou m'aider à régler le problème par le bout que j'ai commencé,

Merci beaucoup !

4 réponses

  • Votes
  • Date
  • Date décroissante
  1. Contributeur
    Bonjour,

    Je vais devenir fou, et j'espère que vous allez pouvoir m'aider :)

    mais non on ne va pas t'aider à devenir fou! :-D

    a la bourre, il vaut mieux effectivement utiliser une formule mais comme c'est fait!

    en restant sur du VBA et en se basant sur les mois(...), fonction personnalisée:

    Function donner_saison(journee As Date) As String 
    mois = Month(journee) 
    Select Case mois 
        Case 1 To 3 
        donner_saison = "hiver" 
        Case 4 To 6 
        donner_saison = "printemps" 
        Case 7 To 9 
        donner_saison = "été" 
        Case 10 To 12 
        donner_saison = "hiver" 
    End Select 
    End Function

    :-x
    1. Ce que ça a l'air simple une fois qu'on maitrise un peu le VBA... c'est exactement ce que je voulais faire.

      Merci à tous pour vos réponses
    2. Contributeur
      Pour le fun
      en tenant compte des solstices
      par VBA
      Function donner_saison(journee As Date) As String
      jour = Month(journee) * 100 + Day(journee)
      Select Case jour
          Case Is < 321
              donner_saison = "hiver"
          Case Is < 621
              donner_saison = "printemps"
          Case Is < 923
              donner_saison = "été"
          Case Is < 1221
              donner_saison = "automne"
          Case Else
              donner_saison = "hiver"
      End Select
      End Function


      par formule (solution alternative à celle de l'ami Mike)

      =INDEX({"hiver";"printemps";"été";"automne";"hiver"};EQUIV(MOIS(A1)*100+JOUR(A1);{1;321;621;923;1221};1))
  2. Salut,

    Tu peux obtenir le résultat avec formule,
    exemple en colonne A tu as tes dates en I la date de l'equinoxe de printemps 21/03/2010
    en I2 la date du solstice d'été 21/06/2010
    en I3 la date de l'équinoxe d'automne et en I4 le solstice d'hiver

    cette formule te donnera d'un coup le résultat souhaité 21 été 2002 pour l'été la même chose pour le quatre saisons

    =SI(ET(A1>=$I$1;A1<$I$2);REMPLACER(TEXTE(JOUR(A1);"00")&TEXTE(MOIS(A1);"00")&TEXTE(ANNEE(A1);"0000");3;2;" printemps ");SI(ET(A1>=$I$2;A1<$I$3);REMPLACER(TEXTE(JOUR(A1);"00")&TEXTE(MOIS(A1);"00")&TEXTE(ANNEE(A1);"0000");3;2;" été ");SI(ET(A1>=$I$3;A1<$I$4);REMPLACER(TEXTE(JOUR(A1);"00")&TEXTE(MOIS(A1);"00")&TEXTE(ANNEE(A1);"0000");3;2;" automne ");REMPLACER(TEXTE(JOUR(A1);"00")&TEXTE(MOIS(A1);"00")&TEXTE(ANNEE(A1);"0000");3;2;" hiver "))))

    pour traiter qu'une saison à la fois
    =SI(ET(A1>=$I$2;A1<$I$3);REMPLACER(TEXTE(JOUR(A1);"00")&TEXTE(MOIS(A1);"00")&TEXTE(ANNEE(A1);"0000");3;2;" été ");"")

    Pour gérer manuellement les dates
    =REMPLACER(TEXTE(JOUR(A1);"00")&TEXTE(MOIS(A1);"00")&TEXTE(ANNEE(A1);"0000");3;2;" été ")

    un petit montage
    https://www.cjoint.com/?gknQEI8QVT

    Je regarde en VBA le code
    A+
    Mike-31

    Une période d'échec est un moment rêvé pour semer les graines du savoir.
    1. En revanche, j'ai besoin de remplacer la totalité de la cellule, mais j'ai compris le principe et je vais l'adapter !

      Merci de ton aide, je vais m'en inspirer. Du coup, ne t'embête pas avec le VBA, je vais continuer comme ça !
  3. bj ; esaye de faire la macro manuellemant avec word 2007 et le developeur ( a installer avec options word) salut
    1. Re tout le monde,

      Je reviens, ai je bien compris, veux tu afficher simplement la saison à la place de la date
      ex. pour 01/01/2002 afficher hiver

      01/01/2002 ou 01 hiver 2002

      01/01/2002 ou encore 01/01/2002 hiver

      suivant ta demande, jai une macro assez simple qui en fonction de la date de départ affiche ce format 01 hiver 2002, mais tout peut être adapté.