none
Inversion du jour et du mois dans une date sous Excel RRS feed

  • Question

  • Bonjour,

    Un de nos clients constate un problème sur une application qu'on lui a développé. Je n'arrive pas à reproduire son problème qui le suivant :

    Notre application va lire dans une base de donnée une serie de date et va les injecter dans un fichier Excel. Le problème apparait quand le jour est inférieur à 12. Dans ce cas le jour et le mois sont inversé dans le fichier Excel.

    J'ai donc envoyé une version du logiciel à notre client qui trace étape par étape la valeur de cette date et elle est conforme jusqu'à l'injection dans la cellule Excel et c'est à la relecture que le jour et la mois sont inversés.

    Pour cela j'utilise la classe : Microsoft.Office.Interop.Excel version 1.6.0.0 pour Excel 12.0 en C#

    J'ai essayé de forcer dans le format "jj/mm/aaaa" avec xlRange.NumberFormatLocal = "jj/mm/aaaa";

    Mais cela ne résout pas le problème.

    J'ai commencé des recherches sur internet et apparemment le même probleme se produit chez certains utilisateurs de VBA sous Excel. Ce qui me laisse à croire que le problème est plutôt du coté de Excel que de notre logiciel.

    Avez-vous des informations à ce sujet ? une solution ? des tests qui pourraient être réalisé ?

    Je vous remercie d'avance
    lundi 24 janvier 2011 09:34

