Afficher date en français sur un sytème réglé sur la région usa

Bonjour

J'utilise ce code sur mon ordinateur réglé sur français canada pour afficher les dates au format français.

Je cherche comment faire en vba pour maintenir l'affichage en français sur un ordinateur réglé sur le format usa.

Private Sub Worksheet_Change(ByVal Target As Range)

Application.ScreenUpdating = False
Application.EnableEvents = False

On Error Resume Next

If Not Application.Intersect(Target, Range("A:A")) Is Nothing Then
Target.Offset(0, 5) = Format(Target, "WW", vbSunday, vbFirstFourDays)
Target.Offset(0, 6) = Format(Target, "MMMM", vbSunday, vbFirstFourDays)
Target.Offset(0, 7) = Format(Target, "YYYY", vbSunday, vbFirstFourDays)

End If

Application.EnableEvents = True
Application.ScreenUpdating = True

End Sub
12classeur1.xlsm (14.79 Ko)

bonjour lyttonjr,

je ne sais pas si vous utiliserez le numéro des semaines américaines ou le ISO-smaine, donc vous devez choisir un des 2 méthodes ici dessous.

une solution sans VBA (format personnalisé) en espagnol, allemand et néerlandais dans les colonne B:D

14classeur1-52.xlsm (17.33 Ko)
Private Sub Worksheet_Change(ByVal Target As Range)
     Dim isect As Range

     Set isect = Intersect(Target, Range("A:A"))
     If isect Is Nothing Then Exit Sub

     Application.ScreenUpdating = False
     Application.EnableEvents = False
     On Error Resume Next

     For Each c In isect.Cells
          If c.Value = "" Or Not IsDate(c) Then
               c.Offset(, 5).Resize(, 3).ClearContents
          Else
               c.Offset(0, 5) = WorksheetFunction.WeekNum(c.Value2)     'numéros des semaines américaines
               c.Offset(0, 5) = WorksheetFunction.IsoWeekNum(c.Value2)     'ISO-numéro des semaines pour le reste du monde
               c.Offset(0, 6) = UCase(Evaluate(Replace("text(#,""[$-Fr-fr]MMMM"")", "#", c.Value2)))
               c.Offset(0, 7) = Year(c.Value2)
          End If
     Next

     Application.EnableEvents = True
     Application.ScreenUpdating = True

End Sub

Bart

Un grand merci pour la proposition.

Bonne journée!

Bonjour

Je suis juste currieux de comprendre ce bout de code.

For Each c In isect.Cells
          If c.Value = "" Or Not IsDate(c) Then
               c.Offset(, 5).Resize(, 3).ClearContents

Merci

si vous modifiez une cellule et cette cellule est devenue vide ou elle n'est plus une date (par exemple un texte), alors ces 3 cellules (F:H) seront vides ... (C'est pour éviter des erreurs)

Bonjour à tous,

For Each c In isect.Cells
          If c.Value = "" Or Not IsDate(c) Then
               c.Offset(, 5).Resize(, 3).ClearContents

c va retourner successivement chacune des cellules de la plage isect ; c sera donc de type "Range".

Ensuite on teste si c est vide ou bien si c n'est pas une date. Si c'est le cas alors :

on part de la cellule c et on va repérer la cellule qui est à 5 colonnes vers la droite à partir de c : c.Offset(, 5)

on va redimensionner cette "nouvelle cellule" : on conserve sa dimension en nombre de lignes et on lui donne une largeur de 3 colonnes : .resize(,5).

Attention : on n'intervient pas "physiquement" sur la cellule. C'est du "repérage". On peut voir cela comme la construction d'une adresse d'une nouvelle plage qu'on détermine à partir de la cellule c.

Pour Resize, on indique normalement Resize( nlig , ncol ). On fait un redimensionnement pour avoir nlig et ncol. Si nlig (resp. ncol) est omis, on considère qu'on ne modifie pas la dimension verticale (resp. horizontale).

Pour Offset, on indique normalement Offset( nlig , ncol ) qui fait une translation de nlig vers le bas (si nlig est positif sinon vers le haut) et une translation de ncol colonnes vers la droite (si ncol est positif sinon vers la gauche). Si nlig (resp. ncol) est omis, on considère que nlig (resp. ncol) vaut 0. Il n'y aura pas de translation verticale (resp. horizontale).

Pour offset et resize, si on omet ncol, on peut aussi omettre la virgule. Les écritures suivantes sont équivalentes entres elles :

  • Offset (2 , 0) ; Offset (2 , ) ; Offset (2 )
  • Offset (0 , 3) ; Offset (, 3)

On est donc parti de c et on a construit "mentalement" une nouvelle plage décalée de 5 colonnes vers la droite puis redimensionnée à 3 colonnes.

On termine par un effacement de cette plage : c.Offset(, 5).Resize(, 3).ClearContents

