Format date en MM/JJ/AA et non en JJ/MM/AA

Le
Alex
Bonjour,
Je rencontre un problème de format date qui apparait sous la forme MM/=
JJ/AA au lieu de JJ/MM/AA.
Pourtant, l'ensemble de mes cellules sont bien en paramètre date JJ/MM=
/AA.
Je précise également que je rencontre ce problème sur des ce=
llules "date" ayant une formule qui permet d'aller chercher la données=
via la formule "=GetValueWithADO("Chemin & nom du fichier";"Nom de la fe=
uille";adresse de la cellule")
Avez vous une solution pour résoudre ce problème de format date ?=
Est-ce lié à la fonction GetValueWithAdo ?
Merci par avance votre aide et suggestion.
Np,,e journée
Alex


  • Partager ce contenu :
Vos réponses
Trier par : date / pertinence
MichD
Le #26556208
Le 14/10/20 à 11:44, Alex a écrit :
Bonjour,
Je rencontre un problème de format date qui apparait sous la forme MM/JJ/AA au lieu de JJ/MM/AA.
Pourtant, l'ensemble de mes cellules sont bien en paramètre date JJ/MM/AA.
Je précise également que je rencontre ce problème sur des cellules "date" ayant une formule qui permet d'aller chercher la données via la formule "=GetValueWithADO("Chemin & nom du fichier";"Nom de la feuille";adresse de la cellule")
Avez vous une solution pour résoudre ce problème de format date ? Est-ce lié à la fonction GetValueWithAdo ?
Merci par avance votre aide et suggestion.
Np,,e journée
Alex



Bonjour,
Publie la procédure que tu utilises.
MichD
MichD
Le #26556095
Le 14/10/20 à 12:30, MichD a écrit :
Le 14/10/20 à 11:44, Alex a écrit :
Bonjour,
Je rencontre un problème de format date qui apparait sous la forme
MM/JJ/AA au lieu de JJ/MM/AA.
Pourtant, l'ensemble de mes cellules sont bien en paramètre date
JJ/MM/AA.
Je précise également que je rencontre ce problème sur des cellules
"date" ayant une formule qui permet d'aller chercher la données via la
formule "=GetValueWithADO("Chemin & nom du fichier";"Nom de la
feuille";adresse de la cellule")
Avez vous une solution pour résoudre ce problème de format date ?
Est-ce  lié à la fonction GetValueWithAdo ?
Merci par avance votre aide et suggestion.
Np,,e journée
Alex


Bonjour,
Publie la procédure que tu utilises.
MichD

J'ajoute, les données que tu importes provient de quelle application?
Qu’elle est le format du champ date dans le fichier source?
J'ai fait un test rapide, le fichier source avec des dates au format
américain. Je les importe dans un autre classeur, et les dates prennent
le format par défaut défini dans le panneau de configuration de Windows.
MichD
Alex
Le #26555389
Bonjour MichD,
Merci pour ton retour et ton aide.
Pour répondre à tes interrogations, voici mes retours :
* les données que tu importes provient de quelle application => Excel sur des fichiers différents du fichiers où je rencontre le problème.
* Qu’elle est le format du champ date dans le fichier source => le format date mis sur les fichiers est JJ/MM/AA, ainsi que sur mon cl asseur où le format date apparait malgré ce paramétrage en M M/JJ/AA
* La procédure que tu utilises : Il s'agit d'une procédure q ue tu m'avais donné sur le groupe et qui fonctionne très bien, ho rmis ce problème de format date en restitution. voici le code et instr uctions :
Fonction Extraire la valeur d'une cellule toute version Excel
Il est possible en utilisant une fonction personnalisée en VBA
d'extraire le contenu d'une cellule d'un fichier fermé comme ceci.
A ) Tu ouvres la fenêtre de l'éditeur de code VBA Raccourci clavi er :
Alt + F11
B ) à partir de la barre des menus / outils / références / t u coches
dans la liste la référence suivante :
"Microsoft Activex Data Objects 2.8 Library"
C ) Tu ajoutes un module standard avec la commande du menu : Insertion /
module
D ) Tu copies la fonction suivante dans un MODULE STANDARD du projetVBA
de ton classeur
'--------------------------------------------------------------
Function GetValueWithADO(Classeur$, Feuille$, Cell As Range)
'renvoie la valeur de la cellule Cell de la feuille Feuille
'du classeur fermé Classeur
Dim Conn As String, Rst As Object
Dim Requête As String, PlageBidon As Range
'prépare une "Plage de cellules bidon" pour la clause SELECT
'(un en-tête fictif et une ligne de données)
Set PlageBidon = Cell.Resize(2)
If Val(Application.Version) <= 11 Then
Conn = "Provider=Microsoft.Jet.OLEDB.4.0;" & _
"Data Source=" & Classeur & ";" & _
"Extended Properties=""Excel 8.0;HDR=No;"";"
Else
'prépare les commandes ADO et SQL
Conn = "Provider=Microsoft.ACE.OLEDB.12.0;" & _
"Data Source=" & Classeur & ";" & _
"Extended Properties=""Excel 12.0;HDR=No;"";"
End If
Requête = "SELECT * FROM [" & Feuille & "$" & PlageBidon.Address(0, 0) & "]"
'crée l'objet Recordset
Set Rst = CreateObject("ADODB.Recordset")
'va chercher l'info
Rst.Open Requête, Conn, 0, 1, 1
'et la renvoie
GetValueWithADO = Application.Clean(Rst(0))
'autre syntaxe possible
' GetValueWithADO =Application.Clean(RcdSet.GetString(NumRows:=1))
'nettoyage
Set Rst = Nothing
End Function
'--------------------------------------------------------------
E ) dans ta feuille de calcul, tu saisis ce type de formule :
=GetValueWithADO("Chemin & nom du fichier";"Nom de la feuille";adresse
de la cellule)
Tu obtiens une syntaxe comme ceci pour récupérer un contenu texte
=GetValueWithADO("c:UsersTon profilDocumentsClasseur1.xlsm";"Feuil2"; B2)
'Tu peux remplacer ceci "c:UsersTon profilDocumentsClasseur1.xlsm"
par la référence d'une adresse de cellule où se trouve l'inf ormation.
'Dans une procédure, tu insères une variable et tu vérifies si cette
valeur est exacte.
X = =GetValueWithADO("c:UsersTon
profilDocumentsClasseur1.xlsm";"Feuil2";B2)
Pour récupérer un contenu numérique, tu peux utiliser une de s 2 formules
suivantes :
=GetValueWithADO("c:UsersDenisDocumentsClasseur1.xlsm";"Feuil2";A2)*1
OU
=CNUM(GetValueWithADO("c:UsersDenisDocumentsClasseur1.xlsm";"Feuil2"; A2))
F ) au besoin, tu peux tirer cette formule sur une colonne ou une ligne
sans problème
G ) cela devrait fonctionner pour toutes les versions d'Excel, 32 ou 64
bits. (jamais tester sur 64 bits)
Merci par avance de ton aide précieuse.
Bonne journée
MichD
Le #26555388
Le 15/10/20 à 05:06, Alex a écrit :
=GetValueWithADO("c:UsersTon profilDocumentsClasseur1.xlsm";"Feuil2";B2)


J'ai testé la procédure.
A ) Une fonction personnalisée telle que "GetValueWithADO" ne peut pas
modifier le format d'une cellule de la feuille de calcul dans laquelle
elle est insérée.
B ) immédiatement après cette ligne de code, ajoute Debug.Print Rst(0)
Rst.Open Requête, Conn, 0, 1, 1
Debug.Print Rst(0)
C ) Tu vas pouvoir lire cette information dans la "fenêtre exécution"
que tu peux afficher à l'aide du menu "Affichge" ou par le raccourci
clavier Ctrl + G. L'information extraite du fichier source n'est pas
modifiée.
D ) pour retourner la date dans ta feuille de calcul, utilise ceci :
GetValueWithADO = CDate(Rst(0))
La fonction de conversion Cdate() retourne la date dans le format
par défaut défini dans le panneau de configuration de Windows.
E ) Je ne comprends pas vraiment pourquoi tu utilises ceci :
GetValueWithADO = Application.Clean(Rst(0))
À quoi sert Application.Clean si ton fichier source contient déjà
une date reconnue par Excel?
MichD
MichD
Le #26555387
Le 15/10/20 à 07:19, MichD a écrit :
Le 15/10/20 à 05:06, Alex a écrit :
=GetValueWithADO("c:UsersTon
profilDocumentsClasseur1.xlsm";"Feuil2";B2)

J'ai testé la procédure.
A ) Une fonction personnalisée telle que "GetValueWithADO" ne peut pas
modifier le format d'une cellule de la feuille de calcul dans laquelle
elle est insérée.
B ) immédiatement après cette ligne de code, ajoute Debug.Print Rst(0)
    Rst.Open Requête, Conn, 0, 1, 1
    Debug.Print Rst(0)
C ) Tu vas pouvoir lire cette information dans la "fenêtre exécution"
que tu peux afficher à l'aide du menu "Affichge" ou par le raccourci
clavier Ctrl + G. L'information extraite du fichier source n'est pas
modifiée.
D ) pour retourner la date dans ta feuille de calcul, utilise ceci :
    GetValueWithADO = CDate(Rst(0))
    La fonction de conversion Cdate() retourne la date dans le format
par défaut défini dans le panneau de configuration de Windows.
E ) Je ne comprends pas vraiment pourquoi tu utilises ceci :
    GetValueWithADO = Application.Clean(Rst(0))
    À quoi sert Application.Clean si ton fichier source contient déjà
une date reconnue par Excel?
MichD

J'ai omis, la cellule contenant la fonction doit être au format date,
utilise le format "Date au format court" avec un * devant le format.
Si la cellule est au format standard, tu auras la valeur numérique de la
date. Tu pourras affecter par la suite, le format de cellule que tu le
désires.
MichD
Alex
Le #26555386
Merci pour ce retour, en suivant les indications du points B et D cela a pe rmis de résoudre le problème de format date.
J'ai mis en commentaire le point E
Par contre, sur certaines colonnes, de mon tableau, il ne s'agissait pas de données de type "DATE" mais "TEXTE", et ces dernières ne remonte nt plus.
Peut on rajouter un if, avant la ligne GetValueWithADO = CDate(Rst(0)) a fin de permettre de nouveau les remonter texte ?
Si oui comment je l'écris en VB ?
Merci encore pour ton aide.
MichD
Le #26555385
Le 15/10/20 à 10:49, Alex a écrit :
Merci pour ce retour, en suivant les indications du points B et D cela a permis de résoudre le problème de format date.
J'ai mis en commentaire le point E
Par contre, sur certaines colonnes, de mon tableau, il ne s'agissait pas de données de type "DATE" mais "TEXTE", et ces dernières ne remontent plus.
Peut on rajouter un if, avant la ligne GetValueWithADO = CDate(Rst(0)) afin de permettre de nouveau les remonter texte ?
Si oui comment je l'écris en VB ?
Merci encore pour ton aide.


A )
La cellule contenant la fonction au format date court avec un * devant
la date.
B ) tu peux faire ceci :
If IsDate(Rst(0)) Then
GetValueWithADO = Rst(0)
Else
xxx = Application.Clean(Rst(0))
GetValueWithADO = Application.Clean(Rst(0))
End If
MichD
Alex
Le #26555384
Merci pour ce retour,
J'ai donc modifier comme suit les if :
If IsDate(Rst(0)) Then
GetValueWithADO = CDate(Rst(0)) 'Ici j'ai modifié
Else
xxx = Application.Clean(Rst(0))
GetValueWithADO = Application.Clean(Rst(0))
End If
Et cela fonctionne :)
Merci encore
Bonne fin de journée
MichD
Le #26555383
Le 15/10/20 à 11:46, Alex a écrit :
Merci pour ce retour,
J'ai donc modifier comme suit les if :
If IsDate(Rst(0)) Then
GetValueWithADO = CDate(Rst(0)) 'Ici j'ai modifié
Else
GetValueWithADO = Application.Clean(Rst(0))
End If
Et cela fonctionne :)
Merci encore
Bonne fin de journée


Cette ligne de code est inutile, c'était pour mes tests.
xxx = Application.Clean(Rst(0))
MichD
Poster une réponse
Anonyme