IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Conception Discussion :

Conversion en format xml d'une liste excel


Sujet :

Conception

  1. #1
    Futur Membre du Club
    Profil pro
    Étudiant
    Inscrit en
    Mai 2013
    Messages
    9
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mai 2013
    Messages : 9
    Points : 7
    Points
    7
    Par défaut Conversion en format xml d'une liste excel
    Bonjour à tous,

    Je m'excuse par avance si mon message ne se trouve dans la section appropriée du site...

    Je viens vers vous au sujet d'un pépin rencontré au boulot. Je dessine quotidiennement des maisons en bois et exporte des listes de production sur Excel des différentes pièces à usiner (n° pièce, longueur, largeur, épaisseur, n° mur etc.) que j'envoie ensuite à un sous-traitant qui se charge de faire les découpes sur une tronçonneuse numérique. En fin de semaine dernière, la version du logiciel de ce fournisseur a évolué, ce dernier ne ne peut désormais ouvrir que des fichiers xml.

    Bien évidemment, ce fournisseur propose de fournir une mini appli qui convertie des listes de production excel en des fichiers xml, mais rien n'est gratuit !
    J'ai donc jeté un oeil au fichier xml dont l'apparence me semble bien moins barbare que ce que je pouvais imaginer. Je vous copie ci-dessous un exemple de fichier xml pour une liste excel d'une pièce (L:2000, l:145, ep.:45, Qté:2, Mur:04)

    Code xml : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    <?xml version="1.0"?>
    <Programs fileversion="version 1.0">
    <PrgProgram>exemple</PrgProgram>
    <PrgHeadTrimmingLength>0</PrgHeadTrimmingLength>
    <PrgTailTrimmingLength>0</PrgTailTrimmingLength>
    <PrgPrinterField1/>
    <PrgPrinterField2/>
    <PrgPrinterField3/>
    <PrgPreOptimized>0</PrgPreOptimized>
    <PrgProgrammedBarLength>0</PrgProgrammedBarLength>
    <PrgSections>
    <SecSectionID>1</SecSectionID>
    <SecHeight>45</SecHeight>
    <SecMinWidth/>
    <SecMaxWidth/>
    <SecWidth>145</SecWidth>
    <PreOpt/>
    <PrgPieces>
    <PcPage/>
    <PcQuality>1</PcQuality>
    <PcPieceID>1</PcPieceID>
    <PcLength>2000</PcLength>
    <PcNumberOfPieces>2</PcNumberOfPieces>
    <PcPriority>0</PcPriority>
    <PcUnloader1>1</PcUnloader1>
    <PcUnloader2>3</PcUnloader2>
    <PcPrinterCode/>
    <PcPrinterId/>
    <PcPrinterField1/>
    <PcPrinterField2>M04</PcPrinterField2>
    <PcPrinterField3>123</PcPrinterField3>
    <PcPrinterField4/>
    <PcPrinterField5/>
    <PcPrinterField6/>
    <PcPrinterField7/>
    <PcPrinterField8/>
    <PcPrinterField9/>
    <PcPrinterField10/>
    <PcNumberOfDonePieces>0</PcNumberOfDonePieces>
    <PcSelected>1</PcSelected>
    </PrgPieces>
    </PrgSections>
    </Programs>

    Où sur un visionneur de langage:
    Nom : Capture.JPG
