Utiliser Remplacer avec une macro

Résolu/Fermé
Prévan Messages postés 9 Date d'inscription mardi 8 juin 2010 Statut Membre Dernière intervention 14 juin 2010 - 9 juin 2010 à 16:27
Mike-31 Messages postés 18310 Date d'inscription dimanche 17 février 2008 Statut Contributeur Dernière intervention 29 mars 2024 - 11 juin 2010 à 13:07
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 !


A voir également:

4 réponses

michel_m Messages postés 16603 Date d'inscription lundi 12 septembre 2005 Statut Contributeur Dernière intervention 16 décembre 2023 3 303
Modifié par michel_m le 10/06/2010 à 15:20
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
Prévan Messages postés 9 Date d'inscription mardi 8 juin 2010 Statut Membre Dernière intervention 14 juin 2010
10 juin 2010 à 15:30
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
michel_m Messages postés 16603 Date d'inscription lundi 12 septembre 2005 Statut Contributeur Dernière intervention 16 décembre 2023 3 303
10 juin 2010 à 16:07
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
Mike-31 Messages postés 18310 Date d'inscription dimanche 17 février 2008 Statut Contributeur Dernière intervention 29 mars 2024 5 073
Modifié par Alain.Steinmann le 20/03/2015 à 01:38
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
Prévan Messages postés 9 Date d'inscription mardi 8 juin 2010 Statut Membre Dernière intervention 14 juin 2010
10 juin 2010 à 13:57
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
Mike-31 Messages postés 18310 Date d'inscription dimanche 17 février 2008 Statut Contributeur Dernière intervention 29 mars 2024 5 073
11 juin 2010 à 13:07
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