Organisation de données sur excel pour conversion en xml

Fermé
b.desmarets Messages postés 22 Date d'inscription vendredi 5 janvier 2018 Statut Membre Dernière intervention 18 mai 2018 - 5 janv. 2018 à 22:29
eriiic Messages postés 24569 Date d'inscription mardi 11 septembre 2007 Statut Contributeur Dernière intervention 28 décembre 2023 - 20 janv. 2018 à 09:44
Bonjour à tous,

Petite question liée à mon boulot. Je suis dans une une petite boîte de construction bois et viens de faire l'acquisition d'une nouvelle machine, une tronçonneuse numérique. Une fois un projet de charpente terminé, j'exporte la liste des pièces de bois par section (hauteur x épaisseur) et longueur et la rentre dans la machine. Elle s'occupe d'optimiser la découpe pour une même section, depuis des longueurs standards, afin de limiter les chutes.

Seul problème, la machine ne lit pas les fichiers excel mais xml. J'ai donc réussi à décortiquer l'architecture d'un fichier type et il me faudrait maintenant développer un petit outil qui me ferait la conversion automatique de xls à xml en respectant toutes les balises and co.

Concrètement, je souhaiterais passer d'un tableau à 5 cinq colonnes:
- n° pièces
- hauteur
- épaisseur
- longueur
- quantité

à un classement des pièces par section (hauteur ET épaisseur identiques), avec la liste des longueur et pour chacune d'elle, la quantité demandée.
Voici ci-dessous le tableau excel et la version que le format trié que je souhaiterais obtenir avec une macro/formule.


A partir du second tableau j'arriverai ensuite à extraire les données sous forme de boucles pour renseigner en en-tête la section puis chaque attachées et ainsi de suite.

D'avance merci pour votre aide, bien à vous.
Baptiste.


A voir également:

3 réponses

eriiic Messages postés 24569 Date d'inscription mardi 11 septembre 2007 Statut Contributeur Dernière intervention 28 décembre 2023 7 212
5 janv. 2018 à 22:42
Bonjour,

dans un forum photoshop les jpg c'est bien, dans un forum excel les xls c'est mieux.
cjoint.com et coller le lien fournit ici.
eric
0
b.desmarets Messages postés 22 Date d'inscription vendredi 5 janvier 2018 Statut Membre Dernière intervention 18 mai 2018
6 janv. 2018 à 09:14
Bonjour,

Merci pour votre réactivité.
J'ai donc copié/collé le doc excel avec les deux tableaux: https://www.cjoint.com/c/HAgibRTJ7VZ

Aussi ci dessous, le code lu par la machine. Les pièces sont donc regroupées par section (hauteur x épaisseur), avec en en-tête, les balises SecSectionID, SecHeight (hauteur) et SecWidth (largeur, ou épaisseur). A chaque groupe de section correspondent une ou plusieurs pièces, de longueur, quantité etc. différentes. On ouvre donc la balise PrgPieces au sein de laquelle se trouvent ces données (PcID, PcLength etc)