Affichages : 260
Taille : 84,1 Ko

    Ainsi, pensez-vous qu'il soit envisageable de créer un petit fichier excel qui générerait un fichier xml équivalent, sans trop de manip ?
    D'avance merci beaucoup pour aide, bien à vous.
    Baptiste.

  2. #2
    Expert éminent sénior Avatar de Menhir
    Homme Profil pro
    Ingénieur
    Inscrit en
    Juin 2007
    Messages
    16 037
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Finistère (Bretagne)

    Informations professionnelles :
    Activité : Ingénieur
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2007
    Messages : 16 037
    Points : 32 866
    Points
    32 866
    Par défaut
    A ta place, je ferais un fichier xml modèle, en remplaçant tes cinq valeurs par des mots-clé (de préférence de longueur fixe) comme YYYlongYYY, YYYlargYYY, etc.

    Avec la macro,
    - tu ouvres ce fichier comme un fichier texte avec OpenText. https://msdn.microsoft.com/fr-fr/vba...t-method-excel
    - tu utilises cinq Replace pour remplacer les mots-clé par les valeurs souhaitées https://msdn.microsoft.com/fr-fr/lib.../ff194086.aspx
    - tu enregistres le fichier sous un autre nom avec un SaveAs au format texte (xlTextWindows par exemple) https://msdn.microsoft.com/fr-fr/vba...s-method-excel
    - tu fermes le fichier. https://msdn.microsoft.com/fr-fr/vba...e-method-excel

    Si tu as plusieurs pièces à faire, tu peux mettre ces valeurs en colonne (en ajoutant un nom pour chaque fichier généré) et faire une boucle For To pour les lire et les enchainer.

  3. #3
    Futur Membre du Club
    Profil pro
    Étudiant
    Inscrit en
    Mai 2013
    Messages
    9
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mai 2013
    Messages : 9
    Points : 7
    Points
    7
    Par défaut
    Bonjour Menhir,
    Mille mercis pour ta réponse. Je potasse ça et reviens vers vous dès que je bloque.
    Baptiste.

  4. #4
    Futur Membre du Club
    Profil pro
    Étudiant
    Inscrit en
    Mai 2013
    Messages
    9
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mai 2013
    Messages : 9
    Points : 7
    Points
    7
    Par défaut
    Bonsoir,
    Je rencontre une première difficulté. L'intérêt de cette machine est qu'elle peut découper dans une même section, deux longueurs différentes. Or, pour ce faire, il faut que dans le fichier xml, les pièces soient réunies par section (autour de trois balises, sectionID, SectionWidth and SectionHeight), comme ci-dessous:

    Code xml : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    <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>
    Ainsi, pensez-vous que Excel puisse regrouper et classer les pièces par section (hauteur et épaisseur strictement similaires) dans un tableau, puis qu'une deuxième macro génère le code d'en tête propre à chaque section puis celui de chaque pièce comprenant sa longueur ?
    Par exemple,
    N° pièce Hauteur Epaisseur Longueur Quantité
    1 45 145 2630 2
    2 45 85 2875 6
    3 45 145 2856 1
    Dans ce cas, on obtiendrait deux sous-groupes, les 45x145 et 45x85. En dessous de chaque sous groupe, on aurait les valeurs des longueurs et quantités listées

    D'avance merci, bien à vous.
    Baptiste.

  5. #5
    Expert éminent sénior Avatar de Menhir
    Homme Profil pro
    Ingénieur
    Inscrit en
    Juin 2007
    Messages
    16 037
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Finistère (Bretagne)

    Informations professionnelles :
    Activité : Ingénieur
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2007
    Messages : 16 037
    Points : 32 866
    Points
    32 866
    Par défaut
    Est-ce que tu as pris la peine de lire mon message précédent ou est-ce que tu t'attends à ce que je te fasse ton travail tout cuit ?

  6. #6
    Futur Membre du Club
    Profil pro
    Étudiant
    Inscrit en
    Mai 2013
    Messages
    9
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mai 2013
    Messages : 9
    Points : 7
    Points
    7
    Par défaut
    Bonsoir Menhir,

    Pardonnez mon silence, je n'ai pas fait de la prog' ma priorité ces derniers jours. Etant charpentier, je passe surtout mon temps sur chantier et avec le mauvais temps, on a été pas mal retardés !
    Désolé si j'ai pu paraitre très attentiste au travers de mon dernier message, j'essayais juste de formuler différemment mon besoin (ayant trituré la problématique sous différents angles) et me demandais si le canvas que vous me proposiez était toujours d'actualité. Apparemment oui donc...

    Voici pour le moment la macro que j'ai rédigé, afin de trier et mettre en forme la liste de découpe qui arrive brut depuis le logiciel de dessin:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    Sub tableau()
        Dim pvt As PivotTable, datas, result()
        Dim lig As Long, col As Long, nblig As Long, lig2 As Long, memo(1 To 2) As Long
        Set pvt = ActiveSheet.PivotTables("Tableau croisé dynamique1")
        pvt.PivotCache.Refresh
        datas = pvt.RowRange.Offset(1).Resize(pvt.RowRange.Rows.Count - 1).Value
        ReDim result(1 To UBound(datas), 1 To 5)
        For lig = 1 To UBound(datas)
            If datas(lig, 1) <> "(vide)" Then
                lig2 = lig2 + 1
                For col = 1 To 2
                    If datas(lig, col) <> "" Then memo(col) = datas(lig, col)
                Next col
                If Not datas(lig, 1) & datas(lig, 2) = "" Then
                    result(lig2, 1) = memo(1): result(lig2, 2) = memo(2)
                End If
                For col = 3 To 5
                    result(lig2, col) = datas(lig, col)
                Next col
            End If
        Next lig
        [G1].CurrentRegion.Offset(1).ClearContents
        [G2].Resize(UBound(result, 1), UBound(result, 2)) = result
    End Sub
    Je vais désormais essayer de suivre la procédure que vous me proposez. Simplement, une question. Imaginons qu'il y ait plusieurs pièces à découper, sera-t-il nécessaire d'avoir autant de fichier "modèle" (avec le code de base vierge de données liées à la longueur etc.) que de pièces ? Auquel cas cela serait un poil handicapant pour une utilisation quotidienne.

    Merci d'avance pour votre réponse, bien à vous.
    Baptiste.

Discussions similaires

  1. [JDOM] Transformer un fichier XML en une list
    Par oneagaindoguys dans le forum Format d'échange (XML, JSON...)
    Réponses: 1
    Dernier message: 24/04/2009, 13h55
  2. Réponses: 7
    Dernier message: 15/07/2008, 11h00
  3. [XSLT] Le format XML pour une exportation de données
    Par petchos dans le forum Bibliothèques et frameworks
    Réponses: 1
    Dernier message: 03/04/2008, 09h40
  4. Probleme avec une liste excel
    Par casavba dans le forum Excel
    Réponses: 3
    Dernier message: 14/09/2007, 10h23
  5. Réponses: 7
    Dernier message: 16/08/2007, 10h06

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo