Créer un fichier excel type depuis un XML [Résolu/Fermé]

Signaler
-
 anthony -
Bonjour,

http://www.cijoint.fr/cjlink.php?file=cj201106/cij33w9dx4.zip
voici un fichier XML transmis par un fournisseur. Celui ci est utilisé lors d'un import dans une base excel et une macro va chercher les infos présentent en colonnes F, K, R, U, W, X et AA (je ne sais pas si c'est important mais je l'indique au cas où)

l'idée est donc d'obtenir la même configuration de fichier xml quelque soit mon fournisseur. Certains utilisent actuellement des bases excel pour afficher les valeurs des colonnes énoncées et pour ne pas que chacun m'envoie des fichiers xml configurés différemment je voudrai leur fournir le fichier excel qui permettrai d'obtenir le fichier xml directement exploitable par la macro actuelle

est ce réalisable ?

20 réponses

pour aider, voici le fichier qu'un fournisseur utilise
http://www.cijoint.fr/cjlink.php?file=cj201106/cijNvuEQwI.xls
il faudrait donc que lorsque ce fichier est converti en xml on obtient la même configuration des colonnes énoncées ci dessus
Messages postés
9745
Date d'inscription
mercredi 11 août 2004
Statut
Contributeur
Dernière intervention
24 juillet 2020
1 063
Bonjour,
Je pense qu'il ne s'agit pas d'un problème de programmation.
Il serait plus simple, par exemple, de définir les informations dont vous avez besoins sur la base d'Excel.
Petit exemple : https://www.cjoint.com/?3FgosAQHlLz
Ensuite le soumettre aux divers fournisseurs pour discussion.
La procédure sera adaptée par la suite pour traiter le ou les documents selon leur/s format/s.
en fait j'avais mis le post en forum bureautique mais il a été déplacé
pour être plus complet je mets ici les fichiers
http://www.cijoint.fr/cjlink.php?file=cj201106/cijnEVGz8X.zip
actuellement on reçoit les PDF, pour le fournisseur B j'ai eu la trame du fichier excel et ils font juste un print en pdf
pour le fournisseurA la trame qu'il semble utiliser ressemble beaucoup à la configuration des colonnes du fichier xml

la procédure sera adaptée : une macro configurée spécifiquement à chaque fourniseur ?!
je voulais génériser les formats pour qu'il n'y ait qu'un code car je suis le meilleur en VBA ici donc vous avez uen idée de ce qu'il peut se produire si je quitte le poste dans les prochains mois !!! autant de maintenance qu'il y aura de macro, ça va tomber à l'eau rapidement
Messages postés
9745
Date d'inscription
mercredi 11 août 2004
Statut
Contributeur
Dernière intervention
24 juillet 2020
1 063
Bonjour,
Je me demande si vous avez compris mon poste précédent !
Si la solution proposée sur Excel est acceptable par tous c'est tout bon.
Pour cela il faudra bien contacter les fournisseurs est c'est bien la première des choses à réaliser.
C'est seulement à la suite des résultats qu'il faudra adapter la procédure... !
non j'avoue être un peu largué
je devrais peut être préciser que les fichiers pdf actuels nous seront toujours envoyés, mais pour compiler les données de manière automatisée, le certificat PDF devra être accompagné de son homologue XML.
donc je pense pas que le fournisseur B soit prêt à laisser tomber son modèle excel actuel pour uen feuille excel très épurée

