XL 2019 Mappage XML non exportable ?

seb01

XLDnaute Nouveau
Bonjour à tous,

Je suis confronté à un problème de mappage xml et lors de l'exportation j'ai un message qui me signale que les mappages xml de ce classeur ne sont pas exportable.

C'est la première fois que je travaille avec du XML dans excel et je ne sais pas si je m'y prend correctement.

Si vous savez m'aider ce serait sympa.

Mon fichier excel contient 3 colonnes et les entêtes de colonnes correspondent à certains éléments du XML. (StartingDate, EndingDate et INSS)

Voici la structure du XML:
XML:
<Dimona xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="Dimona_20212.xsd">
<Form>
<Identification>DIMONA</Identification>
<FormCreationDate>2021-05-06</FormCreationDate>
<FormCreationHour>14:35:00.000</FormCreationHour>
<AttestationStatus>0</AttestationStatus>
<TypeForm>SU</TypeForm>
<Reference>
<ReferenceType>1</ReferenceType>
<ReferenceOrigin>1</ReferenceOrigin>
<ReferenceNbr>string</ReferenceNbr>
</Reference>
<DimonaIn>
<StartingDate>2021-11-08</StartingDate>
<EndingDate>2021-11-08</EndingDate>
<EmployerId>
<NOSSRegistrationNbr>175110801</NOSSRegistrationNbr>
</EmployerId>
<NaturalPerson>
<INSS>01410199955</INSS>
</NaturalPerson>
<DimonaFeatures>
<JointCommissionNbr>XXX</JointCommissionNbr>
<WorkerType>TRI</WorkerType>
</DimonaFeatures>
<StudentPlaceOfWork>
<Denomination>Test lieu</Denomination>
<Address>
<Street>Carrefour Lieu</Street>
<HouseNbr>11</HouseNbr>
<PostBox></PostBox>
<ZIPCode>4000</ZIPCode>
<City>LIEGE</City>
<Country>2</Country>
</Address>
</StudentPlaceOfWork>
</DimonaIn>
</Form>
</Dimona>

et fichier XSD
Code:
Dimona 00011 Noss_conversion1 xs:nossRegistrationNbr 00014 CompanyID_conversion1 xs:companyId 00023 00024 Inss_conversion1 xs:inss 00025 00026 00027 00028 Date_conversion2 00029 00030 00031 00032 00033 00034 00035 00041 00046 00053 00109 NossAPL_conversion1 xs:nossLpaRegistrationNbr 00110 00119 00131 CompanyID_conversion1 xs:companyId 00153 00167 00168 00169 00218 Date_conversion1 00221 00222 TicketNumber_conversion1 00296 00297 00298 00299 Time_conversion1 00517 00518 00519 00520 00522 00523 00615 00652 00655 00663 00664 00776 00777 00778 00910 00911 00913 00948 01017 01085 01135 01231 90372 90480 90379 90378 90377 90594 90376 90375 90022 90107 90374 90017 90256 90373 90082 90059
 

Pièces jointes

  • Dimona.xlsx
    11.2 KB · Affichages: 12

Hasco

XLDnaute Barbatruc
Repose en paix
Bon,

Il y a quelque chose que moi ou vous ne comprenons pas.


D'après ce que je comprends :

Vous avez un fichier xml dont vous voulez afficher les éléments StartingDate, EndingDate et INSS.
Vous faîtes les modifications de StartingDate et EndingDate et vous enregistrez pour chaque ligne du tableau excel les modifications dans ce même fichier. Non ?

Il n'était pas question de ré-écrire TOUT le fichier dans ce que vous disiez précédemment.

Si oui, c'est ce que font les macros que je vous ai donné, si non il faut me détailler plus précisément ce que vous faîtes car franchement vous ne m'aidez pas beaucoup.

Je vous laisse encore une chance et après j'abandonne.
 

seb01

XLDnaute Nouveau
Reprenons...
L'administration de la sécurité sociale fourni un moyen de déclarer les heures de prestations du personnel en y déposant sur leur plateforme un fichier XML.
Ce fichier doit donc être complété à notre niveau en y respectant sa structure.
Ce n'est donc pas nous qui devons lire le contenu du fichier XML pour l'intégrer dans un tableau Excel mais bien le compléter à partir de notre tableau Excel pour ensuite le déposer sur le serveur de l'administration par un canal sécurisé.

Jusque là j'espère que c'est en principe clair.

Notre tableau va donc comprendre qques lignes
StartingDateEndingDateINSS
2021-09-102021-09-1112345678910
2021-09-112021-09-1212345879879
2021-09-122021-09-1412654567468

