Organisation de données sur excel pour conversion en xml

Organisation de données sur excel pour conversion en xml Organiser des données sous excel Organiser des données sous excel Conversion de données sous excel Conversion des donnees en excel [EXCEL 2010] Organisation des données

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.


Forum

Organisation de données sur excel pour conversion en xml Organiser des données sous excel Organiser des données sous excel Conversion de données sous excel Conversion des donnees en excel [EXCEL 2010] Organisation des données

Web: www.shapebootstrap.net

20 réponses

Marsh

NOVEMBER 9, 2013 AT 9:15 PM

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

Reply

Marsh

NOVEMBER 9, 2013 AT 9:15 PM

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.

Reply

Marsh

NOVEMBER 9, 2013 AT 9:15 PM

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

Reply
réponses:
  • auteur

  • b.desmarets

    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.

  • eriiic

    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

  • b.desmarets

    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.

  • eriiic

    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

  • b.desmarets

    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.

  • eriiic

    Bonjour,

    Je pensais que tu savais faire vu ton texte.
    Voici donc le tableau tel que tu le veux. Laisser vide F et L, le TCD en M:R est masqué.
    https://www.cjoint.com/c/HAmwBwePFny
    Tu sais faire ton xml ? Parce que moi je n'ai jamais fait et pour l'instant à part l'écrire ligne à ligne...
    A moins que ta machine sache récupérer les données d'un xls ?
    eric

  • b.desmarets

    Bonjour Eric,
    Pardonnez mon silence, j'ai eu la tête sous l'eau tout le we. Mille mercis c'est exactement ce qu'il faut ! Waho...
    Pour le xml, l'idée serait qu'à chaque changement de section, il génère une en-tête de ce type:

    <SecSectionID>1</SecSectionID>
    <SecHeight>30</SecHeight>
    <SecMinWidth/>
    <SecMaxWidth/>
    <SecWidth>65</SecWidth>
    <PreOpt/>

    avec longueur x épaisseur. Peut-on imaginer de s'aider d'un fichier type en .txt avec le code de base et la fonction replace (https://msdn.microsoft.com/fr-fr/VBA/Excel-VBA/articles/range-replace-method-excel) ?
    Merci d'avance.

  • eriiic

    Bonjour,

    Tu m'as demandé de refaire à l'identique ton tableau parce que "A partir du second tableau j'arriverai ensuite à extraire les données".
    Ce qui pour moi était inutile comme je te l'avais expliqué. Pourquoi alors avoir insisté pour l'avoir si tu ne fais rien ?
    eric

  • b.desmarets

    Bonjour Eric,
    Merci à nouveau pour votre réactivité.
    Le tableau nous est vivement nécessaire pour avoir de la visibilité sur les actions nécessaires et la représentation des chaque section dans la liste de production (un tri en somme)
    Pardonnez moi si j'ai semblé insisté, je n'ai pas cerné que c'était à ce point inutile dans le cadre de la conversion et pensais que ça serait facilement reexploitable.

    Je comprendrais que vous soyez divisé à l'idée de poursuivre votre aide. Seulement si vous acceptez juste de m'orienter dans les grandes lignes, cela me serait d'une grande aide.
    Bien à vous,
    Baptiste.

  • eriiic

    Bonjour,

    Tu devrais déposer une nouvelle question, celle-ci étant différente vu que tu disais prendre cette partie en charge.
    Je te conseille de mettre la doc qui t'a été fournie pour le format du xml attendu, le listing que tu as mis laisse des questions en suspend à cause d'irrégularités.
    eric

  • b.desmarets

    Bonsoir,
    Entendu, merci quoiqu'il en soit pour l'aide apportée. Dois-je clôturer le sujet ?
    Baptiste.

  • b.desmarets

    Bonsoir Eric,
    Il s'avère qu'une nouvelle colonne doit apparaître (n° mur) dans le tableau. Quand je l'insère dans le tableau brut, le tableau généré par la macro lui ne se décale pas, évidemment. Aurais-tu une solution pour se faire ?
    Merci, bien à toi.
    Baptiste.

  • eriiic

    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

    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

    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

    Merci pour ta réponse. Ca je l'ai déjà changé, mais l'en-tête reste figé...

  • eriiic

    si tu le déplaces ça fait quoi ?

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed