Organisation de données sur excel pour conversion en xml

b.desmarets 12 Messages postés vendredi 5 janvier 2018Date d'inscription 20 janvier 2018 Dernière intervention - 5 janv. 2018 à 22:29 - Dernière réponse : eriiic 21281 Messages postés mardi 11 septembre 2007Date d'inscriptionContributeurStatut 20 janvier 2018 Dernière intervention
- 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.


Afficher la suite 

20 réponses

Répondre au sujet
eriiic 21281 Messages postés mardi 11 septembre 2007Date d'inscriptionContributeurStatut 20 janvier 2018 Dernière intervention - 5 janv. 2018 à 22:42
0
Utile
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
Commenter la réponse de eriiic
b.desmarets 12 Messages postés vendredi 5 janvier 2018Date d'inscription 20 janvier 2018 Dernière intervention - 6 janv. 2018 à 09:14
0
Utile
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.
Commenter la réponse de b.desmarets
eriiic 21281 Messages postés mardi 11 septembre 2007Date d'inscriptionContributeurStatut 20 janvier 2018 Dernière intervention - Modifié par eriiic le 6/01/2018 à 12:25
0
Utile
17
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://msdn.microsoft.com/fr-fr/library/office/gg469857%28v=office.14%29.aspx?f=255&MSPPError=-2147217396
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
eriiic 21281 Messages postés mardi 11 septembre 2007Date d'inscriptionContributeurStatut 20 janvier 2018 Dernière intervention - 19 janv. 2018 à 19:27
Bonjour,

j'avais bien vu des irrégularités et des manques entre ton listing et ta demande, c'est pour ça que je t'avais dit de joindre la doc du xml.
Pourquoi ne demandes-tu pas ça dans l'autre forum ?
eric
b.desmarets 12 Messages postés vendredi 5 janvier 2018Date d'inscription 20 janvier 2018 Dernière intervention - 20 janv. 2018 à 07:59
Bonjour Eric,
Toujours pas compris ce que tu souhaites au travers de la doc du xml, j'ai seulement copié un code type de la machine pas plus tard qu'au deuxième post.
Dans l'autre forum ? Je me disais juste qu'étant l'auteur de la macro, tu saurais simplement comment faire pour décaler le tableau cible d'une colonne, sans pour autant que le TCD intègre cette dernière...
Tant pis, bon we Eric !
eriiic 21281 Messages postés mardi 11 septembre 2007Date d'inscriptionContributeurStatut 20 janvier 2018 Dernière intervention - 20 janv. 2018 à 09:29
Bonjour,

que faut-il changer à ton avis là dedans pour passer de G à H ?
    [G1].CurrentRegion.Offset(1).ClearContents
    [G2].Resize(UBound(result, 1), UBound(result, 2)) = result
eric
b.desmarets 12 Messages postés vendredi 5 janvier 2018Date d'inscription 20 janvier 2018 Dernière intervention - 20 janv. 2018 à 09:38
Merci pour ta réponse. Ca je l'ai déjà changé, mais l'en-tête reste figé...
eriiic 21281 Messages postés mardi 11 septembre 2007Date d'inscriptionContributeurStatut 20 janvier 2018 Dernière intervention - 20 janv. 2018 à 09:44
si tu le déplaces ça fait quoi ?
Commenter la réponse de eriiic