Utiliser Remplacer avec une macro

Résolu/Fermé
Signaler
Messages postés
9
Date d'inscription
mardi 8 juin 2010
Statut
Membre
Dernière intervention
14 juin 2010
-
Messages postés
17826
Date d'inscription
dimanche 17 février 2008
Statut
Contributeur
Dernière intervention
22 janvier 2022
-
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

Messages postés
16547
Date d'inscription
lundi 12 septembre 2005
Statut
Contributeur
Dernière intervention
19 janvier 2022
3 260
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
Messages postés
9
Date d'inscription
mardi 8 juin 2010
Statut
Membre
Dernière intervention
14 juin 2010

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
0
Messages postés
16547
Date d'inscription
lundi 12 septembre 2005
Statut
Contributeur
Dernière intervention
19 janvier 2022
3 260
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))
0
Messages postés
17826
Date d'inscription
dimanche 17 février 2008
Statut
Contributeur
Dernière intervention
22 janvier 2022
4 908
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.
0
Messages postés
9
Date d'inscription
mardi 8 juin 2010
Statut
Membre
Dernière intervention
14 juin 2010

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 !
0
bj ; esaye de faire la macro manuellemant avec word 2007 et le developeur ( a installer avec options word) salut
0
Messages postés
17826
Date d'inscription
dimanche 17 février 2008
Statut
Contributeur
Dernière intervention
22 janvier 2022
4 908
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é.
0