Problème des conversion de références en date sous csv

Résolu/Fermé
Pascal.b10 Messages postés 5 Date d'inscription mercredi 8 juin 2022 Statut Membre Dernière intervention 9 juin 2022 - 8 juin 2022 à 11:39
 Pascal.b10 - 16 juin 2022 à 11:59
Bonjour
J'ai un tableau Excel dans lequel des milliers de références sont comme ceci 01-0520, 15-2421, etc. (2 chiffres, tiret, 4 chiffres). Le problème c'est pour les références qui sont du type 06-2140, 10-4100, etc (premier nombre de 01 à 12 ET deuxième nombre supérieur à 1900)
Au moment de la conversion Excel en csv, le format reconnu est une date en mois et année
Mes références se transforment ainsi 10-4100 en 01/10/4100. Les autres références ne sont pas reconnues donc ne sont pas transformées en dates (mois supérieurs à 12 ou dates inférieures à 1900 comme 01-0520 ou 15-2140)
Le fichier csv est exporté vers un système de gestion qui ne reconnait donc plus les références transformées en dates
Je précise qu'il y a des milliers de références sur un tableau qui comporte 125 colonnes et plus de 5000 lignes. Impossible de tout vérifier d'autant plus que même si on force les références, en csv, elles sont immédiatement retransformées en dates. C'est un peu galère
Avez-vous une solution ?
Merci d'avance
A voir également:

10 réponses

jee pee Messages postés 40281 Date d'inscription mercredi 2 mai 2007 Statut Modérateur Dernière intervention 1 octobre 2024 9 351
Modifié le 8 juin 2022 à 12:54
Bonjour,

Le fichier excel d'origine vient d'où ? Car j'ai essayé avec une colonne format texte (ne pas laisser standard), l'enregistrement en csv est correct.

Il faudrait nous donner un fichier exemple, anonymisé au besoin, de quelques lignes pour l'étudier.

0
brucine Messages postés 17003 Date d'inscription lundi 22 février 2021 Statut Membre Dernière intervention 1 octobre 2024 2 412
8 juin 2022 à 13:04
Bonjour,

Il n'y aura pas moyen sans connaître la structure exacte du fichier CSV et ses délimiteurs.

J'ai eu un problème comparable avec une syntaxe 3989394|2021-10-07 19:32:46.0| où il s'agissait de remplacer le champ date par AAAAMMJJHHMM.

L'astuce passe par un batch où on tronque la variable de sortie sur le délimiteur et le nombre de caractères, dans le cas d'espèce:


@ECHO OFF
SETLOCAL ENABLEDELAYEDEXPANSION
FOR %%f in (*.csv) DO (
SET "name=%%f"
)
FOR /f "tokens=1,2,* usebackq delims=|" %%a IN ("%name%") DO (
SET "Row2=%%b"
SET "Row2=!Row2:-=!"
SET "Row2=!Row2: =!"
SET "Row2=!Row2::=!"
SET "Row2=!Row2:.=!"
SET "Row2=!Row2:~0,12!
SET "Row1=%%a"
ECHO "%%~a"^|!Row2!^|%%c>>"NEW%name%"
)
)
DEL "%name%
REN "NEW%name%" "%name%"

GOTO :EOF


La 2ème sentence SET Row extrait tout ce qu'il y a avant le tiret, la deuxième fait le remplacement par soustraction, la 4ème et la 5ème ne sont pas pertinentes dans ton cas de figure, mais je dois me servir de la 6ème pour repérer les chiffres que je dois couper (4100 en 41 00): 0 y est le caractère à partir duquel je dois partir de la gauche, 12 est le caractère où je coupe.
La scission se fait à partir de la droite si je spécifie -n.

