Macro écriture fichier

Bonjour,

J'ai un document excel avec 3 colonnes de données: Nom - Référence - Prix

Je souhaite écrire un fichier avec des balises que j'ai définies en CONST

Mon fichier s'écrit bien, mais le contenu est pas comme je souhaite (voir ci-dessous).

Mon code VBA:

---- Ecriture du fichier

        'j=colonne
        'k = ligne
        Const BaliseProduitIN As String = "<PRODUIT>"
        Const BaliseProduitOUT As String = "</PRODUIT>"
        Const NomIN As String = "<NOM_Produit>"
        Const NomOUT As String = "</NOM_Produit>"
        Const RefIN As String = "<REF>"
        Const RefOUT As String = "</REF>"
        Const PrixIN As String = "<PRIX>"
        Const PrixOUT As String = "</PRIX>"

        For K = 2 To NbLignesDetails + 1
          Print #1, BaliseProduitIN
        For J = 1 To 3
        'Print #1, Sheets.Item(2).Cells(k, j).Value
        Print #1, NomIN, Trim(Sheets.Item(2).Cells(K, J).Value), NomOUT
           Next J
         Print #1, RefIN, Trim(Sheets.Item(2).Cells(K, J).Value), RefOUT

        Print #1, PrixIN, Trim(Sheets.Item(2).Cells(K, J).Value), PrixOUT
 Print #1, BaliseProduitOUT
        Next K

'---- Fermeture du fichier
    Close #1

Et mon fichier contient

<PRODUIT>

<NOM_Produit> Mulder </NOM_Produit>

<NOM_Produit> Fox </NOM_Produit>

<NOM_Produit> 1000 </NOM_Produit>

<REF> </REF>

<PRIX> </PRIX>

</PRODUIT>

<PRODUIT>

<NOM_Produit> Sculli </NOM_Produit>

<NOM_Produit> Dana </NOM_Produit>

<NOM_Produit> 2000 </NOM_Produit>

<REF> </REF>

<PRIX> </PRIX>

</PRODUIT>

Quelqu'un aurait une idée pour que pour le cas numéro 1 j'ai

<NOM_Produit> Mulder </NOM_Produit>

<REF> Fox </REF>

<PRIX> 1000 </PRIX>

Merci d'avance pour votre aide.

Vincent

Bonjour,

Sans avoir pu tester sur le fichier joint, une proposition :

.../...
        Const BaliseProduitIN As String = "<PRODUIT>"
        Const BaliseProduitOUT As String = "</PRODUIT>"
        Dim OpenB, CloseB   ' déclaration des tableaux de balise ouverture et fermeture

        'initialisation des tableaux de balises
        OpenB = Array("<NOM_Produit>", "<REF>", "<PRIX>")
        CloseB = Array("</NOM_Produit>", "</REF>", "</PRIX>")

        For K = 2 To NbLignesDetails + 1
            Print #1, BaliseProduitIN
            For J = 1 To 3
                Print #1, OpenB(J - 1), Trim(Sheets.Item(2).Cells(K, J).Value), CloseB(J - 1)
            Next J
            Print #1, BaliseProduitOUT
        Next K
.../...

A+

Pas mal! Merci! J'avais pas pensé au coup d'écrire dans des tableaux de balise!

Par contre, juste un détail, dans le fichier, ça écrit comme ça

<PRODUIT>

<NOM_Produit> Mulder </NOM_Produit>

J'aimerai qu'il n'y ai pas d'espace entre le "r" de Mulder et le "<" de la balise de fin de produit. C'est possible?

bonjour,

remplace les virgules par des esperluettes

donc ceci

Print #1, OpenB(J - 1), Trim(Sheets.Item(2).Cells(K, J).Value), CloseB(J - 1)

par ceci

Print #1, OpenB(J - 1) & Trim(Sheets.Item(2).Cells(K, J).Value) & CloseB(J - 1)

Ça marche! Merci!

J'adore ton pseudo H2SO4!

Bonjour à nouveau,

Je "déterre" le sujet fraichement enterré car j'ai une petite question.

En fait, j'aimerai que mon fichier de sortie soit formaté de sorte que pour chaque ligne lue de mon onglet, toutes les infos soient sur la même ligne et séparée par des ;

Par exemple: Fox;Mulder;3000;

Mon code actuel est

      
        'Ecriture du contenu du fichier
        For K = 2 To 5

            For J = 1 To 4
                       Print #1, Trim(Sheets.Item(2).Cells(K, J).Value)
            Next J
        Next K

Mais ça me renvoie à la ligne à chaque fois!

Une idée?

bonsoir,

essaie ceci (non testé)

 'Ecriture du contenu du fichier
        For K = 2 To 5
            ligne=""
            For J = 1 To 4
                       ligne=ligne &  Trim(Sheets.Item(2).Cells(K, J).Value) & ";" 
            Next J
            print #1,left(ligne,len(ligne)-1)
        Next K
Rechercher des sujets similaires à "macro ecriture fichier"