Conversion date - contourner paramêtre du panneau de config

Résolu/Fermé
PlacageGranby Messages postés 393 Date d'inscription mercredi 26 mars 2014 Statut Membre Dernière intervention 7 mars 2019 - Modifié par PlacageGranby le 10/12/2015 à 17:22
PlacageGranby Messages postés 393 Date d'inscription mercredi 26 mars 2014 Statut Membre Dernière intervention 7 mars 2019 - 11 déc. 2015 à 19:34
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.
A voir également:

7 réponses

cs_Le Pivert Messages postés 7904 Date d'inscription jeudi 13 septembre 2007 Statut Contributeur Dernière intervention 14 août 2024 729
10 déc. 2015 à 19:50
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
PlacageGranby Messages postés 393 Date d'inscription mercredi 26 mars 2014 Statut Membre Dernière intervention 7 mars 2019 26
10 déc. 2015 à 20:20
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
cs_Le Pivert Messages postés 7904 Date d'inscription jeudi 13 septembre 2007 Statut Contributeur Dernière intervention 14 août 2024 729
10 déc. 2015 à 18:13
Bonjour,

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

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

0
PlacageGranby Messages postés 393 Date d'inscription mercredi 26 mars 2014 Statut Membre Dernière intervention 7 mars 2019 26
10 déc. 2015 à 19:16
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
PlacageGranby Messages postés 393 Date d'inscription mercredi 26 mars 2014 Statut Membre Dernière intervention 7 mars 2019 26
Modifié par PlacageGranby le 10/12/2015 à 19:31
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
cs_Le Pivert Messages postés 7904 Date d'inscription jeudi 13 septembre 2007 Statut Contributeur Dernière intervention 14 août 2024 729
10 déc. 2015 à 20:59
Essaie ceci:

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


a la place de:

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



0

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

Posez votre question
cs_Le Pivert Messages postés 7904 Date d'inscription jeudi 13 septembre 2007 Statut Contributeur Dernière intervention 14 août 2024 729
11 déc. 2015 à 11:09
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
PlacageGranby Messages postés 393 Date d'inscription mercredi 26 mars 2014 Statut Membre Dernière intervention 7 mars 2019 26
Modifié par PlacageGranby le 11/12/2015 à 14:42
Quelle était ta configuration pour date courte dans le panneau de config pour ton test ?
0
cs_Le Pivert Messages postés 7904 Date d'inscription jeudi 13 septembre 2007 Statut Contributeur Dernière intervention 14 août 2024 729 > PlacageGranby Messages postés 393 Date d'inscription mercredi 26 mars 2014 Statut Membre Dernière intervention 7 mars 2019
11 déc. 2015 à 14:50
jj/MM/aaaa
0
cs_Le Pivert Messages postés 7904 Date d'inscription jeudi 13 septembre 2007 Statut Contributeur Dernière intervention 14 août 2024 729
11 déc. 2015 à 15:03
0
PlacageGranby Messages postés 393 Date d'inscription mercredi 26 mars 2014 Statut Membre Dernière intervention 7 mars 2019 26
11 déc. 2015 à 16:11
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
PlacageGranby Messages postés 393 Date d'inscription mercredi 26 mars 2014 Statut Membre Dernière intervention 7 mars 2019 26
11 déc. 2015 à 19:30
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
PlacageGranby Messages postés 393 Date d'inscription mercredi 26 mars 2014 Statut Membre Dernière intervention 7 mars 2019 26
Modifié par PlacageGranby le 11/12/2015 à 19:41
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