Inversion jour et mois dans une date

JeanPierre83

XLDnaute Nouveau
Bonsoir à tous. Quelqu'un pourrait-il m'expliquer ce qui se passe lorsqu'une application réalisée sous excel 2003 en VBA voit dans les dates une inversion entre le jour et le mois selon l'ordinateur par lequel est ouverte cette application? Cela est dû à quoi ou comment se dépêtrer de cette "anomalie" qui me pose de nombreux problèmes? Merci par avance à tous les contributeurs de ce forum.

JeanPierre83
 

JeanPierre83

XLDnaute Nouveau
Re : Inversion jour et mois dans une date

Salut Bruno. Merci d'avoir répondu à mon message. En fait dans mon application toutes les dates sont formatées comme tu l'indiques. Et le problème c'est que sur un autre PC je suis obligé de changer le formatage en "mm/dd/yyyy". Bien entendu j'ai vérifié dan le panneau de config que les options régionales étaient correctes. J'espère trouver sur ce forum un e réponse à ce souci qui, je pense, a dû déjà être rencontré.
A+
 

Kotov

XLDnaute Impliqué
Re : Inversion jour et mois dans une date

Bonjour JeanPierre, Bruno, Dull, le forum.

Confronté à un problème similaire, j'avais utilisé une autre méthode. Reste à voir si elle est adaptable à ton cas.

-------- Extrait du message :
...
Confronté au même problème de date inversée, j'ai utilisé une méthode différente qui fonctionne parfaitement :

Cells(1, 1) = CDate(CSng(Date))

En effet, quand Excel transforme la date 11/03/2008 en 03/11/2008, la cellule prend la valeur numérique de la date : 39755 pour le 3 nov 2008 au lieu de 39518 pour aujourd'hui 11 mars 2008. Impossible ensuite de jouer sur les formats pour corriger l'erreur.

En conséquence, je transforme d'abord la date en nombre Single (CSng(Date)) pour ensuite la transformer en date via CDate.
Et ça fonctionne parfaitement.
...
-------- Fin de l'extrait ----

En complément, je joins l'adresse du fil ou ce problème a été travaillé :
https://www.excel-downloads.com/threads/format-date-inverse-entre-jour-et-mois.88859/

En espérant t'avoir mis sur la voie...

Bonne journée
Kotov
 

JeanPierre83

XLDnaute Nouveau
Re : Inversion jour et mois dans une date

Bonsoir Bruno, Dull, Kotov, le forum. Je reprends le fil de mon souci après quelques jours d'inaction. Merci aux prénommés pour vous réponses et je pense que la solution de Kotov devrait être la bonne. Je vais la tester et vous tiendrai au courant d'ici quelques jours. Par contre reste d'actualité la raison qui fait qu'une date saisie en "03/11/2008" s'affiche dans la base de données en "11/03/2008" sur un PC autre que celui sur lequel l'application a été développée? (Ceci dit par simple curiosité!).
Bien à tous les lecteurs de ce message (et aux autres...).

JeanPierre83
 

ChTi160

XLDnaute Barbatruc
Re : Inversion jour et mois dans une date

Salut JeanPierre83
Bonsoir le Fil
Bonsoir le Forum

j'ai comme la plupart des accrocs d'excel ,rencontré ce problème

j'ai teste pas mal de chose et je crois(sans certitude , il faudrait que je recherche) que j'avais trouvé une solution en passant par la seule valeur qui ne peut être modifiée en cours de route

la Valeur Numérique d'une Date exemple aujourd'hui 11/06/2008
donne 39610 éme Jours du Système, qui ne pourra pas être valable pour une autre date
exemple le 06/11/2008

Donc si ta colonne A est au Format Date dd/mm/yyyy

Code:
Cells(1,1)=Format(Date,"00000") 'donne la bonne date
ou alors lors d'une boucle dans VBA

Code:
Cells(1,1)=Format(Date,"00000") 'ici on colle le chiffre 
Cells(1,1).Numberformat="dd/mm/yyyy" 'et la on formate
car le problème ne se rencontre qu'avec les dates avant le 15 du mois
en espérant avoir fait avancer le chimilimblic
PS : En mettant
Cells(1, 1) = CStr(Date)
On obtient bien l'inversion 06/11/2008
Bonne fin de Soirée
 