Mais pour répondre précisément, il faut un échantillon même bidonné du fichier avec la partie de la ligne d'en-tête pertinente et d'une ligne à traiter et de ses colonnes.
0
jee pee Messages postés 40281 Date d'inscription mercredi 2 mai 2007 Statut Modérateur Dernière intervention 1 octobre 2024 9 351
8 juin 2022 à 13:11
Bonjour, j'ai interprété la question comme partant d'un fichier excel pour générer un fichier csv. Car du csv vers excel, il serait simple de le renommer en .txt, de l'ouvrir, et via le formatage manuel des colonnes de faire une colonne texte.
0
brucine Messages postés 17003 Date d'inscription lundi 22 février 2021 Statut Membre Dernière intervention 1 octobre 2024 2 412 > jee pee Messages postés 40281 Date d'inscription mercredi 2 mai 2007 Statut Modérateur Dernière intervention 1 octobre 2024
8 juin 2022 à 13:19
Bonjour,

Oui, je ne vois pas clair et j'ai lu à l'envers.
0
jee pee Messages postés 40281 Date d'inscription mercredi 2 mai 2007 Statut Modérateur Dernière intervention 1 octobre 2024 9 351 > brucine Messages postés 17003 Date d'inscription lundi 22 février 2021 Statut Membre Dernière intervention 1 octobre 2024
8 juin 2022 à 13:22
oui moi, attendons le retour de Pascal.
0
Pascal.b10 Messages postés 5 Date d'inscription mercredi 8 juin 2022 Statut Membre Dernière intervention 9 juin 2022
8 juin 2022 à 15:43
Bonjour à tous
Merci pour vos réponses.
Je n'ai pas assez de connaissances pour faire un programme comme celui cité plus haut par Brucine ni même pour en comprendre le sens
Le fichier de base d'Excel (utilisé dans l'entreprise) sert à mettre à jour des tarifs de fournisseurs différents avant le transfert vers le système de gestion commerciale. Il y a une cinquantaine de fournisseurs dont une dizaine qui ont entre 50 et 2500 références. Il n'y a que sous Excel qu'on peut faire ce travail du fait de la diversité des présentations des tarifs qui nous sont communiqués
Le principe : A partir des tarifs fournisseurs, reçus régulièrement en cours d'année et recopiés dans un tableau, Excel fait le tri des infos et remplace les anciennes par des nouvelles, en créé de nouvelles ou supprime les périmées. Ce fichier Excel fait 40 Mo. Jusqu'à maintenant, les mises à jours manuelles prenaient une à deux semaines tous les 1 à 2 mois. Aujourd'hui, ça prend 30 minutes à 1 heure grand maxi pour 2 ou 3000 références et sans erreur (définitions, tarifs, dates, etc. etc. sur 125 colonnes) SAUF pour quelques fournisseurs dont les références des articles sont sous format CC-CCCC (ex 10-4100). Lors de la conversion en csv, certaines références sont prises automatiquement pour des dates (Ex 10-4100 sous Excel devient 01/10/4100 en format csv). Le système de gestion étant sur un serveur distant, la mise à jour globale ne peut se faire qu'en csv avec le problème des dates qui remplacent systématiquement certaines références
Je n'ai pas le temps immédiatement de vous faire des saisies d'écrans des zones qui posent problème
Je vais m'y atteler dès que possible et mettre tout ça en ligne
En tous cas, vous avez été très réactif à mon problème et je vous en remercie
Je vous tiens au courant et dans l'attente d'une solution, nous allons continuer à faire des corrections ponctuelles et manuelles sur le site distant en espérant ne pas faire d'erreur ou d'omissions
Très cordialement
Pascal
0
jee pee Messages postés 40281 Date d'inscription mercredi 2 mai 2007 Statut Modérateur Dernière intervention 1 octobre 2024 9 351
8 juin 2022 à 16:07
"faire des saisies d'écrans des zones qui posent problème" non ce qu'il nous faut c'est un extrait du fichier excel avec des lignes qui posent soucis et des lignes sans problème.

A mettre sur un site comme https://cjoint.com et donner le lien sur le forum
0
Pascal.b10 Messages postés 5 Date d'inscription mercredi 8 juin 2022 Statut Membre Dernière intervention 9 juin 2022
8 juin 2022 à 16:10
Re-bonjour à tous
J'ai pris le temps de faire deux saisies d'écrans pour expliquer mon problème
J'ai Excel 10 mais je pense que ce sera pareil avec une version plus récente
J'espère surtout que l'image que je viens de faire va s'afficher correctement. Je ne suis pas pro des forums et de leur utilisation
Merci encore pour votre aide
Pascal


