XL 2010 Génération fichier xml

Boostez vos compétences Excel avec notre communauté !

Rejoignez Excel Downloads, le rendez-vous des passionnés où l'entraide fait la force. Apprenez, échangez, progressez – et tout ça gratuitement ! 👉 Inscrivez-vous maintenant !

ydemarin

XLDnaute Nouveau
Bonsoir,

j'ai une macro pour pouvoir générer des fichiers xml en fonction d'une base de données et de variables.

Elle génère 1 fichier xml par ligne dans l'onglet Data.

Mes utilisateurs qui doivent intégrer les messages xml un à un, voudraient que je leur fournisse un outil capable de générer un seul message xml avec plusieurs lignes. En effet, on va passer sur des Data à 100 lignes.

j'ai mis en jaune dans le template la partie qui serait donc à répéter selon le nombre de ligne dans le fichier Data.

Qui pourrait m'aider?

merci
 

Pièces jointes

Salut,

Quelques modifs ;
VB:
Sub Macro1()
Set temp = Sheets("Template")
Set d = Sheets("Data")

OutputDir = temp.Range("c1")
Filename = temp.Range("c2")
Nbtemplatelines = temp.Range("c3")
Nbdatalines = temp.Range("c4")
Nbdatacolumns = temp.Range("c5")



Open OutputDir & "\" & Filename & "_" & d.Cells(2, 1) & ".xml" For Append As #1
For t = 1 To Nbdatalines
For i = 1 To Nbtemplatelines
    LineToPrint = temp.Cells(i, 1)
    For j = 1 To Nbdatacolumns
        LineToPrint = Replace(LineToPrint, "%" & d.Cells(2, j) & "%", d.Cells(t + 3, j))
    Next j
    Print #1, LineToPrint
Next i
Next t
Close #1
End Sub

La plus importante étant la création du fichier AVANT la boucle
 
Dernière édition:
Bonjour,

merci pour ce retour, mais ce code génére toujours un fichier xml par ligne alors que ce que je recherche c'est un seul fichier xml qui contient plusieurs lignes dedans.

Du coup je ne comprends pas bien l'effet produit par le code communiqué

Merci
 
Salut,

En ce qui me concerne, il ne génère qu'un seul fichier ?!
VB:
Sub Macro1()
Set temp = Sheets("Template")
Set d = Sheets("Data")

OutputDir = temp.Range("c1")
Filename = temp.Range("c2")
Nbtemplatelines = temp.Range("c3")
Nbdatalines = temp.Range("c4")
Nbdatacolumns = temp.Range("c5")



Open OutputDir & "\" & Filename & "_" & d.Cells(2, 1) & ".xml" For Append As #1
For t = 1 To Nbdatalines
For i = 1 To Nbtemplatelines
    LineToPrint = temp.Cells(i, 1)
    For j = 1 To Nbdatacolumns
        LineToPrint = Replace(LineToPrint, "%" & d.Cells(2, j) & "%", d.Cells(t + 3, j))
    Next j
    Print #1, LineToPrint
Next i
Next t
Close #1
End Sub
 

Pièces jointes

Autant pour moi, je me suis trompé lors de la mise à jour.
En effet, un seul fichier xml est généré mais du coup, il génère la même commande plusieurs fois. Ce qui ne peut pas fonctionner.
commande = balise <DistributionOrderId>STA00002</DistributionOrderId>.

je souhaiterai 1 commande mais que le nombre de lignes (balise <LineItem>)soit variables selon le nombre de lignes dans Data

De plus, les données ne sont pas mise à jour (remplacement des valeurs entre les %)

merci
 
Bonjour,

je précise mon besoin.

Je souhaite intégrer une commande dans un système d'information par un fichier xml.

Une commande est composé d'un en-tête, de lignes et d'un pied de page.

Le nombre de lignes est variables selon la commande de 1 à 999.

Voici le message de l'en-tête qui est fixe:

<tXML>
<Header>
<Source>Host</Source>
<Action_Type>Update</Action_Type>
<Reference_ID>XML_OD_DEBORDS_STA00002</Reference_ID>
<Message_Type>DistributionOrder</Message_Type>
<Company_ID>1</Company_ID>
<Msg_Locale>English (United Kingdom)</Msg_Locale>
<Msg_Time_Zone>Europe/Paris</Msg_Time_Zone>
<Version>2015</Version>
<Internal_Reference_ID>STA00002</Internal_Reference_ID>
</Header>
<Message>
<DistributionOrder>
<DistributionOrderId>STA00002</DistributionOrderId>
<OrderType>RA</OrderType>
<OrderedDttm>07/03/2017 23:17</OrderedDttm>
<IsCancelled>false</IsCancelled>
<ReferenceField1>OD_FICTIF</ReferenceField1>
<ReferenceField2>OD_FICTIF</ReferenceField2>
<ReferenceField3>DIVERS</ReferenceField3>
<PlanningOriginFacilityId></PlanningOriginFacilityId>
<ExternalSystemPurchaseOrderNbr>OD_FICTIF</ExternalSystemPurchaseOrderNbr>
<DistroNumber>OD_FICTIF</DistroNumber>
<SalesOrderNbr>OD_FICTIF</SalesOrderNbr>
<DcCenterNbr>OD_FICTIF</DcCenterNbr>
<OriginFacilityAliasId>STA</OriginFacilityAliasId>
<PickupStartDttm>08/03/2017 23:17</PickupStartDttm>
<DestinationFacilityAliasId>1107</DestinationFacilityAliasId>
<DestinationFacilityName>OD_FICTIF</DestinationFacilityName>
<DestinationAddressLine1>OD-FICTIF</DestinationAddressLine1>
<DestinationAddressLine2></DestinationAddressLine2>
<DestinationAddressLine3></DestinationAddressLine3>
<DestinationCity>OD_FICTIF</DestinationCity>
<DestinationCountry>FR</DestinationCountry>
<DestinationPostalCode>99999</DestinationPostalCode>
<DeliveryEndDttm>09/03/2017 23:17</DeliveryEndDttm>
<DestinationContactName>OD_FICTIF</DestinationContactName>
<DestinationContactTelephoneNbr>0102030405/0602030405</DestinationContactTelephoneNbr>
<DestinationContactFaxNbr>OD_FICTIF</DestinationContactFaxNbr>
<MajorOrderGroupAttribute></MajorOrderGroupAttribute>
<LpnCubingIndicator>54</LpnCubingIndicator>
<ShipGroupId>STA00002</ShipGroupId>
<BillToName></BillToName>
<BillToFacilityAliasId></BillToFacilityAliasId>
<BillToFacilityName></BillToFacilityName>
<BillToAddressLine1></BillToAddressLine1>
<BillToAddressLine2></BillToAddressLine2>
<BillToAddressLine3></BillToAddressLine3>
<BillToCity></BillToCity>
<BillToCountryCode>FR</BillToCountryCode>
<BillToPostalCode></BillToPostalCode>
<BillToTelephoneNbr></BillToTelephoneNbr>
<ARCode>RA</ARCode>
<DistributionOrderType>Store Distributions</DistributionOrderType>
<PartlShipConfFlag>true</PartlShipConfFlag>
<TaxId></TaxId>
<ContentLabelType></ContentLabelType>
<SplInstrCode1>O</SplInstrCode1>

Voici le contenu par ligne qui se répète à chaque ligne.
Les données entre % sont celles qui sont dans le DATA

<LineItem>
<DoLineNbr>%1%</DoLineNbr>
<ItemName>%ARTICLE1%</ItemName>
<IsCancelled>false</IsCancelled>
<AllocationSourceType></AllocationSourceType>
<WaveAllocationType></WaveAllocationType>
<Price></Price>
<PurchaseOrderLineNbr>1</PurchaseOrderLineNbr>
<AllocationSourceId></AllocationSourceId>
<FulfillmentType>1</FulfillmentType>
<Quantity>
<OrderQty>%QUANTITE1%</OrderQty>
<QtyUOM>%UNITE1%</QtyUOM>
</Quantity>
<Size>
<SizeUomCode></SizeUomCode>
<SizeValue></SizeValue>
</Size>
<InventoryAttributes>
<InventoryType></InventoryType>
<BatchNbr>%NUANCE1%</BatchNbr>
</InventoryAttributes>
</LineItem>


Voici le pied de page

</DistributionOrder>
</Message>
</tXML>

Mon souhait est de mettre au point une macro qui permettrai de générer l'entête, puis n lignes selon le nombre de ligne dans le data puis le pied de tâches.

Je saurai le faire si j'avais toujours le même nombre de lignes mais je bloque le le nombre de lignes variables
 
Salut,

Désolé du temps passé !!
Un essai :
VB:
Sub Macro1()
Set WF = WorksheetFunction
Set t = Sheets("Template")
Set d = Sheets("Data")

OutputDir = t.Range("c1")
Filename = t.Range("c2")
Nbtemplatelines = t.Range("c3")
Nbdatalines = t.Range("c4")
Nbdatacolumns = t.Range("c5")



Open OutputDir & "\" & Filename & "_" & d.Cells(2, 1) & ".xml" For Append As #1

For i = 1 To 59
Print #1, t.Range("a" & i)
Next i

For k = 1 To Nbdatalines
t.Range("b61") = d.Range("a1").Offset(k, 0)
    For i = 60 To 73
    Print #1, t.Range("a" & i) & t.Range("b" & i) & t.Range("c" & i)
    Next i
Next k

For i = 74 To 76
Print #1, t.Range("a" & i)
Next i

Close #1
End Sub
 

Pièces jointes

- Navigue sans publicité
- Accède à Cléa, notre assistante IA experte Excel... et pas que...
- Profite de fonctionnalités exclusives
Ton soutien permet à Excel Downloads de rester 100% gratuit et de continuer à rassembler les passionnés d'Excel.
Je deviens Supporter XLD

Discussions similaires

Réponses
17
Affichages
1 K
Retour