C'est à ce moment (.ClearContents) qu'on agit vraiment sur la nouvelle plage qu'on a déterminée avec Offset et Resize.

Merci à tout le monde pour les explications!

Bonjour

Toujours la même question pour afficher la colonne date "A" toujours en français quel que soit la région choisie.

31 déc 2024
31 juil 2024
8 juin 2024
15 avr 2024
13 mars 2024
1 janv 2024
1 févr 2024
1 mars 2024
1 avr 2024
1 mai 2024
1 juin 2024
1 juil 2024
1 août 2024
1 sept 2024
1 oct 2024
1 nov 2024
1 déc 2024
1 janv 2025
4 déc 2024
1 août 2024

Merci

avec un format personnalisé

6classeur1-52.xlsm (17.53 Ko)

Bonjour

Je ne suis pas certain de comprendre. Je pensais un code vba pour forcer la date en text format français.

Merci

re,

voir PJ et il faut modifier le format de la colonne G en "texte", autrement vous risquez qu'Excel traduit ce texte de nouveau en date.

11classeur1-52.xlsm (17.19 Ko)

Merci pour le temps sur mon sujet!

Je vais tenter de préciser mon problème.

Dans la colonne A, je rentre les dates avec un date picker. Comment faire pour que la date affichée dans la cellule active soit toujours du style français (d mmm yyyy) nonobstant la région locale du système.

Sur mon système fr-ca, je vais voir 1 aoû 2024

Sur un système us, je vais voir 1 August 2024

Merci

Bonjour lyttonjr ,

Ce code devrait le faire :

Private Sub Worksheet_Change(ByVal Target As Range)
Const LibellesMois = "janvier,février,mars,avril,mai,juin,juillet,août,septembre,octobre,novembre,décembre"
   If Application.Intersect(Target, Range("A:A")) Is Nothing Then Exit Sub
   On Error GoTo ERR_001
   Application.EnableEvents = False
   Target.Offset(0, 5).Resize(, 3).ClearContents
   Target.Offset(0, 5) = CInt(Format(Target, "WW", vbSunday, vbFirstFourDays))
   Target.Offset(0, 6) = Split(LibellesMois, ",")(Month(Target) - 1)
   Target.Offset(0, 7) = Year(Target)
ERR_001:
   Application.EnableEvents = True
End Sub

Via la constante LibellesMois, préciser les libellés à afficher pour les mois de janvier à décembre (séparés par des virgules).

Re,

Une autre interprétation du problème. On saisit une date en colonne A. On ne touche pas au contenu de la cellule mais on l'affiche sous la forme de date à la française ou québécoise.

  • on introduit une date dans la cellule (Target)
  • on ne modifie pas le numéro de série de la date (la valeur de la cellule reste inchangée et c'est un numéro de série de date)
  • on change juste le format de la cellule (target) pour l'afficher à la "française ou québécoise"
Private Sub Worksheet_Change(ByVal Target As Range)
Const LibellesMois = "janvier,février,mars,avril,mai,juin,juillet,août,septembre,octobre,novembre,décembre"
Dim DateFR
   If Application.Intersect(Target, Range("A:A")) Is Nothing Then Exit Sub
   On Error GoTo ERR_001
   Application.EnableEvents = False
   If IsDate(Target) Then
      DateFR = Day(Target) & " " & Split(LibellesMois, ",")(Month(Target) - 1) & " " & Year(Target)
      Target.NumberFormat = """" & DateFR & """"
   End If
ERR_001:
   Application.EnableEvents = True
End Sub

Bonjour Mafraise

Les 2 codes fonctionnent très bien sur mon système.

Considérant que le fichier sera utilisé sur plusieurs ordinateurs, souvent les accents causent des problèmes pour excel.

Je pense entre autres aux mois avec accent qui seront problématiques.

Merci

Re,

Il suffit de changer la constante LibellesMois par les libellés qu'on désire pour chaque mois.

Const LibellesMois = "janvier,fevrier,mars,avril,mai,juin,juillet,aout,septembre,octobre,novembre,decembre"

Bonjour

Comment procéder pour l'écrire de cette façon et forcer les accents?

Cela ne semble pas fonctionner.

Const LibellesMois =
"janvier,"f" & Chr(233) &"vrier",mars,avril,mai,juin,juillet,"ao" & ChrW(251) & "t",septembre,octobre,novembre,"d & ChrW(233) & "cembre""

Merci

Re,

Vous remplacez la ligne avec la constante par les deux lignes suivantes :

Dim LibellesMois
LibellesMois = "janvier,f" & ChrW(233) & "vrier,mars,avril,mai,juin,juillet,ao" & ChrW(251) & "t,septembre,octobre,novembre,d" & ChrW(233) & "cembre"

Merci beaucoup!

Rechercher des sujets similaires à "afficher date francais syteme regle region usa"