<?xml version="1.0"?>
<Programs fileversion="version 1.0">
    <PrgProgram>02012018_Test_Stromab</PrgProgram>
    <PrgHeadTrimmingLength>0</PrgHeadTrimmingLength>
    <PrgTailTrimmingLength>0</PrgTailTrimmingLength>
    <PrgPrinterField1></PrgPrinterField1>
    <PrgPrinterField2></PrgPrinterField2>
    <PrgPrinterField3></PrgPrinterField3>
    <PrgPreOptimized>0</PrgPreOptimized>
    <PrgProgrammedBarLength>0</PrgProgrammedBarLength>
    <PrgSections>
        <SecSectionID>1</SecSectionID>
        <SecHeight>30</SecHeight>
        <SecMinWidth/>
        <SecMaxWidth/>
        <SecWidth>65</SecWidth>
        <PreOpt/>
        <PrgPieces>
            <PcPage/>
            <PcQuality>1</PcQuality>
            <PcPieceID>1</PcPieceID>
            <PcLength>830</PcLength>
            <PcNumberOfPieces>1</PcNumberOfPieces>
            <PcPriority>0</PcPriority>
            <PcUnloader1>2</PcUnloader1>
            <PcUnloader2>0</PcUnloader2>
            <PcPrinterCode></PcPrinterCode>
            <PcPrinterId></PcPrinterId>
            <PcPrinterField1></PcPrinterField1>
            <PcPrinterField2>2572</PcPrinterField2>
            <PcPrinterField3>MD101</PcPrinterField3>
            <PcPrinterField4></PcPrinterField4>
            <PcPrinterField5></PcPrinterField5>
            <PcPrinterField6></PcPrinterField6>
            <PcPrinterField7></PcPrinterField7>
            <PcPrinterField8></PcPrinterField8>
            <PcPrinterField9></PcPrinterField9>
            <PcPrinterField10></PcPrinterField10>
            <PcNumberOfDonePieces>0</PcNumberOfDonePieces>
            <PcSelected>1</PcSelected>
		</PrgPieces>
		<PrgPieces>
			<PcPage/>
            <PcQuality>1</PcQuality>
            <PcPieceID>2</PcPieceID>
            <PcLength>3980</PcLength>
            <PcNumberOfPieces>1</PcNumberOfPieces>
            <PcPriority>0</PcPriority>
            <PcUnloader1>1</PcUnloader1>
            <PcUnloader2>3</PcUnloader2>
            <PcPrinterCode></PcPrinterCode>
            <PcPrinterId></PcPrinterId>
            <PcPrinterField1></PcPrinterField1>
            <PcPrinterField2>2562</PcPrinterField2>
            <PcPrinterField3>MD101</PcPrinterField3>
            <PcPrinterField4></PcPrinterField4>
            <PcPrinterField5></PcPrinterField5>
            <PcPrinterField6></PcPrinterField6>
            <PcPrinterField7></PcPrinterField7>
            <PcPrinterField8></PcPrinterField8>
            <PcPrinterField9></PcPrinterField9>
            <PcPrinterField10></PcPrinterField10>
            <PcNumberOfDonePieces>0</PcNumberOfDonePieces>
            <PcSelected>1</PcSelected>
        </PrgPieces>
	    <SecSectionID>2</SecSectionID>
        <SecHeight>45</SecHeight>
        <SecMinWidth/>
        <SecMaxWidth/>
        <SecWidth>240</SecWidth>
        <PreOpt/>
        <PrgPieces>
            <PcPage/>
            <PcQuality>1</PcQuality>
            <PcPieceID>3</PcPieceID>
            <PcLength>413</PcLength>
            <PcNumberOfPieces>1</PcNumberOfPieces>
            <PcPriority>0</PcPriority>
            <PcUnloader1>2</PcUnloader1>
            <PcUnloader2>0</PcUnloader2>
            <PcPrinterCode></PcPrinterCode>
            <PcPrinterId></PcPrinterId>
            <PcPrinterField1></PcPrinterField1>
            <PcPrinterField2>2546</PcPrinterField2>
            <PcPrinterField3>MD101</PcPrinterField3>
            <PcPrinterField4></PcPrinterField4>
            <PcPrinterField5></PcPrinterField5>
            <PcPrinterField6></PcPrinterField6>
            <PcPrinterField7></PcPrinterField7>
            <PcPrinterField8></PcPrinterField8>
            <PcPrinterField9></PcPrinterField9>
            <PcPrinterField10></PcPrinterField10>
            <PcNumberOfDonePieces>0</PcNumberOfDonePieces>
            <PcSelected>1</PcSelected>
		</PrgPieces>
</PrgSections>
</Programs>


L'idée serait donc de partir d'un tableau brut, de classer ensuite les pièces de bois par section stricte (hauteur ET épaisseur identiques) et convertir pour chaque section, l'en-tête correspondant et le code caractérisant chaque pièce. Cela vous semble-t-il pertinent ?

