Conversion date - contourner paramêtre du panneau de config

Résolu
Bonjour,

Ma question :
il y a t-il un moyen de convertir un string d'un textbox dans une cellule Excel sans être à la merci du panneau de configuration.

Mon histoire :
Je faisait un Cdate sur une date provenant d'un textbox en format JJ-MM-AA et étrangement, il m'inversait l'année et le jour dans la cellule excel.

Après un peu de recherche, je comprend que lors de l'upgrade de mon poste de winXP a win7, mes paramètres de date avait passé de JJ-MM-AA à AAAA-MM-JJ et donc cdate ne fonctionnait plus avec ma saisie.

Donc, j'ai corrigé le panneau de config, mais je comprend que si quelqu'un d'autre utilise le fichier, il y a risque d'erreur s'il n'a pas les même config.

Donc, il faudrait que mon textbox sache la config de l'utilisateur pour demander selon le cas une saisie JJMMAA ou AAMMJJ selon le cas pour que Cdate fonctionne, ou carrément trouver une façon de convertir sans se soucier du panneau de config.

7 réponses

  1. Donc, voila mon test
    https://www.cjoint.com/c/ELlsz43JNMP

    Prendre en note que je suis en francais(Canada) et non pas francais(France).

    Et comme mentionné, sur mon test, les textbox ont toujours été interprété comme une date, alors que dans mon fichier initial, le textbox est interprété comme du texte.....

    Au final, je suis largué, il y a un autre facteur qui m'échappe.
    1. Donc, il y a deux solutions pour l'instant.
      Soit on utilise Cdate pour permettre n'importe quelle format pour la saisie, mais il faut programmer les paramètre de date de windows selon le format choisi.

      Soit, on évite Cdate, mais il faut absolument utiliser AAAA-MM-JJ comme format de saisie et Excel ignore carrément la config de date de windows.

      Pour ma part, les deux solutions sont mauvaises.
      Cdate m'empèche d'utiliser le fichier sans courrir partout pour uniformiser les config windows.
      Donc, la seule autre solution est de modifier la saisie pour prendre un format qui est différent du document originale.
      Je crois que je vais mettre 3x textbox pour JJ MM AA, et que je vais recontruire un AAAA-MM-JJ moi même....
  2. Contributeur
    Re,
    Je me suis mis dans la même configuration que toi, avec ce code j'obtiens une cellule au Format Date:

    Private Sub CommandButton1_Click()
    TextBox1.Value = "2010-12-15"
     With Worksheets("Feuil1")
     .Range("A1").Value = TextBox1.Value
     .Range("A1").NumberFormat = "General"
     .Range("A1").NumberFormat = "dd/mm/yyyy;@"
     End With
    End Sub
    

    1. Quelle était ta configuration pour date courte dans le panneau de config pour ton test ?
  3. Contributeur
    Essaie ceci:

    Selection.NumberFormat = "dd/mm/yyyy;@"


    a la place de:

    Selection.NumberFormat = ""m/d/yyyy""


    1. Contributeur
      Un peu plus explicite avec un exemple:

      Private Sub CommandButton1_Click()
      TextBox1.Value = "2010-12-15"
      Range("A1").Value = TextBox1.Value
      Selection.NumberFormat = "General"
           Selection.NumberFormat = ""m/d/yyyy""
      End Sub


      Il faut mettre les dates comme ceci séparé par / :"m/d/yyyy" pour que cela fonctionne!!!
      1. malheureusement, j'hérite d'une chaine texte dans ma cellule et non d'une date avec le code suivant.
        For I = 1 To Nb_facture
            With Worksheets("Cheque_Recu")
                .Range("A" & DL_Cheque).Value = LB_Cheque.List(I - 1, 0)
                .Range("B" & DL_Cheque).Value = T_Cheque_no
                .Range("C" & DL_Cheque).Value = T_Cheque_DateChq
                .Range("C" & DL_Cheque).NumberFormat = "General"
                .Range("C" & DL_Cheque).NumberFormat = "d/m/yyyy"
                .Range("D" & DL_Cheque).Value = T_Cheque_DateRecu
                .Range("E" & DL_Cheque).Value = LB_Cheque.List(I - 1, 1)
                .Range("F" & DL_Cheque).Value = LB_Cheque.List(I - 1, 2)
            End With
            DL_Cheque = DL_Cheque + 1
        Next I
    2. Bonjour,

      Donc J'ai des textbox sur un userform
      T_Cheque_datechq
      T_Cheque_daterecu

      J'inscrit dans mon textbox 10-12-15
      et le resultat de Cdate va mettre dans ma colonne C
      2010-12-15 si j'ai AAAA-MM-JJ comme date courte
      dans mon panneau de configuration et
      10-12-2015 si j'ai JJ-MM-AAAA comme date courte

      Donc, sans même toucher au code, je peux avoir deux valeurs différentes selon la config de date dans windows. Le problème n'est pas seulement la forme, mais plutôt le contenu.
      Les ordinateurs n'ont pas nécessairement toute la même config et j'aimerais ne pas avoir a uniformiser la configuration de tout les ordinateurs.

      Le code
      Private Sub CommandButton1_Click()
      Dim DL_Cheque, DL_Depot As Long
      Dim Nb_facture As Integer
      Dim I As Long
      
      Nb_facture = LB_Cheque.ListCount
      DL_Cheque = Worksheets("Cheque_Recu").Range("A65536").End(xlUp).Row + 1
      DL_Depot = Worksheets("Preparer_depot").Range("B65536").End(xlUp).Row + 1
      
      For I = 1 To Nb_facture
          With Worksheets("Cheque_Recu")
              .Range("A" & DL_Cheque).Value = LB_Cheque.List(I - 1, 0)
              .Range("B" & DL_Cheque).Value = T_Cheque_no
              .Range("C" & DL_Cheque).Value = CDate(T_Cheque_DateChq)
              .Range("D" & DL_Cheque).Value = CDate(T_Cheque_DateRecu)
              .Range("E" & DL_Cheque).Value = LB_Cheque.List(I - 1, 1)
              .Range("F" & DL_Cheque).Value = LB_Cheque.List(I - 1, 2)
          End With
          DL_Cheque = DL_Cheque + 1
      Next I
      
      If Cheque_total > 0 Then
          Worksheets("Preparer_Depot").Range("B" & DL_Depot).Value = T_Cheque_Client
          Worksheets("Preparer_Depot").Range("C" & DL_Depot).Value = CDate(T_Cheque_DateChq)
          Worksheets("Preparer_Depot").Range("D" & DL_Depot).Value = Cheque_total
      End If
      
      Worksheets("Cheque_Recu").Range("A" & DL_Cheque).Select
      UF_Cheque.Hide
      
      End Sub
      1. Contributeur
        Bonjour,

        Pour l'avoir dans le bon format dans la cellule Excel:

        Selection.NumberFormat = "General"
             Selection.NumberFormat = "m/d/yyyy"

        1. Bonjour, merci pour la réponse rapide, mais je ne vois pas le lien avec le problème.

          J'imagine que ma question n'est peut-être pas assez spécifique.