Conversion date - contourner paramêtre du panneau de config

Résolu
PlacageGranby Messages postés 402 Statut Membre -  
PlacageGranby Messages postés 402 Statut Membre -
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. cs_Le Pivert Messages postés 8437 Statut Contributeur 730
     
    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
    1. PlacageGranby Messages postés 402 Statut Membre 26
       
      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
      0
  2. cs_Le Pivert Messages postés 8437 Statut Contributeur 730
     
    Bonjour,

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

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

    0
    1. PlacageGranby Messages postés 402 Statut Membre 26
       
      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.
      0
  3. PlacageGranby Messages postés 402 Statut Membre 26
     
    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
    0
  4. cs_Le Pivert Messages postés 8437 Statut Contributeur 730
     
    Essaie ceci:

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


    a la place de:

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


    0
  5. Vous n’avez pas trouvé la réponse que vous recherchez ?

    Posez votre question
  6. cs_Le Pivert Messages postés 8437 Statut Contributeur 730
     
    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
    

    0
    1. PlacageGranby Messages postés 402 Statut Membre 26
       
      Quelle était ta configuration pour date courte dans le panneau de config pour ton test ?
      0
      1. cs_Le Pivert Messages postés 8437 Statut Contributeur 730 > PlacageGranby Messages postés 402 Statut Membre
         
        jj/MM/aaaa
        0
    1. PlacageGranby Messages postés 402 Statut Membre 26
       
      Ok, Excel est bizarre quand il s'y met....
      Je fais un test exhaustif des différentes possibilitées et comment Excel fait son interprétation.
      Je reviens avec le monstre....
      0
  7. PlacageGranby Messages postés 402 Statut Membre 26
     
    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.
    0
    1. PlacageGranby Messages postés 402 Statut Membre 26
       
      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....
      0