[pour être sûr d'avoir compris, je leur envoie le fichier que vous m'avez joint, ils répondent s'ils sont d'accord pour remplir cette feuille épurée et ensuite viendra le temps du mappage pour la conversion ?!]
ok je commence à entrevoir
je lis des articles sur la barre d'outils XML et une fois les données en tableur basique on peut les convertir en XML list qui ressemble à celle du fournisseur A
et effectivement s'ils utilisent déjà une feuille excel pour initier le pdf, ils pourraient très bien mettre des formules pour récupérer les valeurs et ainsi compléter la feuille prévue pour la conversion xml
(c'est bien ça ?!)
Messages postés
9745
Date d'inscription
mercredi 11 août 2004
Statut
Contributeur
Dernière intervention
24 juillet 2020
1 063
Bonjour,
Eh bien, personnellement je demanderais de recevoir les fichiers en version Excel selon leur propre format.
Ensuite une analyse des formats pour voir si c'est exploitable directement ( éventuellement via un petit tableau de référence pour la procédure)!
la réponse est déjà connue : les valeurs peuvent être modifiées si on vous transmet les fichiers natifs xls. c'est pour cette raison que les fichiers pdf seront toujours transmis.
et les natifs du fournisseurB font appel à des valeurs sources d'uen autre feuille. Et l'idée d'exploiter directement la feuille du fournisseurB avait été rejetée car il y a des cellules fusionnées qui peuvent poser soucis
Messages postés
9745
Date d'inscription
mercredi 11 août 2004
Statut
Contributeur
Dernière intervention
24 juillet 2020
1 063
Bonjour,
Merci pour toutes les informations.
Personnellement avec les fichiers natifs xls de tous les fournisseurs, il n'y a plus de problème (cellules fusionnées ou pas) si c'est toujours le même format/structure qui est utilisé (chacun la sienne n'est pas un problème on le règle avec un tableau de référence utilisable par la procédure.
en posant la question ici on m'avait indiqué que ça engendrait des erreurs possibles la fusion de cellules.
du coup il est plus simple d'exploiter la feuille excel du fournisseur B telle quelle ou bien de le pousser à utiliser du xml ?
il faut que les valeurs soient bien inérées ligne par ligne.
nous avons d'autres sites qui ont mis sous-traite ce traitement de données et ils le font à partir des PDF, ils ont défini des emplacements et le lecteur de pdf vient récupérer les valeurs visibles dans ces fenêtres. par contre aucuen garantie que la valeur retranscrite soit bien celle qui correspond à l'aluminium par exemple. si le fournisseur modifie sa présentation ou l'ordre des lignes, personne ne s'en rend compte et nous ne voulons pas tomber dans cette situation "floue"
Messages postés
9745
Date d'inscription
mercredi 11 août 2004
Statut
Contributeur
Dernière intervention
24 juillet 2020
1 063
Bonjour,
Questions :
1- Est-ce que les documents sont édités en pdf directement ou ils sont convertis .... ?
2- Que comprendre par : le lecteur de pdf vient récupérer les valeurs visibles dans ces fenêtres... ?
3- Pour prendre une décision il faut avoir les documents de tous les fournisseurs et non pas le A et B.
1/ ils sont édités directement en pdf par chaque fournisseur à ce jour. et nosu les recevons par mail
2/ en fait sur le fonctionnement il s'agit d'un programme similaire à acrobat pro. avec le logiciel on définit des zones. chaque zone correspond à une valeur (colonne value du xml) et donc le logiciel agit comme un scanner, il ne voit que les caractères de ces zones, tout le reste il n'en tient pas compte. donc si l'aluminium a été initié à l'emplacement 1 au départ et que pour uen raison x,y le fournisseur modifie et le place en ligne 2, le scanner ne se rend compte de rien.
alors qu'avec votre macro, on regarde en colonne A du fichier de compilation et on va retrouver la ligne correspondant pour récupérer la valeur donc on garanti la pertinence des données.
le sous-traitant n'est pas capable d'apporter cette garantie avec son système

3/ A et B représentent 90% de nos livraisons donc si on parvient à gérer pour ces 2 là ça sera une belle avancée. obtenir les fichiers natifs des 5 autres fournisseurs risquent d'être compliqué

l'avantage du XML c'est déjà le poids, on n'aurait qu'une seule procédure quelque soit le fournisseur et on permettait dans le même temps aux autres sites de la compagnie de stopper avec le sous-traitant et d'utiliser votre procédure vu que les fournisseurs seraient déjà initiés à la pratique du XML
Messages postés
9745
Date d'inscription
mercredi 11 août 2004
Statut
Contributeur
Dernière intervention
24 juillet 2020
1 063
Bonjour,
Eh bien pour terminer, je pense que si vous recevez les documents en pdf et que vous possédez le logiciel [acrobat pro] ou similaire, il vous est possible de convertir le pdf en xls et le problème est résolu.
essais réalisés en convertissant les pdf en fichier texte, en xml, en tableur mais les données sont à chaque fois mixées et inexploitables
Bonjour,

http://www.cijoint.fr/cjlink.php?file=cj201106/cijFJNYWSG.xls
j'ai repris le fichier natif du fournisseur B
il print la page 2 en PDF et nous l'envoie
j'ai essayé de créer sur la feuille 3 le tableau de conversion xml en replaçant les données que votre macro doit trouver. et j'ai mis en feuille 4 le XML référence du fournisseurA
Par contre je sélectionne le tableau de la feuille 3 pour le convertir avec l'outil XML d'excel mais impossible

l'idée aurait ainsi été de leur proposer ce nouveau fichier et de mettre en place une macro qui imprime la feuille 2 en pdf en nommant ce PDF avec les cellules "PN" et "batch" et enregistrerait la feuille 3 en xml avec le même nom de fichier comme ça la conversion serait sans perte de temps pour lui
Messages postés
9745
Date d'inscription
mercredi 11 août 2004
Statut
Contributeur
Dernière intervention
24 juillet 2020
1 063
Bonjour,
Si vous parlez de feuille 1, 2, 3 ... et que les feuilles sont nommées alors il faut utiliser le nom des feuilles dans la description sinon impossible de vous suivre.
:-)
j'ai repris le fichier natif du fournisseur B
il print la feuille "certificat d'analyse" en PDF et nous l'envoie
j'ai essayé de créer sur la feuille "XML" le tableau de conversion xml en replaçant les données que votre macro doit trouver. et j'ai mis en feuille "XML référence fournisseurA" le XML référence du fournisseurA
Par contre je sélectionne le tableau de la feuille "XML" pour le convertir avec l'outil XML d'excel mais impossible

l'idée aurait ainsi été de leur proposer ce nouveau fichier et de mettre en place une macro qui imprime la feuille "certificat d'analyse" en pdf en nommant ce PDF avec les cellules "PN" et "batch" et enregistrerait la feuille "XML" en xml avec le même nom de fichier comme ça la conversion serait sans perte de temps pour lui
Messages postés
9745
Date d'inscription
mercredi 11 août 2004
Statut
Contributeur
Dernière intervention
24 juillet 2020
1 063
Bonjour,
J'ai réalisé un test en suivant exactement ce que je vous avais proposé au poste 13 (
Eh bien pour terminer, je pense que si vous recevez les documents en pdf et que vous possédez le logiciel [acrobat pro] ou similaire, il vous est possible de convertir le pdf en xls et le problème est résolu
.)
Voici le résultat concernant le document [2CAC0731 17127 FOURNISSEURB.pdf] : https://www.cjoint.com/?3FhwRILPlVk
Le fichier est parfaitement exploitable.
il faudrait donc une nouvelle procédure ... mais pas vraiment le niveau pour ça
et après vosu parliez de tableau de référence mais j'ignore comment ça se présente pour orienter vers la bonne procédure en fonction du fournisseur
Messages postés
9745
Date d'inscription
mercredi 11 août 2004
Statut
Contributeur
Dernière intervention
24 juillet 2020
1 063
Bonjour,
Sur la base de fichier [pdf] envoyer par le fournisseur vous devez avoir le logiciel pour convertir de [pdf] a [excel] (par exemple : Adobe Acrobat , Nitro PDF Professional ..).
Dans le cas ou il y a des différenres de positionnement entre les documents des fournisseurs on réalise un tableau(placer dans une feuille du classeur [001 BL.xls] avec les références que la procédure devra utiliser par rappport au document traiter.

Pour terminer il faut modifier la procédure au niveau de la lecture des données.
oui je visualise un peu, à mettre en oeuvre je ne dis pas que c'est simple
le fichier excel du fournisseurB est fixe sur toute la partie haute, la seule chose qui varie est le nombre de lignes d'éléments analysés donc logiquement pour lui
pour moi je pensais qu'il y aurait plusieurs macros. et c'est en lisant les lignes du fichier 001 BL.xls que si il trouve fournisseurA alors il déclenche la procédure importA et s'il trouve fournisseurB il déclenche importB. Mais si je comprends bien, ça serait la même mais au moment d'aller inscrire numéro de lot et date il irait voir dans le tableau de références pour se placer au bon endroit selon le fournisseur en cours

si vous avez envie de me faire un exemple, n'hésitez pas.
merci pour tous les éléments et les éclaircissements que vous m'apportez
Messages postés
9745
Date d'inscription
mercredi 11 août 2004
Statut
Contributeur
Dernière intervention
24 juillet 2020
1 063
Bonjour,
Oui je veux bien vous réaliser un exemple sur la base des fichiers des fournisseurs convertis de pdf sur xls sans modification après conversion..
Vous réalisez cette conversion avec votre logiciel et m'envoyer les fichiers.
Bonjour,
j'ai essayé avec acrobat pro la conversion en xls ; les données utiles sont mises bout à bout dans une même cellule.
j'ai essayé sur le web avec nitropdf et ça me ressort seulement l'entête (les entêtes avaient été détourés dans les fichiers pdf que j'avais mis ici)
Quoi qu'il en soit je demande actuellement des documents excel ou xml à tous nos fournisseurs car au niveau management la conversion n'est pas acceptée car nécessite du temps.
donc mon fournisseur B accepte de m'envoyer cette trame en excel
http://www.cijoint.fr/cjlink.php?file=cj201106/cijy8AltMx.xls
cette trame ne change pas jusqu'en ligne 16 quelque soit le produit. ensuite c'est le nombre de lignes qui varie selon le nombre d'éléments analysés.
j'ai rajouté des commentaires sur les informations utiles et les pb qu'il pourrait y avoir
Messages postés
9745
Date d'inscription
mercredi 11 août 2004
Statut
Contributeur
Dernière intervention
24 juillet 2020
1 063
Bonjour,
Merci pour l'information et c'est la meilleur solution d'éviter le fichier [pdf].
Je prends pour le fournisseur A le fichier [xml] et pour le B le fichier [xls].
Patience.
Messages postés
9745
Date d'inscription
mercredi 11 août 2004
Statut
Contributeur
Dernière intervention
24 juillet 2020
1 063
Bonjour,
Il y a encore un problème à régler, l'intitulé des produits du fournisseur B sont parfois différent de ceux de la feuille du fournisseur du classeur [Graphes.xls] (par exemple : chloride / chlorure, Antimony / antimoine, etc.).
Qu'elle est votre décision ?
oui j'ai eu parfois le soucis avec le fournisseurA
j'ajuste à chaque fois le fichier graphes.xls en fonction des intitulés des fournisseurs.
moi j'avais opté pour séparer les nom des symboles mais je vais les regrouper pour le fournisseurB dans le fichier graphes.xls pour que ça corresponde parfaitement au certificat
Messages postés
9745
Date d'inscription
mercredi 11 août 2004
Statut
Contributeur
Dernière intervention
24 juillet 2020
1 063
Bonjour,
Je vous laisse la découverte et les essais : https://www.cjoint.com/?3FjpQOr968a
Bonsoir,
j'ai essayé cette après midi au travail et chez moi le même soucis sur cette dernière ligne
valfoB = WorksheetFunction.Substitute((WorksheetFunction.Substitute((valfoB), ",", ".", 1)), "<", "", 1)
Cells(lig, precovi) = CDbl(valfoB) >> je ne sais pas quel est le soucis car ça me copie bien la valeur de la ligne assay et hop la macro s'arrête. les intitulés (colonnes A de graphes.xls et colonne B de certificat d'analyse sont bien identiques donc je ne comprends pas)
Messages postés
9745
Date d'inscription
mercredi 11 août 2004
Statut
Contributeur
Dernière intervention
24 juillet 2020
1 063
Bonjour,
Je pense qu'il s'agit du séparateur système. Si vous utilisez la virgule comme séparateur décimale, vous remplacer : valfoB = WorksheetFunction.Substitute((WorksheetFunction.Substitute((valfoB), ",", ".", 1)), "<", "", 1)
par celle-ci:
valfoB = WorksheetFunction.Substitute((valfoB), "<", "", 1)
Désolé.
Salutations.
Le Pingou
:-D
ça fonctionne à merveille
vous êtes trop fort
ça doit venir d'excel 2007, vu que maintenant quand on tape le . ça le remplace en ,
donc si j'obtiens d'autres fichiers excel de différents fournisseurs, il suffit que je complète la table de référence avec les cellules correspondantes et rien à changer dans la macro ?!
si c'est le cas c'est formidable

je fusionnerai sans doute les 2 tables de références et ainsi toutes les informations nécessaires seront sur la ligne du fournisseur correspondant

Merci beaucoup pour tout ce travail
j'ai une question, comment faites vous pour nommer vos tableaux ?
en effet je sais le faire pour un groupe de cellule avec le clic droit et on retrouve le nom dans la case qui donne les références de la cellule mais pour vos tableaux je ne sais pas et je pense qu'il est primordial que je sache faire si je dois rajouter des lignes avec l'introduction d'un nouveau fournisseur par ex.
ok j'ai trouvé, autant pour moi
Messages postés
9745
Date d'inscription
mercredi 11 août 2004
Statut
Contributeur
Dernière intervention
24 juillet 2020
1 063
Bonjour,
Si vous ajoutez un fournisseur, il suffit d'entrer directement les données à la suite de la ligne existante et c'est tout. Ne rien modifier car la ligne ajouter est directement prise en compte par la formule:
=DECALER(Liste_reference!$H$2:$M$2;;;NBVAL(Liste_reference!$H:$H)-1)

Concernant la table [Table de correspondance (TabCorres)] vous pouvez la supprimer car j'ai adopté votre méthode pour la mise à jour de la liste (soit : j'ajuste à chaque fois le fichier graphes.xls en fonction des intitulés des fournisseurs.).
bonjour,

j'ai procédé à la suppression de la table de correspondance et j'ai fusionné tabfour et refFichFo ainsi ça ne mettra pas le trouble pour les futurs gestionnaires du fichiers lors des mises à jour qui seront très aisées.

il s'agit d'une question optionnelle
le fichier graphes.xls va être mis à disposition d'utilisateurs qui ont besoin de voir les données. ils ne connaissent pas la structure du fichier et l'emplacement de chaque feuille
eux viendront consulter le fichier avec un PN en tête et un fournisseur
par curiosité, comment procéderiez vous pour que le fichier graphes.xls soit convivial, simple d'utilisation avec ces 2 seules informations et surtout sans risque de données effacées par mauvaise manipulation ?
Messages postés
9745
Date d'inscription
mercredi 11 août 2004
Statut
Contributeur
Dernière intervention
24 juillet 2020
1 063
Bonjour,
Concernant ceci : j'ai fusionné tabfour et refFichFo ainsi ça ne mettra pas le trouble pour les futurs gestionnaires du fichier lors des mises à jour qui seront très aisées.
J'espère que la procédure fonctionne correctement et vous retourne les bonnes valeurs.

Pour la suite : s'ils doivent uniquement consulter le fichier, alors mettre seulement une copie de l'original à disposition.
il y a un risque de mauvaises données ?!
j'ai déplacé Cherep pour insérer refFichFo à côté de tabfour en supprimant les colonnes des fournisseurs et des extensions xls xml qui faisaient doublon du coup. et j'ai modifié la sélection de tabfour et refFichFo pour que ça corresponde au tableau unique.

je vais essayer un userform avec textbox pour PN et une seconde pour le fournisseur et un bouton conduira sur la bonne feuille

Merci à vous
Bonjour,

en attendant les fichiers xml et xls des fournisseurs, j'ai copié votre procédure et l'ai modifiée pour checker les lots que je n'avais pas encore intégré dans la base de données graphes.xls

je reprends la procédure "sub importer" que je renomme et je change juste le nom d'appel de la procédure importmiseenplace pour éviter les conflits
et voici les modifs réalisées :

Sub controleactif(ligref As Long, shB, shRef)
'
Dim fournisseur As String, lot As String, repertoire As String
Dim feuille As String, PN As String
Dim precovi As Integer, lig As Long, reflig As Long
Dim repert_datas As String


Application.ScreenUpdating = False
repertoire = shB.Range("monrepert")
lot = shB.Range("N" & ligref).Value
fournisseur = shB.Range("O" & ligref).Value
PN = shB.Range("M" & ligref).Value
feuille = PN & " " & fournisseur

repert_datas = shRef.Range("cherep")
Workbooks("Graphes.xlsm").Activate 'fichier de compilation
'chercher la première colonne vide pour écrire les données
precovi = Cells(1, Rows(1).Cells.Count).End(xlToLeft).Column + 1
' contrôler: si le lot est déjà présent --> ne rien faire
If WorksheetFunction.CountIf(Rows(1), lot) <> 0 Then
shB.Cells(ligref, 20) = "OK"
shB.Cells(ligref, 21) = Date & " / " & Time
Exit Sub
End If
Cells(1, precovi) = lot 'valeur lot

'Application.ScreenUpdating = True
End Sub

ainsi depuis le fichier 001 BL.xls je regarde si tous les lots recensés sont déjà présents dans le fichier graphes.xls et s'ils ne le sont pas, ça m'inscrit le numéro de lot manquant. AInsi ça me permet de gagner du temps et j'ai immédiatement la référence du lot pour lequel je dois taper à la main les valeurs.

le pb existant c'est que j'ai quelques numéros de lots qui ont été inscrits mais pas dans la bonne feuille. Avez vous une idée de la cause ?
j'ai pensé à la fusion de tabfou et reffichfo mais ici il n'y a pas le vlookup donc la fusion n'a pas d'impact
Messages postés
9745
Date d'inscription
mercredi 11 août 2004
Statut
Contributeur
Dernière intervention
24 juillet 2020
1 063
Bonjour,
Cette procédure n'est pas la dernière version, donc je n'ai pas de point de repère pour vous aider sans le contexte y relatif.
j'ai trouvé le soucis au final
pour l'explication j'ai tjs en oeuvre votre procédure.
j'ai simplement fait un copier coller de la votre, changé les intitulés de macros et adaptée la copie pour procéder à une nouvelle tâche de recensement des lots non listés jusqu'à présent dans la base.

En fait les lots "parasite" viennent du fait que toutes les feuilles ne sont pas encore créées et du coup lorsque la feuille PN FOURNISSEUR manque, le lot est inscrit sur la feuille la plus proche
donc tout va bien au final :-)