Toutes les réponses

  • Bonjour,

    Pouvez-vous nous montrer le code qui affecte la date dans une cellule Excel ?

    Cordialement


    Gilles TOURREAU - MVP C#
    Architecte .NET/Consultant/Formateur chez Winwise
    Blog : http://gilles.tourreau.fr
    - MCPD : Enterprise Developper / Windows Developper 3.5 / ASP .NET 3.5
    - MCTS : ADO .NET 3.5 / SQL Server 2008 Developper / Windows Forms 3.5 / ASP .NET 3.5
    lundi 24 janvier 2011 13:10
    Modérateur
  • Voici le code :

     

    xlRange = (Range)xlSheet.Cells[ligne_dep, int.Parse(onglet.col_date)];
    xlRange.NumberFormatLocal = "jj/mm/aaaa";
    
    string iii = (DateTime.ParseExact(row["DateFin"].ToString(), "dd/MM/yyyy HH:mm:ss", CultureInfo.InvariantCulture)).ToString("dd/MM/yyyy HH:mm:ss");
    xlRange.set_Value(Missing.Value, iii);

     

    lundi 24 janvier 2011 13:21
  • Bonjour,

    Pouvez-vous nous confirmer que l'Excel utilisé par votre client est en Français ?

    Cordialement


    Gilles TOURREAU - MVP C#
    Architecte .NET/Consultant/Formateur chez Winwise
    Blog : http://gilles.tourreau.fr
    - MCPD : Enterprise Developper / Windows Developper 3.5 / ASP .NET 3.5
    - MCTS : ADO .NET 3.5 / SQL Server 2008 Developper / Windows Forms 3.5 / ASP .NET 3.5
    lundi 24 janvier 2011 15:54
    Modérateur
  • Bonjour,

     

    Oui, je vous le confirme. Excel, Windows et le paramétrage linguistique sont en Francais.

     

    Je vous remercie pour votre aide.

    mardi 25 janvier 2011 15:00
  • Bonjour,

     

    Je vous conseille de rapporter le problème sur Microsoft Connect et de fournir tous les détails nécessaires concernant ce scenario. J’ai remarqué plusieurs cas concernant le format de date et je crois que ce problème nécessite une réplication dans un environnement similaire.

     

    Cordialement,

    Alex

    ________________

    Publiez un article sur MSDN !

    Windows Phone 7

    Astuces pour Visual Studio 2010

    XNA – Développement jeux vidéo

    Didacticiels et astuces : VB.NET, C#, ASP.NET, .NET Framework, Silverlight, Workflow Foundation, SharePoint, WPF

    Microsoft propose ce service gratuitement, dans le but d'aider les utilisateurs et d'élargir les connaissances générales liées aux produits et technologies Microsoft. Ce contenu est fourni "tel quel" et il n'implique aucune responsabilité de la part de Microsoft.

     

     


    Suivez MSDN sur Twitter 

    vendredi 28 janvier 2011 13:40
  • Bonjour à ACELTIS qui nous a écrit :
     > xlRange.NumberFormatLocal = "jj/mm/aaaa";

    string iii = (DateTime.ParseExact(row["DateFin"].ToString(), "dd/MM/yyyy HH:mm:ss",

    Il y a une incohérence dans ces deux instructions.
    mm et MM ne sont pas équivalents.

    De mémoire, je ne suis pas certain, mais je crois que MM représente les minutes et mm le mois.
    Il ne faut pas se fier aux exemples de la fonction "format", ils sont archifaux.


    A+

    vendredi 28 janvier 2011 15:54
  • Bonjour Alex

    J’ai remarqué plusieurs cas concernant le format de date

    Oh que oui, signalés depuis des années sans effet.
    Au moins avec les bêtas, on est lus, donc le problème est connu des développeurs.

    Essayez l'exemple de la fonction Format, il ne compile même pas.
    Et une fois corrigé les résultats sont faux.
    Si vous avez le pouvoir de faire changer quelque chose, les utilisateurs vous en seront reconnaissant.


    A+

    vendredi 28 janvier 2011 16:05
  • Bonjour,

     

    Malheureusement, tout ce que je peux faire est de rapporter ces bugs et le feedback de la communauté aux équipes en charge des projets respectifs, mais le choix de les corriger leur appartient. Je vais escalader cette discussion pour être sur que ces demandes sont entendues.

     

    Cordialement,

    Alex

    ________________

    Publiez un article sur MSDN !

    Windows Phone 7

    Astuces pour Visual Studio 2010

    XNA – Développement jeux vidéo

    Didacticiels et astuces : VB.NET, C#, ASP.NET, .NET Framework, Silverlight, Workflow Foundation, SharePoint, WPF

    Microsoft propose ce service gratuitement, dans le but d'aider les utilisateurs et d'élargir les connaissances générales liées aux produits et technologies Microsoft. Ce contenu est fourni "tel quel" et il n'implique aucune responsabilité de la part de Microsoft.

     

     


    Suivez MSDN sur Twitter 

    dimanche 30 janvier 2011 16:26
  • Bonsoir

    Malheureusement, tout ce que je peux faire est de rapporter ces bugs et le feedback de la communauté aux équipes en charge des projets respectifs, mais le choix de les corriger leur appartient. Je vais escalader cette discussion pour être sur que ces demandes sont entendues.

    Merci.


    A+

    dimanche 30 janvier 2011 19:16
  • Pour   string iii = (DateTime.ParseExact(row["DateFin"].ToString(), "dd/MM/yyyy HH:mm:ss",

    Je me suis basé sur ca http://msdn.microsoft.com/en-us/library/8kb3ddd4.aspx

    Je suppose que ca doit être juste ... (non ?)

     

    Pour xlRange.NumberFormatLocal = "jj/mm/aaaa";

    Effectivement, je n'ai pas trouvé de format sur MSDN, je me suis basé sur un exemple que je n'arrive plus à retrouver.

    Il y a peut être une erreur ?

    Auriez-vous les différents formats possible ?

     

    vendredi 4 février 2011 11:39
  • Bonjour ACELTIS

    Je me suis basé sur ca http://msdn.microsoft.com/en-us/library/8kb3ddd4.aspx

    Je suppose que ca doit être juste ... (non ?)

    Ça devrait, mais :
    Cette page est pour l'Amérique,
    elle est pour VB de Visual Studio, si je ne me trompe.
    Ceci dit le m minuscule est utilisé pour les minutes et le M majuscule pour le mois.
    Plutôt que de vous induire en erreur, je vous conseillerais d'aller voir sur le forum Answers Excel, vous y trouverez des pointures qui manipulent le vba au quotidien.


    A+

    vendredi 4 février 2011 14:58
  • Bonjour,

    Dans le cadre d'Excel comme de la plupart des autres environnement de développement, la manière la plus sûre de parser une date est de le faire à partir du format ISO : yyyy-MM-dd soit 2011-02-05 pour le 5 février 2011.

    samedi 5 février 2011 09:59
  • Bonjour

    Dans le cadre d'Excel comme de la plupart des autres environnement de développement, la manière la plus sûre de parser une date est de le faire à partir du format ISO : yyyy-MM-dd soit 2011-02-05 pour le 5 février 2011.

    Je ne sais pas ce que veut dire "parser" en français, mais le problème des dates existe depuis toujours et revient à la surface à chaque version.
    Les développeurs ne connaissent manifestement que le format américain, qui est un non sens, mais c'est comme ça.
    Pour afficher les dates au format européen ou ISO, ils semblent faire des verrues à la va-vite, avec le résultat qu'on connaît.
    Pour Word ça fait des années qu'on proteste et chaque nouvelle version nous ramène le format américain, en particulier pour les publipostages.
    C'est l'utilisateur qui doit adapter son publipostage pour retrouver les dates usuelles.


    A+

    samedi 5 février 2011 15:03
  • Bonjour,

    "Parser" vient du verbe To Parse qui veut dire parcourir. En programmation ce verbe signifie la transformation d'une chaine de caractère en un objet (Date dans votre cas). En fait, l'objet de ma réponse était juste de signaler que le cas de la question originale, c'est à dire la manipulation Excel en programmation, il vaut mieux passer les dates à Excel au format ISO. En utilisant ce format on résout l'incertitude d'interprétation due à la culture (américaine au lieu de français).

    dimanche 6 février 2011 09:05
  • Bonjour,

     

      j'ai été confronté à un problème similaire (via le VBA, reconstruction de dates - au format jj/mm/aaaa hh:mm:ss - à partir d'un fichier de données puis écriture de ces dates dans des cellules Excel): inversion entre le numéro de mois et le numéro de jour. Je m'en suis sorti en remplaçant (par exemple):

    • .cells(x,y).value = maDateStr

    par

    • .cells(x,y).value = Cdate( maDateStr )

    Cordialement

      Jean-Charles

    lundi 7 février 2011 15:37