Données Excel vers fichier texte pour générer fichier XML

Résolu
malo1974 -  
 malo1974 -
Bonjour,
Je souhaiterais générer un fichier texte à partir de données présentes dans une feuille de calcul afin de pouvoir l'exporter vers un fichier XML.

Mon fichier final devrait faire 1700 lignes, impossible de faire un fichier xml à la main en venant compléter les données entre les balises pour chaque client.
Et impossible de venir faire référence à un schéma xml à partir d'excel je ne sais pas exporter.

Je me suis renseigné, on me réponds : qu'il n'existe pas d'outil qui permette d’exporter les données d’un fichier Excel vers un fichier XML qui répond aux exigences de la déclaration à la Banque Nationale.

Ci-dessous le code qu'il faudrait pouvoir générer
<Customer CustomerSequenceNumber="1" CustomerBankIdentification="52082299872">
		<CustomerIdentification>
			<NaturalPersonId>
				<RRNIdentification>52082299872</RRNIdentification>
			</NaturalPersonId>
		</CustomerIdentification>
		<CustomerActions>
			<AddAction>
				<Contracts>
					<Contract RelationSequenceNumber="1">
						<ContractTypeName>
							<InstalmentLoan/>
						</ContractTypeName>
						<CustomerStartDate>2014-01-01</CustomerStartDate>
					</Contract>
        </Contracts>
			</AddAction>
 		</CustomerActions>
  </Customer>


Structure du fichier Excel :

Colonne 1 CustomerSequenceNumber
Colonne 2 CustomerStartDate
Colonne 3 RN
Colonne 4 ContractTypeName
Colonne 5 CustomerBankIdentification (idem au RN)
Colonne 6 RelationSequenceNumber

1 2014-01-01 80010498302 InstalmentLoan 80010498302 1
2 2014-01-01 52081799432 InstalmentLoan 52081799432 2
3 2014-01-01 53051999271 InstalmentLoan 53051999271 3
4 2014-01-01 55110299580 InstalmentLoan 55110299580 4
5 2014-01-01 57040799718 InstalmentLoan 57040799718 5

Merci de votre aide