Dernière édition:

MIB1688

XLDnaute Nouveau
Bonjour j'ai ce problème également sur mon fichier et je n'y connais rien en code ^^
Sur mon PC mes dates sur excel fonctionne nickel mais sur d'autres ordi il inverse ce que l'on rentre dans la case excel lorsque que l'on fait entré
Est-il possible d'adapter cette formule pour toute une colonne svp ? Cells(1, 1) = CDate(CSng(Date))
comment dois-je l'intégrer et où exactement ?
merci d'avance pour votre aide
 

ChTi160

XLDnaute Barbatruc
Bonjour MIB1688
As tu essayé après avoir formaté tes cellules au format date
De mettre
Cells(1, 1) = Clng(CDate(Date))
Ou si cellule non formatée mettre
Celle(1,1).NumberFormat="m/d/yyyy" comme prescrit par Patrick
Puis
Cells(1, 1) = CDate(Date)
Non testé
Depuis mon téléphone
Jean marie
 

MIB1688

XLDnaute Nouveau
Bonjour MIB1688
As tu essayé après avoir formaté tes cellules au format date
De mettre
Cells(1, 1) = Clng(CDate(Date))
Ou si cellule non formatée mettre
Celle(1,1).NumberFormat="m/d/yyyy" comme prescrit par Patrick
Puis
Cells(1, 1) = CDate(Date)
Non testé
Depuis mon téléphone
Jean marie
merci pour ta réponse ! :)

oui j'ai essayé mais rien n'y fait - je ne l'ai peut être pas bien intégré au code

j'ai une question bête je n'y connais rien en code "cells(1, 1)" ça s'applique à toutes les cases ou juste la case 1 de la colonne A ?
 

MIB1688

XLDnaute Nouveau
peut être que cela peut aider
voici le code (surement très basique voire très mauvais que j'ai pour mon fichier excel) ^^

Private Sub Worksheet_Change(ByVal Target As Range)

Dim nMnP As Range, nCell As Range

Application.EnableEvents = False
Application.ScreenUpdating = False

Set nMnP = Intersect(Target, Columns("B"))
If Not nMnP Is Nothing Then
For Each nCell In nMnP
nCell = UCase(nCell)
Next nCell
End If

Set nMnP = Intersect(Target, Columns("C"))
If Not nMnP Is Nothing Then
For Each nCell In nMnP
nCell = UCase(nCell)
Next nCell
End If

Set nMnP = Intersect(Target, Columns("M"))
If Not nMnP Is Nothing Then
For Each nCell In nMnP
nCell = UCase(nCell)
Next nCell
End If

Set nMnP = Intersect(Target, Columns("D"))
If Not nMnP Is Nothing Then
For Each nCell In nMnP
nCell = Application.WorksheetFunction.Proper(nCell)
Next nCell
End If

Set nMnP = Intersect(Target, Columns("Q"))
If Not nMnP Is Nothing Then
For Each nCell In nMnP
nCell = UCase(nCell)
Next nCell
End If


Application.EnableEvents = True

End Sub
 

ChTi160

XLDnaute Barbatruc
Re
dans ta procédure
que doit faire
VB:
Set nMnP = Intersect(Target, Columns("B"))
If Not nMnP Is Nothing Then
For Each nCell In nMnP
nCell = UCase(nCell)
Next nCell
End If
je comprends que l'on recherche une cellule "nMnP"
en recherchant Target dans la Colonne "B" ce qui donne "nMnP"
si "nMnP" est définie alors on boucle sur "nMnP" on boucle sur "nMnP" pour mettre les cellule de "nMnP" en Majuscules !
donc "nMnP" peut être une Plage ?
explique moi ?
sans fichier pas evident Lol
pourquoi pas
Code:
Set nMnP = Intersect(Target, Columns("B"))
If Not nMnP Is Nothing Then
nMnP = UCase(nMnP)'On met en Majuscule la cellule trouvée
End If
Jean marie
 

Discussions similaires

Statistiques des forums

Discussions
312 380
Messages
2 087 797
Membres
103 664
dernier inscrit
wolvi71