0

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

Posez votre question
jee pee Messages postés 40281 Date d'inscription mercredi 2 mai 2007 Statut Modérateur Dernière intervention 1 octobre 2024 9 351
8 juin 2022 à 16:33
J'avais bien compris ton problème. Sur l'exemple, as tu essayé en selectionnant la colonne C de lui donner un format texte, puis enregistrer le .csv et ouvrir le .csv, non pas dans excel mais avec le bloc notes pour voir le fichier basique, non réinterprété par excel.

Mais le fichier excel d'exemple nous sera plus utile
0
Pascal.b10 Messages postés 5 Date d'inscription mercredi 8 juin 2022 Statut Membre Dernière intervention 9 juin 2022
9 juin 2022 à 15:04
Bonjour jee pee
Effectivement, en ouvrant le fichier csv dans le bloc note, on conserve les données correctes. Je n'avais pas vérifié
En fait, le csv est correct, c'est Excel qui transforme les formats
Le soucis c'est pour le transfert vers le système de gestion distant, on ouvre le csv dans Excel. Il y a sans doute une autre méthode mais je ne l'ai pas trouvée (rectification : pas ENCORE trouvée)
Je ne peux pas vous soumettre le tableau Excel de base pour 2 raisons. 1, il est très grand (125 colonnes et plus de 5000 lignes) et 2, ces données sont confidentielles. Mais, pour ce problème de modification du format, l'exemple ci-dessus est tout à fait représentatif.
Je vais essayer de trouver un moyen pour que Excel ne réinterprète pas les données comme des dates sinon une autre méthode de transfert
En tous cas, un grand merci pour votre aide
Pascal
0
brucine Messages postés 17003 Date d'inscription lundi 22 février 2021 Statut Membre Dernière intervention 1 octobre 2024 2 412
9 juin 2022 à 16:25
Bonjour,

Tests faits chez moi (Excel 2019), c'est même pire que ça: même avec une cellule correctement paramétrée au format standard, 10-4100 est modifié en date dès qu'on enregistre le fichier que le format de destination soit xls ou csv, que l'on essaie d'importer ou exporter, que l'on tente dans ce cas différents formats CSV, que l'on s'attaque aux options de calcul automatique et de correction automatique des formules.

Cette situation est documentée par Microsoft qui déclare qu'il est impossible de changer ce comportement, n'existant que 3 voies:

-soi-disant créer une nouvelle feuille, formater préalablement la colonne de destination au format texte ou standard, puis faire un copier de la colonne de départ, copie simple ou spéciale: je n'en crois pas un mot.

-changer la cellule "coupable": la préconisation Microsoft est de placer une apostrophe devant; '10-4100, qui est invisible dans la formule; on peut pour le même résultat faire rechercher-remplacer du tiret du 6 par le tiret du 8 mais, dans tous les cas, si la base de données ne reconnaît les articles qu'au format original, on l'a dans le dos sauf évidemment à changer le format de la base de données pour qu'elle lise les références sous ce type de format, ce n'est peut-être ni commode, ni possible.

-exporter le fichier xlsx vers texte, là on n'a plus le problème, mais à condition bien sûr que l'on puisse importer dans la base de données non pas un fichier csv délimité, mais ce fichier txt délimité.

