"relation d'un élément mappé" Mappage XML

Hotz13

XLDnaute Nouveau
Bonjour,

Je suis actuellement en stage , et l'on m'a demandé si je pouvais transformer des données excels en fichier XML , ne m'y connaissant pas du tout , j'ai quand même voulu essayer.

On m'a donc donné un exemple du fichier XML demandé , et à partir de celui-ci , j'ai essayé de faire le fichier XSD ( le schéma pour le mapping sur excel).

Mon problème se présente quand je veux exporter un ficher XML à partir de ce mapping sur excel, un message m'annonce qu'il est impossible de faire cela à cause de "Données dénormalisées" , j'ai fouiné un peu sur internet , essayait plusieurs choses , mais aucune solution pour moi actuellement.

Voici le fichier XML attendu :
Code:
<?xml version="1.0" encoding="UTF-8"?>
<FACTURES>
     <VERS></VERS>
	 <TVAEUR></TVAEUR>
	 <NBRFAC></NBRFAC>
	 <TOTMTT></TOTMTT>
	 <IMPORT>
			<IDIMP></IDIMP>
			<NOMIMP></NOMIMP>
			<CODCLI></CODCLI>
			<ADRIMP>
					<ADR1></ADR1>
					<ADR2></ADR2>
					<CP><CP>
					<VILLE></VILLE>
					<PAYS></PAYS>
			</ADRIMP>
			<IBANIMP></IBANIMP>
			<RIBIMP></RIBIMP>
			<MODREGIMP><MORDREGIMP>
			<FACTURE>
					<NUMFAC></NUMFAC>
					<DATEFACT></DATEFACT>
					<DATEECH></DATEECH>
					<PAYSRGT></PAYSRGT>
					<MODREG></MODREG>
					<DEVISE></DEVISE>
					<MTFACT></MTFACT>
					<IBANCRED></IBANCRED>
			</FACTURE>
	</IMPORT>
	<IMPORT>
			<IDIMP></IDIMP>
			<NOMIMP></NOMIMP>
			<CODCLI></CODCLI>
			<ADRIMP>
					<ADR1></ADR1>
					<ADR2></ADR2>
					<CP><CP>
					<VILLE></VILLE>
					<PAYS></PAYS>
			</ADRIMP>
			<IBANIMP></IBANIMP>
			<RIBIMP></RIBIMP>
			<MODREGIMP><MORDREGIMP>
			<FACTURE>
					<NUMFAC></NUMFAC>
					<DATEFACT></DATEFACT>
					<DATEECH></DATEECH>
					<PAYSRGT></PAYSRGT>
					<MODREG></MODREG>
					<DEVISE></DEVISE>
					<MTFACT></MTFACT>
					<IBANCRED></IBANCRED>
			</FACTURE>
	</IMPORT>
</FACTURES>

et voici le fichier XSD que j'ai créé :

Code:
<xs:schema attributeFormDefault="unqualified" elementFormDefault="qualified" xmlns:xs="http://www.w3.org/2001/XMLSchema">
  <xs:element name="FACTURES">
    <xs:complexType>
      <xs:sequence>
        <xs:element type="xs:string" name="VERS"/>
        <xs:element type="xs:string" name="TVAEUR"/>
        <xs:element type="xs:string" name="NBRFAC"/>
        <xs:element type="xs:float" name="TOTMTT"/>
        <xs:element name="IMPORT" maxOccurs="unbounded" minOccurs="0">
          <xs:complexType>
            <xs:sequence>
              <xs:element type="xs:string" name="IDIMP"/>
              <xs:element type="xs:string" name="NOMIMP"/>
              <xs:element type="xs:string" name="CODCLI"/>
              <xs:element name="ADRIMP">
                <xs:complexType>
                  <xs:sequence>
                    <xs:element type="xs:string" name="ADR1"/>
                    <xs:element type="xs:string" name="ADR2"/>
                    <xs:element type="xs:string" name="CP"/>
                    <xs:element type="xs:string" name="VILLE"/>
                    <xs:element type="xs:string" name="PAYS"/>
                  </xs:sequence>
                </xs:complexType>
              </xs:element>
              <xs:element type="xs:string" name="IBANIMP"/>
              <xs:element type="xs:string" name="RIBIMP"/>
              <xs:element type="xs:string" name="MODREGIMP"/>
              <xs:element name="FACTURE">
                <xs:complexType>
                  <xs:sequence>
                    <xs:element type="xs:string" name="NUMFAC"/>
                    <xs:element type="xs:string" name="DATEFACT"/>
                    <xs:element type="xs:string" name="DATEECH"/>
                    <xs:element type="xs:string" name="PAYSRGT"/>
                    <xs:element type="xs:string" name="MODREG"/>
                    <xs:element type="xs:string" name="DEVISE"/>
                    <xs:element type="xs:string" name="MTFACT"/>
                    <xs:element type="xs:string" name="IBANCRED"/>
                  </xs:sequence>
                </xs:complexType>
              </xs:element>
            </xs:sequence>
          </xs:complexType>
        </xs:element>
      </xs:sequence>
    </xs:complexType>
  </xs:element>