3 réponses

  1. jordane45 Messages postés 30427 Date d'inscription   Statut Modérateur Dernière intervention   4 831
     
    Bonjour,

    Qu'as tu essayé ?
    Sur quoi bloques tu ?

    Car visiblement, une boucle sur chaque ligne de ta feuille permettrait de générer assez facilement le xml attendu puis de l'écrire dans un nouveau fichier.

    Un truc du genre
    Sub test()
        Dim xml As String
        Dim CustomerSequenceNumber  As String
        Dim CustomerStartDate As String
        Dim CustomerBankIdentification As String
        
        xml = "" ' variable qui contiendra le résultat final
        
        'Exemple de boucle de la ligne 1 à 20 de ta feuille
        For i = 1 To 20
            
            'exemple pour trois de tes variables.. à toi de compléter le reste
            CustomerSequenceNumber = Cells(i, 1).Value
            CustomerStartDate = Cells(i, 2).Value
            CustomerBankIdentification = Cells(i, 5).Value
            
            xml = xml & "<Customer CustomerSequenceNumber='" & CustomerSequenceNumber & "' CustomerBankIdentification='" & CustomerBankIdentification & "'>" _
                    & "  <CustomerIdentification>" _
                    & "    <NaturalPersonId>" _
                    & "       <RRNIdentification>52082299872</RRNIdentification>" _
                    & "    </NaturalPersonId>" _
                    & "  </CustomerIdentification>" _
                    & "  <CustomerActions>" _
                    & "  <AddAction>" _
                    & "      <Contracts>" _
                    & "        <Contract RelationSequenceNumber='1'>" _
                    & "           <ContractTypeName>" _
                    & "<InstalmentLoan/>" _
                    & "</ContractTypeName>" _
                    & "<CustomerStartDate>" & CustomerStartDate & "</CustomerStartDate>" _
                    & "</Contract>" _
                    & "</Contracts>" _
                    & "</AddAction>" _
                    & "</CustomerActions>" _
              & "</Customer>"
        Next
        
        
        'Pour afficher le résultat dans la console
        Debug.Print xml
        
        'A la place, prévoir la génération d'un fichier text contenant ton xml. (fichier text que tu peux nommer  en .xml lors de la création )
        ' Voir : https://docs.microsoft.com/fr-fr/office/vba/language/reference/user-interface-help/createtextfile-method
        
        
        
    
    End Sub
    
    

    0
    1. malo1974
       
      Bonjour,
      Cela génère bien ce que je souhaite obtenir mais tout est mis à la suite dans la fenêtre d'exécution.
      Comment faire pour avoir un retour à la ligne à la fin de chaque ligne (après le > )
      0
      1. jordane45 Messages postés 30427 Date d'inscription   Statut Modérateur Dernière intervention   4 831 > malo1974
         
        Et bien.. tu regardes le code que je t'ai donné aux lignes 42 et 43
        0
      2. malo1974 > jordane45 Messages postés 30427 Date d'inscription   Statut Modérateur Dernière intervention  
         
        Code que je dois ajouter à la place de Debug.Print xml ?
        Désolé je ne sais pas comment faire.
        Merci de votre aide
        0
      3. malo1974 > malo1974
         
        Voilà j'ai trouvé la solution

        Dim FileNumber As Long
        Dim FileName As String
         
        FileName = "C:\Users\....\Desktop\exportXML.txt"
         
        FileNumber = FreeFile
        Open FileName For Output As #FileNumber
        Print #FileNumber, xml 
        Close #FileNumber


        Si ça peut servir à quelqu'un
        0
      4. malo1974 > malo1974
         
        Re,
        J'ai ajouté & vbCrLf comme suit

        Sub test()
            Dim xml As String
            Dim CustomerSequenceNumber  As String
            Dim RN As String
            Dim CustomerStartDate As String
            Dim CustomerBankIdentification As String
            Dim RelationSequenceNumber As String
            
            xml = "" ' variable qui contiendra le résultat final
            
            'Exemple de boucle de la ligne 1 à 20 de ta feuille
            For i = 2 To 201
                
                'exemple pour trois de tes variables.. à toi de compléter le reste
                CustomerSequenceNumber = Cells(i, 1).Value
                CustomerStartDate = Cells(i, 2).Value
                RN = Cells(i, 3).Value
                CustomerBankIdentification = Cells(i, 5).Value
                RelationSequenceNumber = Cells(i, 6).Value
                
                xml = xml & "<Customer CustomerSequenceNumber='" & CustomerSequenceNumber & "' CustomerBankIdentification='" & CustomerBankIdentification & "'>" _
                       & vbCrLf & "<CustomerIdentification>" _
                       & vbCrLf & "<NaturalPersonId>" _
                       & vbCrLf & "<RRNIdentification>" & RN & "</RRNIdentification>" _
                       & vbCrLf & "</NaturalPersonId>" _
                       & vbCrLf & "</CustomerIdentification>" _
                       & vbCrLf & "<CustomerActions>" _
                       & vbCrLf & "<AddAction>" _
                       & vbCrLf & "<Contracts>" _
                       & vbCrLf & "<Contract RelationSequenceNumber='" & RelationSequenceNumber & "'>" _
                       & vbCrLf & "<ContractTypeName>" _
                       & vbCrLf & "<InstalmentLoan/>" _
                       & vbCrLf & "</ContractTypeName>" _
                       & vbCrLf & "<CustomerStartDate>" & CustomerStartDate & "</CustomerStartDate>" _
                       & vbCrLf & "</Contract>" _
                       & vbCrLf & "</Contracts>" _
                       & vbCrLf & "</AddAction>" _
                       & vbCrLf & "</CustomerActions>" _
                       & vbCrLf & "</Customer>"
            Next
            
            
            'Pour afficher le résultat dans la console
            Debug.Print xml
            
            'A la place, prévoir la génération d'un fichier text contenant ton xml. (fichier text que tu peux nommer  en .xml lors de la création )
            ' Voir : https://docs.microsoft.com/fr-fr/office/vba/language/reference/user-interface-help/createtextfile-method
            
            
            
        
        End Sub
        
        

        mais je n'ai que les 10 derniers (de 190 à 200) dans la fenêtre d'éxécution ce qui représente 200 lignes dans mon fichier xml

        Il y a t-il une limite de ligne dans la fenêtre d'exécution ?
        0
  2. cs_Le Pivert Messages postés 8437 Statut Contributeur 730
     
    Bonjour,

    tu peux le faire directement d'Excel sans passer par un fichier texte:

    Option Explicit
    Sub vba_code_to_convert_excel_to_xml()
    Dim wb As Object
    Set wb = Workbooks.Open("C:\Users\LePivert\Documents\Customers.xlsx")
    wb.SaveAs Filename:="C:\Users\LePivert\Documents\Customers.xml", FileFormat:= _
            xlXMLSpreadsheet, ReadOnlyRecommended:=False, CreateBackup:=False
    End Sub
    'adapter les chemins
    

    0
    1. jordane45 Messages postés 30427 Date d'inscription   Statut Modérateur Dernière intervention   4 831
       
      Salut pivert ..
      La conversion en XML respectera le format attendu ? Je ne suis pas sûr...
      0
  3. malo1974
     
    Bonjour,
    Merci pour vos retours, je teste et reviens vers vous asap.
    Belle journée.
    0