Il se peut aussi qu'en présence d'un script d'importation élaboré (via par exemple VBS) on puisse changer le format du champ csv concerné à la volée (ou dans le cas de l'utilisation de l'apostrophe faire de même pour la supprimer), j'ai déjà vu faire, mais ça dépasse mes compétences.
0
tontong Messages postés 2556 Date d'inscription mercredi 3 février 2010 Statut Membre Dernière intervention 5 septembre 2024 1 057
9 juin 2022 à 16:00
Bonjour,
Un petit bout de test sur les valeurs données en exemple montre qu'excel ne réinterprète pas "en date" si:
-Au lieu d'ouvrir le csv dans Excel on fait une importation des données dans excel en cochant bien "texte" à l'étape 2.
- Ou en ouvrant le csv avec le bloc notes ou Wordpad et en faisant un copier/coller des données dans des cellules excel préalablement mises au format Texte.
0
jee pee Messages postés 40281 Date d'inscription mercredi 2 mai 2007 Statut Modérateur Dernière intervention 1 octobre 2024 9 351
9 juin 2022 à 16:08
oui il existe différentes méthodes, moi je change l'extension .csv en .txt et à l'ouverture du .txt on est en mode manuel où on peut paramétrer le type des colonnes
0
brucine Messages postés 17003 Date d'inscription lundi 22 février 2021 Statut Membre Dernière intervention 1 octobre 2024 2 412
9 juin 2022 à 17:12
Bonjour,

Je n'ai pas compris ton opération.

Pour importer les données xls dans un csv, il faut commencer par ouvrir dans Excel un nouveau fichier enregistré au format csv.

Et où en tout cas chez moi l'opération conduit au même résultat: tout va bien jusqu'à ce qu'on enregistre et ouvre à nouveau.

La solution semble en effet, nous sommes plusieurs à le dire, par exporter xls en txt à condition que la base de données veuille bien importer txt.
0
tontong Messages postés 2556 Date d'inscription mercredi 3 février 2010 Statut Membre Dernière intervention 5 septembre 2024 1 057 > brucine Messages postés 17003 Date d'inscription lundi 22 février 2021 Statut Membre Dernière intervention 1 octobre 2024
9 juin 2022 à 17:37
Je crois avoir parlé d'importation dans Excel à partir d'un csv. On peut ainsi spécifier "Texte" pour une colonne.
0
brucine Messages postés 17003 Date d'inscription lundi 22 février 2021 Statut Membre Dernière intervention 1 octobre 2024 2 412 > tontong Messages postés 2556 Date d'inscription mercredi 3 février 2010 Statut Membre Dernière intervention 5 septembre 2024
9 juin 2022 à 17:41
C'est donc que comme moi au départ tu auras mal lu: c'est l'inverse qui est souhaité.
0
jee pee Messages postés 40281 Date d'inscription mercredi 2 mai 2007 Statut Modérateur Dernière intervention 1 octobre 2024 9 351
9 juin 2022 à 16:30
Si le destinataire ouvre le fichier que tu lui transmets sous Excel, pourquoi diable passer par un fichier .csv, tu lui envois le fichier Excel.

0
Pascal.b10 Messages postés 5 Date d'inscription mercredi 8 juin 2022 Statut Membre Dernière intervention 9 juin 2022
9 juin 2022 à 21:05
Bonsoir à tous
J'ai fait un essai en dupliquant le fichier csv et en modifiant une copie avec l'extension txt, en l'ouvrant dans Excel tout en prenant soin de formater les colonnes en Texte (expliqué par jee pee plus haut). Les données ne sont pas transformées en dates. Cette opération ne permet que de procéder à des vérifications car la base de données de gestion commerciale distante ne peut, apparemment (en cours de vérification), être mise à jour qu'avec un fichier csv (issu de Excel)
Ce fichier initial en csv ne sera pas ouvert pour conserver les bons formats lors de son transfert vers le système de gestion
La personne qui fait les mises à jour va vérifier tout cela et me tiendra au courant
Merci pour votre précieuse aide
0
Bonjour à tous
Merci d'avoir pris le temps de chercher une solution
Après vérification, le système de gestion distant ne peut être mis à jour que par un fichier csv
EN RESUME : Dans l'entreprise la mise à jour des tarifs (plus de 5000 lignes) est faite grâce à un fichier Excel qui trie les informations issues des fournisseurs, les met à jour et créé un tableau sur 125 colonnes. Celui-ci est ensuite recopié (collage valeurs) dans un fichier Excel, enregistré en csv et (sans l'ouvrir) transféré sur le système de gestion. Ca fonctionne très bien, quelles que soient les informations
Le problème est donc résolu
Encore un grand merci
0