Il faudra ensuite écrire dans le fichier XML pour y insérer ces données selon sa structure sachant qu'il est possible de déclarer plusieurs travailleurs en un seul fichier.
Pour pouvoir déclarer plusieurs travailleurs, il faut répéter autant de fois l'élement <DimonaIn>...</DimonaIn>

Ce fichier dans notre cas selon le tableau Excel devra se présenter comme suit:
XML:
<Dimona xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="Dimona_20212.xsd">
    <Form>
        <Identification>DIMONA</Identification>
        <FormCreationDate>2021-05-06</FormCreationDate>
        <FormCreationHour>14:35:00.000</FormCreationHour>
        <AttestationStatus>0</AttestationStatus>
        <TypeForm>SU</TypeForm>
        <Reference>
            <ReferenceType>1</ReferenceType>
            <ReferenceOrigin>1</ReferenceOrigin>
            <ReferenceNbr>string</ReferenceNbr>
        </Reference>
        <DimonaIn>
            <StartingDate>2021-09-10</StartingDate>
            <EndingDate>2021-09-11</EndingDate>
            <EmployerId>
                <NOSSRegistrationNbr>175110801</NOSSRegistrationNbr>
            </EmployerId>
            <NaturalPerson>
                <INSS>12345678910</INSS>
            </NaturalPerson>
            <DimonaFeatures>
                <JointCommissionNbr>XXX</JointCommissionNbr>
                <WorkerType>TRI</WorkerType>
            </DimonaFeatures>
            <StudentPlaceOfWork>
                <Denomination>Test lieu</Denomination>
                <Address>
                    <Street>Carrefour Lieu</Street>
                    <HouseNbr>11</HouseNbr>
                    <PostBox></PostBox>
                    <ZIPCode>4000</ZIPCode>
                    <City>LIEGE</City>
                    <Country>2</Country>
                </Address>
            </StudentPlaceOfWork>
        </DimonaIn>
        <DimonaIn>
            <StartingDate>2021-09-11</StartingDate>
            <EndingDate>2021-09-12</EndingDate>
            <EmployerId>
                <NOSSRegistrationNbr>175110801</NOSSRegistrationNbr>
            </EmployerId>
            <NaturalPerson>
                <INSS>12345879879</INSS>
            </NaturalPerson>
            <DimonaFeatures>
                <JointCommissionNbr>XXX</JointCommissionNbr>
                <WorkerType>TRI</WorkerType>
            </DimonaFeatures>
            <StudentPlaceOfWork>
                <Denomination>Test lieu</Denomination>
                <Address>
                    <Street>Carrefour Lieu</Street>
                    <HouseNbr>11</HouseNbr>
                    <PostBox></PostBox>
                    <ZIPCode>4000</ZIPCode>
                    <City>LIEGE</City>
                    <Country>2</Country>
                </Address>
            </StudentPlaceOfWork>
        </DimonaIn>
        <DimonaIn>
            <StartingDate>2021-09-12</StartingDate>
            <EndingDate>2021-09-14</EndingDate>
            <EmployerId>
                <NOSSRegistrationNbr>175110801</NOSSRegistrationNbr>
            </EmployerId>
            <NaturalPerson>
                <INSS>12654567468</INSS>
            </NaturalPerson>
            <DimonaFeatures>
                <JointCommissionNbr>XXX</JointCommissionNbr>
                <WorkerType>TRI</WorkerType>
            </DimonaFeatures>
            <StudentPlaceOfWork>
                <Denomination>Test lieu</Denomination>
                <Address>
                    <Street>Carrefour Lieu</Street>
                    <HouseNbr>11</HouseNbr>
                    <PostBox></PostBox>
                    <ZIPCode>4000</ZIPCode>
                    <City>LIEGE</City>
                    <Country>2</Country>
                </Address>
            </StudentPlaceOfWork>
        </DimonaIn>
    </Form>
</Dimona>


En fonction du nombre de ligne dans le tableau, il faudra insérer dans le XML autant de fois l'élément <DimonaIn>....</DimonaIn> en y faisant correspondre les champs du tableau Excel avec les éléments de l'XML. (en l’occurrence StartingDate, EndingDate, INSS)

Ensuite il n'y a plus d'interaction avec celui-ci puisqu'il sera déposé sur le serveur de l'administration par SFTP.

Dans mon esprit c'est clair mais je ne sais pas si je retransmet bien l'information de manière suffisamment explicite.
 

Hasco

XLDnaute Barbatruc
Repose en paix
Re

Testez avec ça, ce sera mieux :