D'avance merci pour votre aide, bien à vous.
Baptiste.
0
eriiic Messages postés 24569 Date d'inscription mardi 11 septembre 2007 Statut Contributeur Dernière intervention 28 décembre 2023 7 212
Modifié le 6 janv. 2018 à 12:25
Bonjour,

Préparation avec un TCD et récup données dans une variable tableau.
https://www.cjoint.com/c/HAglsTgzbq4
Apparemment tu as des outils pour créer ton xml : https://docs.microsoft.com/fr-fr/previous-versions/office/gg469857(v=office.14)?redirectedfrom=MSDN
Je n'ai pas approfondi la lecture...
eric

En essayant continuellement, on finit par réussir. 
Donc plus ça rate, plus on a de chances que ça marche.(les Shadoks)
En plus du merci (si si, ça se fait !!!), penser à mettre en résolu. Merci
0
b.desmarets Messages postés 22 Date d'inscription vendredi 5 janvier 2018 Statut Membre Dernière intervention 18 mai 2018
7 janv. 2018 à 20:52
Bonsoir Eric,
Merci beaucoup pour votre réponse, je vais creuser tout ça. Pensez-vous néanmoins qu'il soit possible d'afficher l'épaisseur même si elle est similaire à la précédente, dès lors qu'on se trouve sur une autre section du tableau ? Pour récupérer hauteur et épaisseur dans le xml, cela me semble indispensable.
D'avance merci, bien à vous.
Baptiste.
0
eriiic Messages postés 24569 Date d'inscription mardi 11 septembre 2007 Statut Contributeur Dernière intervention 28 décembre 2023 7 212
7 janv. 2018 à 22:30
Bonjour,

j'ai fait exactement comme demandé.
Sinon oui c'est possible.
Tu balaies le tableau ligne après ligne. Et par colonne, si la valeur est vide tu mets celle de la ligne au-dessus.
eric
0
b.desmarets Messages postés 22 Date d'inscription vendredi 5 janvier 2018 Statut Membre Dernière intervention 18 mai 2018
11 janv. 2018 à 13:08
Bonjour Eric,
Je suis de retour après quelques jours avec la crève !
Merci pour votre réponse. Sans vous contredire, vous n'avez pas fait exactement comme demandé.
Les sections 45x85 et 30x60 n'apparaissent pas en tant que tel; la ligne épaisseur manque, cette dernière étant la même que la section précédente du tableau.
Néanmoins, il ne faudrait pas que la section apparaisse sur chaque section. C'est là qu'est toute la subtilité de ma requête.
Merci pour votre aide précieuse, bien à vous.
Baptiste.
0
eriiic Messages postés 24569 Date d'inscription mardi 11 septembre 2007 Statut Contributeur Dernière intervention 28 décembre 2023 7 212
Modifié le 11 janv. 2018 à 16:00
Bonjour,

A partir du second tableau j'arriverai ensuite à extraire les données sous forme de boucles pour renseigner en en-tête la section puis chaque attachées et ainsi de suite
Oui, c'est la présentation normale d'un TCD.
Quand tu boucles si l'épaisseur figure tu la mémorises et sur une ligne où tu en as besoin (si hauteur change) tu l'utilises.
Ca te pose quelles difficultés ?
eric
0
b.desmarets Messages postés 22 Date d'inscription vendredi 5 janvier 2018 Statut Membre Dernière intervention 18 mai 2018
12 janv. 2018 à 20:30
Désolé pour mon manque de discernement, mais je ne maîtrise qu'à peine Excel, je suis charpentier de formation. P-e la tâche est un peu loin de mes aptitudes, néanmoins le but n'est absolument pas de te demander le boulot prémâché (bien que ça soit déjà le cas je suppose...), je vais donc regarder des cours sur internet à propos des tableaux croisés dynamiques et des boucles.
Merci encore pour ton aide, bien à toi.
Baptiste.
0