Mise à jour format date VBA

Résolu/Fermé
Adranix - 17 oct. 2022 à 11:56
 Adranix - 21 oct. 2022 à 16:16

Bonjour,

J'ai un champ date extrait d'une BDD qui ne se met pas au bon format, même en appliquant le format à la colonne Excel (obtenu dd/MM/yyyy au lieu de yyyy/MM/dd voulu).

Il faut double cliquer sur chaque cellule pour que le format ce mette à jour, ce qui n'est pas viable (l'extraction pouvant être de plusieurs centaines voire milliers de lignes).

Je cherche un moyen de mettre à jour automatiquement cette colonne via VBA, soit en simulant le double clic, soit en forçant le format date.

J'ai essayé différentes solutions proposées par notre ami Google, mais rien n'a fonctionné correctement pour le moment.

Le résultat le plus probant actuellement étant lié au code:

Resultat = Range("H:H").value
Application.ActiveWorkbook.Worksheets("data").Range("H:H")) = Format("Resultat", "yyyy-mm-dd")
Application.ActiveWorkbook.Worksheets("data").Range("H1:H").NumberFormat = "yyyy-mm-dd"

Mais cela m'affiche juste "Resultat" dans toutes les cellules de la colonne...

J'en arrive donc à faire appel aux sachants que vous êtes pour m'aider. 

Merci.


Windows / Chrome 106.0.0.0

A voir également:

10 réponses

ccm81 Messages postés 10824 Date d'inscription lundi 18 octobre 2010 Statut Membre Dernière intervention 29 février 2024 2 400
17 oct. 2022 à 15:12

Bonjour

essaies

1. tu met 1 dans une cellule (par ex J2)

2. tu selectionnes J2 puis Edition/Copier

3. Selectionnes ta colonne dates

4. Edition/Collage spécial/Multiplication

5. Eventuellement reformater ta cellue date au bon format

Cdlmnt

0

Bonjour,

Merci pour l'astuce, ça pourrait servir pour d'autres cas, mais ici, ça ne fonctionne pas.

Soit il me remet le format dd/MM/yyyy, soit il sort en erreur.

D'ailleurs, je viens de me rendre compte d'ailleurs, que j'avais omis une partie importante:

Mon extraction de BDD se fait dans un état Excel.

Voici comment se présente la cellule:

Je dépose mon fichier de base sur le serveur, et lui, me sort l'extraction de ma requête mise en forme selon le fichier.  

En base, ma date est au format dd/MM/yyyy mais je n'arrive pas à lui indiquer de la formater correctement sans qu'il sorte en erreur.

D'où l'idée de changer le format dans l'état Excel, mais là encore, s'il accepte la demande sans problème, il ne l'affiche pas correctement. Il faut double cliquer sur chaque cellule pour mettre à jour dans le bon format. 

Voici le pourquoi de la demande en VBA, seul moyen potentiel trouvé pour qu'il fasse ce que je lui demande :D 

0
Le Pingou Messages postés 12029 Date d'inscription mercredi 11 août 2004 Statut Contributeur Dernière intervention 19 février 2024 1 424
Modifié le 18 oct. 2022 à 14:16

Bonjour,

Pouvez-vous mettre le fichier (la partie qui fait problème) sur Accueil de Cjoint.com  et poster le lien.

Note: essayer avec cette ligne d'instruction:

 Columns("H:H").NumberFormat = "yyyy-mm-dd;@"

0

Bonjour, 

Voici le lien pour le fichier d'origine:

https://www.cjoint.com/c/LJtnCk6ljKF

Et pour le résultat obtenu:

https://www.cjoint.com/c/LJtnC7jD31F

Merci.

0

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

Posez votre question
ccm81 Messages postés 10824 Date d'inscription lundi 18 octobre 2010 Statut Membre Dernière intervention 29 février 2024 2 400
Modifié le 19 oct. 2022 à 16:25

Bonjour

Je ne comprends pas bien : le fichier Etats ne contient aucune donnée en colonne H, la manip indiquée dans mon premier post fonctionne dans le fichier Résultats (colonne H)

https://www.cjoint.com/c/LJtoqf1cRiB

RQ. Dans ton fichier Résultats tes dates en colonne H sont de type texte (calées à gauche dans les cellules). Est ce que par hasard, tu voudrais les transformer au format aaaa-mm-jj mais en conservant le type texte ?

Cdlmnt

0

Bonjour,

Comme je le disais précédemment, le fichier état, est le fichier (état Excel) stocké sur le serveur pour la mise en forme. 