Ce n'est donc pas nous qui devons lire le contenu du fichier XML pour l'intégrer dans un tableau Excel mais bien le compléter à partir de notre tableau Excel pour ensuite le déposer sur le serveur de l'administration par un canal sécurisé.
Et bien voilà, c'est clair.

Mais se pose d'autres questions ?
Les INSS de votre tableau excel existent-ils toujours dans le fichier xml ( qu'on vous donne ?
Si non, faut-il les créer ? Et à partir de quelles données (toutes celles que vous ne traitez pas ici :
EmployerId/NOSSRegistrationNbr, celles de StudentPlaceOfWork ?

La macro d'enregistrement ouvre le fichier dimona-2.xml (modifier l'extension .txt en .xml du fichier joint) pour en créer un nommé dimona-3.xml dans lequel vous trouverez un élément DimonaIn ajouté.

J'ai récupérer une macro d'un ancien projet pour écrire le fichier sur le disque afin qu'il soit indenté car la création d'éléments par la librairie msxml et la méthode .Save de la même librairie n'indente pas les documents.

Les éléments vides apparaissent sous la forme <TagName /> ce qui est strictement conforme à la norme xml. Votre document sera donc valide et bien formé.



Cordialement
 

Pièces jointes

  • dimona-2.txt
    3.3 KB · Affichages: 7
  • Dimona.xlsm
    38.9 KB · Affichages: 5
Dernière édition:

Hasco

XLDnaute Barbatruc
Repose en paix
Magnifique. :D
Un grand merci pour le temps consacré à ce problème.
Re,

J'ai repris votre xsd pour tenter de valider le xml produit mais j'obtiens toujours la même erreur de parsing à l'ouverture du xsd :
Non valide au niveau supérieur du document.
D'ailleurs je n'avais auparavant jamais vu ce type de .xsd qui ne décrit même pas ce que doit contenir le fichier mais semble s'occuper de conversion de nombre... Je ne connais pas ce type de xsd.

Cordialement
 

seb01

XLDnaute Nouveau
Bonjour,

Après qques essais positifs il était prévu que pour chaque INSS du tableau Excel trouvé, la macro ajoute autant d'éléments <DimonaIn></DimonaIn> dans la structure de l'XML.

Après plusieurs discussions avec l'administration, en finalité, ce n'est plus ce dernier élément (DimonaIn) qui doit être répété autant de fois mais bien tout le contenu de <Form></Form>

J'ai adapté la macro en conséquence et tout est presque Ok sauf qu'il persiste un soucis de formation de l'élément <DimonaIn>. Voici le résultat obtenu lors de l'exécution de la macro sur le fichier Dimona3.xml:
XML:
<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<Dimona xsi:noNamespaceSchemaLocation="Dimona_20212.xsd" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
    <Form>
        <Identification>DIMONA</Identification>
        <FormCreationDate>2021-09-20</FormCreationDate>
        <FormCreationHour>14:35:00.000</FormCreationHour>
        <AttestationStatus>0</AttestationStatus>
        <TypeForm>SU</TypeForm>
        <Reference>
            <ReferenceType>1</ReferenceType>
            <ReferenceOrigin>1</ReferenceOrigin>
            <ReferenceNbr>string</ReferenceNbr>
        </Reference>
        <DimonaIn/>
        <StartingDate>2021-11-09</StartingDate>
        <EndingDate>2021-11-12</EndingDate>
        <EmployerId>
            <NOSSRegistrationNbr>175110801</NOSSRegistrationNbr>
        </EmployerId>
        <NaturalPerson>
            <INSS>1410199960</INSS>
        </NaturalPerson>
        <DimonaFeatures>
            <JointCommissionNbr>XXX</JointCommissionNbr>
            <WorkerType>STU</WorkerType>
        </DimonaFeatures>
        <StudentPlaceOfWork>
            <Denomination>Test Lieu</Denomination>
            <Address>
                <Street>Carrefour lieu</Street>
                <HouseNbr>11</HouseNbr>
                <PostBox/>
                <ZIPCode>4000</ZIPCode>
                <City>Liege</City>
                <Country>2</Country>
            </Address>
        </StudentPlaceOfWork>
    </Form>
    <Form>
        <Identification>DIMONA</Identification>
        <FormCreationDate>2021-09-20</FormCreationDate>
        <FormCreationHour>14:35:00.000</FormCreationHour>
        <AttestationStatus>0</AttestationStatus>
        <TypeForm>SU</TypeForm>
        <Reference>
            <ReferenceType>1</ReferenceType>
            <ReferenceOrigin>1</ReferenceOrigin>
            <ReferenceNbr>string</ReferenceNbr>
        </Reference>
        <DimonaIn/>
        <StartingDate>2021-11-10</StartingDate>
        <EndingDate>2021-11-12</EndingDate>
        <EmployerId>
            <NOSSRegistrationNbr>175110801</NOSSRegistrationNbr>
        </EmployerId>
        <NaturalPerson>
            <INSS>1410199930</INSS>
        </NaturalPerson>
        <DimonaFeatures>
            <JointCommissionNbr>XXX</JointCommissionNbr>
            <WorkerType>STU</WorkerType>
        </DimonaFeatures>
        <StudentPlaceOfWork>
            <Denomination>Test Lieu</Denomination>
            <Address>
                <Street>Carrefour lieu</Street>
                <HouseNbr>11</HouseNbr>
                <PostBox/>
                <ZIPCode>4000</ZIPCode>
                <City>Liege</City>
                <Country>2</Country>
            </Address>
        </StudentPlaceOfWork>
    </Form>
    <Form>
        <Identification>DIMONA</Identification>
        <FormCreationDate>2021-09-20</FormCreationDate>
        <FormCreationHour>14:35:00.000</FormCreationHour>
        <AttestationStatus>0</AttestationStatus>
        <TypeForm>SU</TypeForm>
        <Reference>
            <ReferenceType>1</ReferenceType>
            <ReferenceOrigin>1</ReferenceOrigin>
            <ReferenceNbr>string</ReferenceNbr>
        </Reference>
        <DimonaIn/>
        <StartingDate>2021-09-13</StartingDate>
        <EndingDate>2021-12-13</EndingDate>
        <EmployerId>
            <NOSSRegistrationNbr>175110801</NOSSRegistrationNbr>
        </EmployerId>
        <NaturalPerson>
            <INSS>1515151501</INSS>
        </NaturalPerson>
        <DimonaFeatures>
            <JointCommissionNbr>XXX</JointCommissionNbr>
            <WorkerType>STU</WorkerType>
        </DimonaFeatures>
        <StudentPlaceOfWork>
            <Denomination>Test Lieu</Denomination>
            <Address>
                <Street>Carrefour lieu</Street>
                <HouseNbr>11</HouseNbr>
                <PostBox/>
                <ZIPCode>4000</ZIPCode>
                <City>Liege</City>
                <Country>2</Country>
            </Address>
        </StudentPlaceOfWork>
    </Form>
</Dimona>


Je ne vois pas comment solutionner le problème à ce niveau.
Si vous pouvez jeter un dernier coup d'oeil ce serait vraiment sympa.
 

Pièces jointes

  • test.zip
    28.5 KB · Affichages: 3

Hasco

XLDnaute Barbatruc
Repose en paix
Bonjour,

Histoire de sémantique, et de descendance.

Je fais l'effort, dans mes exemples de donner des noms de variables adaptés à une situation. Vous auriez pu faire l'effort d'en comprendre la sémantique.

Utiliser une variable nommée xDomain pour la création d'un élément xml qui sera <Form></Form> c'est déjà là susceptible de vous mélanger les pinceaux ! :)

Dans le fichier joint, la macro s'appelle 'Enregistrer' tout simplement car elle reconstruit un document xml de bout en bout, fichier nommé dimona-4.xlsm mais que vous pouvez appeler comme bon vous semble. Il sera recréé à chaque lancement de la macro.

C'est la dernière fois que j'interviens ici, pour refaire la quasi totalité de ce que j'ai déjà fait.
Dites à vos administrateurs, qu'ils fournissent un xsd valide, on se serait épargné bien des peines.
j'ai adapté la macro en conséquence et tout est presque Ok sauf qu'il persiste un soucis de formation de l'élément <DimonaIn>.

Soyez plus précis dans la description de ce qui ne convient pas. C'est quoi le soucis de formation ?
Je ne suis pas sensé connaître par coeur la structure de vos fichiers je ne suis pas dans votre bureau ni votre tête.

Mais j'en ai déduit le résultat suivant des anciens fichiers retrouvés dans ma corbeille.
 

Pièces jointes

  • Dimona.xlsm
    35.4 KB · Affichages: 6

seb01

XLDnaute Nouveau
Pourtant j'en ai passé du temps à comprendre la structure que vous m'avez envoyée et effectuer des essais et erreurs, beaucoup d'erreurs je dois dire avant de revenir sur le forum.
Dans mon adaptation scabreuse, l'élément ne se formait pas correctement càd qu'il s'affichait comme ceci :

