Fonction Format "mmm yyyy" ne fonctionne pas sur tous les mois

Bonjour à tous,

Le code ci-dessous (cf. fichier joint) me permet, lorsque je saisis une date JJ/MM/AAAA" dans la cellule A1, de mettre cette date sous la forme Mois_abrégé Année

Ex : 15/01/2020 devient Janv 2020

Cette macro fonctionne pour tous les mois sauf pour septembre, octobre et novembre. Un mystère...

Ex : 15/10/2020 devient 01/10/2020 (donc ne fonctionne pas et, en plus, me passe le jour à 01).

J'ai beau retourner dans tous les sens, impossible de comprendre...

Private Sub Worksheet_Change(ByVal Target As Range)

    Application.EnableEvents = False

    If Not Intersect(Target, Range("A1")) Is Nothing Then

        Worksheets("Feuil1").Range("A1") = WorksheetFunction.Proper(Format(Range("A1").Value, "mmm yyyy"))

    End If

    Application.EnableEvents = True

End Sub

Merci pour votre aide !

16testdate.xlsm (13.81 Ko)

Bonjour

Remplacez toute la macro par celle ci-dessous

Dim ok As Boolean
Private Sub Worksheet_Change(ByVal Target As Range)
If ok Then Exit Sub

If Not Intersect(Target, Range("A1")) Is Nothing Then
ok = True
Range("A1").NumberFormat = "mmm yyyy"
End If

ok = False

End Sub

Si ok, cliquez sur le petit v en haut à droite pour cloturer le fil.

Cordialement

Merci pour votre retour Dan !

Le code que vous m'indiquez fonctionne bien, mais je voudrais que le mois soit en majuscule, d'où le :

WorksheetFunction.Proper

Bonjour, salut Dan !

Autre essai :

Private Sub Worksheet_Change(ByVal Target As Range)

    Application.EnableEvents = False
    If Not Intersect(Target, Range("A1")) Is Nothing Then Range("A1") = UCase(Format(Range("A1"), "mmm yyyy"))
    Application.EnableEvents = True

End Sub

Merci Pedro22 pour ta contribution !

Le Ucase met tout le mois en majuscule, or je voudrais uniquement la 1ère lettre du mois en majuscule.

Ex : si je saisis 01/10/2019, je veux obtenir Oct 2019

Autre essai :

Private Sub Worksheet_Change(ByVal Target As Range)

    Application.EnableEvents = False
    If Not Intersect(Target, Range("A1")) Is Nothing Then Range("A1") = UCase(Left(Format(Range("A1"), "mmm yyyy"), 1)) & Right(Format(Range("A1"), "mmm yyyy"), Len(Format(Range("A1"), "mmm yyyy")) - 1)
    Application.EnableEvents = True

End Sub

Non, on a toujours le problème des mois de septembre, octobre et novembre, pour lequel le format ne fonctionne pas... C'est vraiment intriguant !

Bonjour,

J'ai le même souci.

Excel 365 (Insider)

Version : 2001

Build : 12430.20184

Bonjour,

si la valeur est une date valable, après les transformations, excel la remettra au dernier format connu de la cellule. pour que la transformation fonctionne il faut que la cellule A1 soit au format texte. du coup cela risque de poser des problèmes pour la suite, car cette cellule ne sera plus considérée par excel comme contenant une date.

les règles d'orthographe (en français) pour les mois veulent que ceux-ci commencent par une minuscule, donc la majuscule n'est peut-être pas nécessaire.

Je sais bien que dans la langue française, les mois ne prennent pas de majuscules.

Mais c'est tout de même intriguant que ça fonctionne pour tous les autres mois, sauf ces trois-là. Et encore plus intriguant qu'avec le format "mmmm yyyy", ça fonctionne avec tous les mois !

Donc a priori, y a rien à faire ?

Nouvel essai :

Private Sub Worksheet_Change(ByVal Target As Range)

    Application.EnableEvents = False
    If Not Intersect(Target, Range("A1")) Is Nothing Then Range("A1") = Application.Choose(Month(Range("A1")), "Janv", "Févr", "Mars", "Avril", "Mai", "Juin", "Juil", "Août", "Sept", "Oct", "Nov", "Déc") & " " & Year(Range("A1"))
    Application.EnableEvents = True

End Sub

Si ça ne fonctionne toujours pas, je n'ai rien d'autre dans mon sac !

Toujours le même problème : ça ne fonctionne pas pour les mois de septembre, octobre et novembre...

Toujours le même problème : ça ne fonctionne pas pour les mois de septembre, octobre et novembre...

Juste pour quelques tests, peux-tu nous dire ce que donne sur quelques dates, dont des dates sur ces 3 mois :

Sub Test()

MsgBox Month(Range("A1"))
MsgBox Format(Range("A1"), "mmm")

End Sub

Ça fonctionne bien là ! Les MsgBox me renvoient respectivement pour les mois de septembre, octobre et novembre :

9

sept

10

oct

11

nov

Ça fonctionne bien là ! Les MsgBox me renvoient respectivement pour les mois de septembre, octobre et novembre :

9

sept

10

oct

11

nov

C'est donc une singularité que je n'explique pas !

bonsoir,

ne disposant pas d'une version FR , je ne peux pas tester dans le même contexte que toi, mais le passage par un format de cellule text solutionne un problème similaire chez moi. ayant une version UK, le mois est écrit avec une majuscule et j'ai forcé la minuscule et cela fonctionne pour tous les mois.

voici donc ce qui devrait aussi fonctionner avec une version FR

Private Sub Worksheet_Change(ByVal Target As Range)

    Application.EnableEvents = False

    If Not Intersect(Target, Range("A1")) Is Nothing Then
        Worksheets("feuil1").Range("A1").NumberFormat = "@"
        Worksheets("Feuil1").Range("A1") = Application.Proper((Format(Range("A1").Value, "mmm yyyy")))

    End If

    Application.EnableEvents = True

End Sub

mais comme mentionné dans ma réponse précédente, le résultat est du texte et n'est plus une date.

Bonjour à tous,

de quoi tu te plains ?

Moi, sur 2019, j'obtiens 01/10/2019 avec ton bout de code !

Et pourtant l'expression est bien évaluée (avec Oct pour moi) Excel la retranscrit en vraie date...

eric

Bonjour

Essayez comme ceci :

Dim ok As Boolean
Private Sub Worksheet_Change(ByVal Target As Range)
If ok Or Target.Count > 1 Then Exit Sub
If Not Intersect(Target, Range("A1")) Is Nothing Then
    ok = True
    Range("A1").NumberFormat = "@"
    Range("A1") = WorksheetFunction.Proper(Format(Range("A1").Value, "mmm yyyy"))
    Select Case Month(CDate(Target))
        Case Is = 9
            Range("A1") = Left(Range("A1"), 4) & " " & Right(Range("A1"), 4)
        Case Is = 10, 11
            Range("A1") = Left(Range("A1"), 3) & " " & Right(Range("A1"), 4)
    End Select
End If
ok = False
End Sub

Supprimez tout le code actuel dans votre feuille et remplacez le complètement par celui ci

Cordialement

Rechercher des sujets similaires à "fonction format mmm yyyy fonctionne pas tous mois"