Il va servir au serveur pour savoir à quel endroit il doit placer telle ou telle donnée, résultat de la requête (entrées variables => dates PI_1 et PI_2 du fichier état, mise en correspondance avec la police identifiée dans la colonne du même nom).

Mon champ en base est un varchar (probablement pour cela qu'il sort en format texte), mais je n'arrive pas à forcer la conversion au format date, que ce soit via SQL ou via Excel.

Le SQL met en erreur le fichier résultat et Excel, bizarrement, ne prend pas en compte le formatage de la cellule/colonne du fichier état (alors que normalement il le fait). 

La solution proposée est appréciable, et fonctionne effectivement sur le résultat en lui même, mais globalement, j'ai besoin que cela fonctionne depuis le fichier état, afin que le formatage se fasse sur tous les fichiers résultats futurs. 

0
Le Pingou Messages postés 12029 Date d'inscription mercredi 11 août 2004 Statut Contributeur Dernière intervention 19 février 2024 1 424
19 oct. 2022 à 21:48

Bonjour,

Qu'elle est la requête que vous utilisez pour récupérer les données du fichier d'origine vers le fichier résultat ?


0

Bonjour,

En SQL:

select delegataires.nom , gsl.champ65 , gsl.champ64 , polices.nomscrp , gsl.champ49 , polices.netannuel , gsl.champ19 , sin.nsin , gsl.champ47 , gsl.champ17 , gsl.champ16 , gsl.champ46 , sin.couteval , sin.cout , sin.etat , sin.etat , sin.codenat , polices.police , gsl.champ67 , polices.coderisque , gsl.champ70 , gsl.champ69 , sin.cout , cast(concat(right(sin.champ1,4),'-', left(right(sin.champ1,7),2), '-', right(sin.champ1,2)) as date) dateouv , polices.id  from   polices , sin , gsl , delegataires where polices.police = sin.police and polices.police = gsl.police and ((polices.`apporteur2` = delegataires.`numero` and (polices.`apporteur2` != '' and polices.`apporteur2` is not null)) or (polices.`apporteur` = delegataires.`numero` and (polices.`apporteur2` = '' or polices.`apporteur2` is null))) and sin.nsin = gsl.nsin and polices.societeuser = 'gsl' and sin.societeuser = 'gsl' and gsl.societeuser = 'gsl' and delegataires.societeUser = 'gsl' and((  sin.police = '?' )and(  sin.dateouv >= '?' and  sin.dateouv <= '?'  ))

Pour le lien avec le fichier état:

champs delegataires.nom non false non gsl.champ65 non false non gsl.champ64 non false non polices.nomscrp non false non gsl.champ49 non false non polices.netannuel non false non gsl.champ19 non false non sin.nsin croissant false non gsl.champ47 non false non polices_param.champ19 non false non gsl.champ17 non false non gsl.champ16 non false non gsl.champ46 non false non sin.couteval non false non sin.cout non false non polices_param.champ81 non false non polices_param.champ80 non false non sin.etat non false non sin.etat non false non sin.codenat non false non polices.police non false non gsl.champ67 non false non polices.coderisque non false non gsl.champ70 non false non gsl.champ69 non false non sin.cout non false non dateouv non false non tri groupe libelles courtier¤num¤hono¤souscripteur¤victime¤primenette¤dateouv¤refgsl¤refcompa¤codepostal¤circonstancesin¤nature¤garantiedeclenchee¤eval¤reglement¤coass¤aperiteur¤etat¤statut¤code_gar¤numgsl¤souscatreass¤risque¤prov_init¤benef¤sinregtot¤datesurv¤ associations ¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤ETATSI;1:lib¤¤NATURE;1:libelle¤¤¤¤¤¤¤¤ devises ¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤
0
Le Pingou Messages postés 12029 Date d'inscription mercredi 11 août 2004 Statut Contributeur Dernière intervention 19 février 2024 1 424
20 oct. 2022 à 23:23

Bonjour,

Merci du retour. Je n'arrive pas à comprendre ces informations, désolé.

Je vous propose d'essayer le code suivant sur la colonne [H:H] de votre classeur [Résultats.xls]

Sub FormatDate()
For c = 7 To Cells(Rows.Count, 2).End(xlUp).Row
    Cells(c, 8) = Format(Cells(c, 8), "yyyy-mm-dd;@")
    Cells(c, 8).NumberFormat = "yyyy-mm-dd"
Next c
End Sub

0

Bonjour,

Merci beaucoup, cela fonctionne, pour les résultat comme pour le fichier Etat. 

0