XML:
<DimonaIn/>

        <StartingDate>2021-11-09</StartingDate>

        <EndingDate>2021-11-12</EndingDate>

La balise de départ<DimonaIn/> se terminait avec un slash et la balise finale </DimonaIn> n'existait pas dans l'XML.

En postant ma dernière demande je n'espérais plus grand chose car vous aviez fait tout le job et consacré beaucoup de temps, plus qu'il n'en fallait. Il n'en tenait qu'à moi d'avoir à décrire au mieux le problème initial.

Malgré cela vous avez vu juste ! Je ne sais comment vous remercier pour l'aide que vous m'avez apporté.
Le forum peut être fier de bénéficier de votre aide et de vos contributions.

Bien à vous.
 

seb01

XLDnaute Nouveau
Bonjour,

Voilà j'ai effectué mes premiers dépôts "Test" auprès de l'administration.
J'ai cependant trouvé après une dizaine de tentatives la signification du message :
Non valide au niveau supérieur du document.
dans le XSD.

En fait l'entête xml du fichier en output est construite comme ceci:
XML:
<?xml version="1.0" encoding="utf-8" standalone="yes"?>

mais doit en réalité se présenter comme ceci:
Code:
<?xml version="1.0" encoding="UTF-8"?>

J'ai donc modifié manuellement l'entête pour tester et çà passe !

Cependant, je pensais que cela se modifiait dans la macro à l'instruction Set ProcInstr mais visiblement non car mes tentatives sont un échec :
VB:
Sub EnregistrerModifications()

    Dim ProcInstr As IXMLDOMProcessingInstruction
    Dim Dimona As IXMLDOMElement, Elem As IXMLDOMElement
    Dim lr As ListRow
    Dim Valeurs As Variant
    
    
    Set xmlDoc = New MSXML2.DOMDocument60
    'Ajout de l' instruction xml et ses attributs
    Set ProcInstr = xmlDoc.createProcessingInstruction("xml", "version=""1.0"" encoding=""UTF-8""") 'ne semble pas changer l'output
    xmlDoc.appendChild ProcInstr

    'Création de la racine et de ses attributs
    Set Dimona = xmlDoc.createElement("Dimona")
    Dimona.setAttribute "xmlns:xsi", "http://www.w3.org/2001/XMLSchema-instance"
    Dimona.setAttribute "xsi:noNamespaceSchemaLocation", "Dimona_20212.xsd"
    xmlDoc.appendChild Dimona
    '
    ' parcourir les lignes du tableau excel
    For Each lr In ThisWorkbook.Sheets("Dimona").ListObjects("tableau6").ListRows
        Valeurs = lr.Range.Value
        '
        ' Pour chaque ligne créer un élément Form dans le document
        If Not IsEmpty(Valeurs(1, 4)) Then
            Set Elem = AjouterXForm(Valeurs)
            Dimona.appendChild Elem
        End If
    Next
    '
    
    
    ' Sauvegarde du document FI sans extension
    EcrireFichier ThisWorkbook.Path & "\Dimona\FI.DIMN.111080." & Format(Now, "yyyymmDD") & "." & Format(Now, "whhnn") & ".T.1.1"

    ThisWorkbook.Sheets("Dimona").Range("H1") = "dernier enregistrement " & Format(Now, "ddd d mmm yyyy \à hh\h mm\m ss\s")
    
    
    
    
End Sub

Je suppose que c'est peut-être lié à la classe MSXML2.DOMDocument60 ?
Si vous savez me dire comment modifier l'entête ce serait top.

Merci d'avance pour l'aide. :)
 

Hasco

XLDnaute Barbatruc
Repose en paix
Re,

Vous ne cherchez pas beaucoup hein !?
Vous auriez vu que dans la macro 'EcrireFichier' (que j'ai importée telle quelle), j'avais laissé traîné cette ligne, qui contredit la processing instruction de départ :

VB:
Stylo.standalone = True

Stylo étant une variable objet MSXML2.MXXMLWriter60 ' Objet d'écriture du fichier xml

Changez true en false !

la 'processing instruction'
Code:
    Set ProcInstr = xmlDoc.createProcessingInstruction("xml", "version=""1.0"" encoding=""utf-8"" standalone=""no""")

Vous pouvez commentez les 2 lignes de création de la processingInstructions , le Writer de la macro ecrirefichier l' incluera.

Vous pouvez aussi laisser ces 2 lignes et commenter la ligne 'Stylo.Standalone = False'.

Une des deux méthodes doit être présente.

Cordialement
 

Statistiques des forums

Discussions
311 729
Messages
2 081 974
Membres
101 854
dernier inscrit
micmag26