</xs:schema>

Désolé si ma façon de m'exprimer n'est pas toujours adapté , je n'ai pas du tout l'habitude de ce genre de langage de programmation !
J'espère que vous pourrez m'aider , merci d'avance.

Sébastien.
 
Dernière édition:

Hotz13

XLDnaute Nouveau
Re : "Données dénormalisées" Mappage XML

Bonjour , merci de cette réponse rapide.

Malheureusement, ils me disent que mes fichiers sont valides, même si Excel me donne toujours l'erreur des données dénormalisées.

Cordialement, Sébastien.
 

Hotz13

XLDnaute Nouveau
Re : "Données dénormalisées" Mappage XML

J'ai modifié quelques trucs , et j'ai une autre erreur maintenant : "La relation d'un élément mappé avec d'autres éléments ne peut pas être préservé"

Voici le nouveau fichier XSD :

Code:
<xs:schema attributeFormDefault="unqualified" elementFormDefault="qualified" xmlns:xs="http://www.w3.org/2001/XMLSchema">
  <xs:element name="FACTURES"  >
    <xs:complexType>
      <xs:sequence>
        <xs:element type="xs:string" name="VERS" maxOccurs="unbounded"/>
        <xs:element type="xs:string" name="TVAEUR" maxOccurs="unbounded"/>
        <xs:element type="xs:string" name="NBRFAC" maxOccurs="unbounded" />
        <xs:element type="xs:float" name="TOTMTT" maxOccurs="unbounded"/>
        <xs:element name="IMPORT" maxOccurs="unbounded" minOccurs="0">
          <xs:complexType>
            <xs:sequence>
              <xs:element type="xs:string" name="IDIMP"/>
              <xs:element type="xs:string" name="NOMIMP"/>
              <xs:element type="xs:string" name="CODCLI"/>
              <xs:element name="ADRIMP">
                <xs:complexType>
                  <xs:sequence>
                    <xs:element type="xs:string" name="ADR1"/>
                    <xs:element type="xs:string" name="ADR2"/>
                    <xs:element type="xs:string" name="CP"/>
                    <xs:element type="xs:string" name="VILLE"/>
                    <xs:element type="xs:string" name="PAYS"/>
                  </xs:sequence>
                </xs:complexType>
              </xs:element>
              <xs:element type="xs:string" name="IBANIMP"/>
              <xs:element type="xs:string" name="RIBIMP"/>
              <xs:element type="xs:string" name="MODREGIMP"/>
              <xs:element name="FACTURE">
                <xs:complexType>
                  <xs:sequence>
                    <xs:element type="xs:string" name="NUMFAC"/>
                    <xs:element type="xs:string" name="DATEFACT"/>
                    <xs:element type="xs:string" name="DATEECH"/>
                    <xs:element type="xs:string" name="PAYSRGT"/>
                    <xs:element type="xs:string" name="MODREG"/>
                    <xs:element type="xs:string" name="DEVISE"/>
                    <xs:element type="xs:string" name="MTFACT"/>
                    <xs:element type="xs:string" name="IBANCRED"/>
                  </xs:sequence>
                </xs:complexType>
              </xs:element>
            </xs:sequence>
          </xs:complexType>
        </xs:element>
      </xs:sequence>
    </xs:complexType>
  </xs:element>
</xs:schema>

Je sais que mon problème vient de cette partie , mais je ne trouve pas de solution :

<xs:element type="xs:string" name="VERS" maxOccurs="unbounded"/>
<xs:element type="xs:string" name="TVAEUR" maxOccurs="unbounded"/>
<xs:element type="xs:string" name="NBRFAC" maxOccurs="unbounded" />
<xs:element type="xs:float" name="TOTMTT" maxOccurs="unbounded"/>

Je commence un peu à désespérer, j'ai rien trouvé de très constructif sur internet actuellement , en espérant que quelqu'un ici ait une solution :)
Merci d'avance !

Sébastien.
 

Hotz13

XLDnaute Nouveau
Re : "relation d'un élément mappé" Mappage XML

Bonjour ,

le problème étant que la personne doit pouvoir tout simplement rentrer les informations sur excel pour exporter en xml..

Existe t'il un autre éditeur aussi facile d'utilisation avec un tableur comme excel?

Merci d'avance,

Sébastien.
 
G

Guest

Guest
Re : "relation d'un élément mappé" Mappage XML

Re,

Pour les éditeurs xml, vois sur google.

Sinon par VBA, à toi d'apprendre à utiliser la librairie Microsoft Xml v.0

Là aussi tu trouveras toute la litérature nécessaire sur google.

A+
 
G

Guest

Guest
Re : "relation d'un élément mappé" Mappage XML

Re,

Pour ne pas te laisser seul dans la jungle xml, voici un exemple à partir de ce que tu nous as donné, d'utilisation de la librairie msXml v6.0
Lance la macro "CreerDoc" puis regarde dans le répertoire dans lequel tu auras enregistré le fichier joint, il y aura un fichier h_hotz13.xml.

Bien entendu il ne s'agit là que d'un exemple, aucun contrôle sur les données ni leur provenance n'est effectué, et il n'est aucune question de l'utiliser tel quel dans un milieu professionnel.

A+

[Edit] ci-dessous une amélioration de la macro CréerDoc. Comptabilisation du nombre de factures et du Montant total des factures.
Utilise le langage XPATH pour les sélections d'éléments xml
Code:
Sub creerDoc()
    Dim nbFAC As Integer, TotalMontants As Double, MontantListe As IXMLDOMNodeList, elm
    Set xDoc = New MSXML2.DOMDocument60
    Set xFactures = xDoc.createElement("FACTURES")
    AjouteElement xFactures, "VER", "1.0"
    AjouteElement xFactures, "TVAEUR", "0.2"
    AjouteElement xFactures, "NBRFAC"
    AjouteElement xFactures, "TOTMTT"
    xDoc.appendChild xFactures
    AjouteImport
    AjouteImport
    
    'Calculer le montant total des factures
    Set MontantListe = xDoc.SelectNodes("//FACTURE/MTFACT")
    For Each elm In MontantListe
        TotalMontants = TotalMontants + CDbl(elm.Text)
    Next
    
    'Mettre à jour le nombre de factures créées  et le montant total des factures
    xDoc.SelectNodes("/FACTURES/NBRFAC").Item(0).Text = MontantListe.Length
    xDoc.SelectNodes("/FACTURES/TOTMTT").Item(0).Text = Format(TotalMontants, "0.00")
    Set MontantListe = Nothing
    
    XmlSave ThisWorkbook.Path & "\h_Hotz13.xml", xDoc
    
    Set xDoc = Nothing
End Sub

Avec la macro AjouterFacture qui va avec (le format des montants est changé)
Code:
Private Sub AjouteFacture(xImport As IXMLDOMElement, NumFact As String, DateFact As Date, DateEch As Date, PaysRGT As String, ModeReg As String, Devise As String, MTFact As Currency, IbanCred As String)
    Dim xFact As IXMLDOMElement
    Set xFact = AjouteElement(xImport, "FACTURE")
    AjouteElement xFact, "NUMFAC", NumFact
    AjouteElement xFact, "DATEFACT", Format(DateFact, "yyyy-mm-dd")
    AjouteElement xFact, "DATEECH", Format(DateEch, "yyyy-mm-dd")
    AjouteElement xFact, "PAYSRGT", PaysRGT
    AjouteElement xFact, "MODEREG", ModeReg
    AjouteElement xFact, "DEVISE", Devise
    AjouteElement xFact, "MTFACT", Format(MTFact, "0.00")
    AjouteElement xFact, "IBANCRED", IbanCred
End Sub
 
Dernière modification par un modérateur:

Statistiques des forums

Discussions
311 716
Messages
2 081 848
Membres
101 826
dernier inscrit
dododu89