marco pour générer xml

Lipadec

XLDnaute Occasionnel
Bonjour le Forum et bon début de semaine

Après une longue absence, je reviens vers vous pour vous demander de l'aide
Je voudrai une macro qui pourra me générer un fichier xml suivant un fichier excel défini 2003 ou 2007
sur le fichier excel j'ai:

RAISON SOCIALE
ID_FISCALE
ANNEE
PERIODE(MOIS)
REGIME(ENCAISSEMENT)

puis sur chaque cellule à partir de A, il y a:

ord num des mht tva ttc if nom ice tx id dpai dfac

Le modèle du fichier xml que j'espère avoir sera comme suit

<?xml version="1.0"?>
<DeclarationReleveDeduction xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
<identifiantFiscal>----</identifiantFiscal>
<annee>----</annee>
<periode>----</periode>
<regime>----</regime>
<releveDeductions>
<rd>
<ord>----</ord>
<num>----</num>
<des>----</des>
<mht>----</mht>
<tva>----</tva>
<ttc>----</ttc>
<refF>
<if>----</if>
<nom>----</nom>
<ice>----</ice>
</refF>
<tx>----</tx>
<mp>
<id>----</id>
</mp>
<dpai>----</dpai>
<dfac>----</dfac>
</rd>

Merci d'avance pour votre aide

Lipadec
 

max.lander

XLDnaute Occasionnel
Re : marco pour générer xml

Bonjour à tous,

Lipadec tu peux essayer de cette manière :
L'exemple est à développer.

Code:
Sub GenXML()
Dim chemin As String
Dim ordre As String

ordre = Sheets("feuil1").Range("B2").Value

chemin = "D:\Monfichier" & " " & ".xml"
Nom_fichier = chemin


Dim intFic As Integer
intFic = FreeFile

Open Nom_fichier For Append As intFic

Print #intFic, "<ord>" & ordre & "</ord>"


Close intFic

End Sub






A+
 

Lipadec

XLDnaute Occasionnel
Re : marco pour générer xml

Bonjour Le Forum
Bonjour max.lander

Tout d'abord merci beaucoup pour votre réponse
J'ai bien reçu le code, mais malheureusement vous m'avez dit "l'exemple est à développer", je peux vous dire que je n'ai pas pu continuer.
en changeant le chemin et le dossier de destination, je n'ai eu que ces deux lignes:
<?xml version="1.0"?>
<ord>xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"</ord>

Donc il y a quelque chose d'autres à ajouter
Veuillez me donnez plus d'explications, et je vous en serai très reconnaissant.
Bonne fin de journée, et merci une autre fois
Lipadec
 

max.lander

XLDnaute Occasionnel
Re : marco pour générer xml

Lipadec,

Il s'agit d' un simple exemple pour créer un fichier xml avec une balise <ord></ord>.
avec le contenu de la cellule "B2" en paramètre.


Il faudrait ajouter les lignes de code pour chaque balise avec les cellules à prendre en compte de cette manière :

Code:
Print #intFic <num> votre valeur </num>

Print #intFic  <des>votre valeur</des>
Print #intFic  <mht>votre valeur</mht>
Print #intFic  <tva>votre valeur</tva>
Print #intFic  <ttc>votre valeur</ttc>


Si vous pouvez poster un fichier exemple c'est mieux !
 

Lipadec

XLDnaute Occasionnel
Re : marco pour générer xml

Bonjour tout le monde
Bonjour max.lander et merci une autre fois pour votre collaboration
Je transmets en pièce jointe un modèle de fichier dont j'ai besoin. Il faut savoir que sur mon fichier réel j'ai parfois plus de 150 lignes
J'espère avoir transmis le fichier qui vous servira à me délivrer de mon souci de transfert xls à xml
Merci beaucoup
 
Dernière édition:

max.lander

XLDnaute Occasionnel
Re : marco pour générer xml

Salut à tous,

Lipadec le code ci-dessous génère autant de fichiers qu'il de lignes, je ne suis pas sûr que c'est que tu souhaites.

Si le résultat attendu c'est un seul fichier, merci de nous indiquer la séquence de renouvellement des blocs.
je suppose que les premières lignes ne sont pas à répéter, les informations de chaque lignes sont sûrement séparées par des balises (<rd> ???) etc...


A+

Code:
Sub GenXML()
Dim derligne As Integer
Dim Chemin, Fichier As String


'ordre = Sheets("feuil1").Range("B2").Value

derligne = Range("A" & Rows.Count).End(xlUp).Row
  For Each cell In Range("A1:A" & derligne)
 If Not IsEmpty(cell.Value) And IsNumeric(cell.Value) Then

Id_Fichier = Cells(cell.Row, (cell.Column) + 2).Value
Chemin = "C:\" & Id_Fichier & " " & ".xml"
Fichier = Chemin

Dim intFic As Integer
intFic = FreeFile



Open Fichier For Output As intFic

Print #intFic, "<?xml version="; 1#; "?>"
Print #intFic, "<DeclarationReleveDeduction xmlns:xsi=""http://www.w3.org/2001/XMLSchema-instance"" xmlns:xsd=""http://www.w3.org/2001/XMLSchema"">"


Print #intFic, "<identifiantFiscal>" & Sheets("DEDUC").Range("C2").Value & "</identifiantFiscal>"
Print #intFic, "<annee>" & Sheets("DEDUC").Range("C3").Value & "</annee>"
Print #intFic, "<periode>" & Sheets("DEDUC").Range("C4").Value & "</periode>"
Print #intFic, "<regime>" & Sheets("DEDUC").Range("C5").Value & "</regime>"
Print #intFic, "<releveDeductions>"
Print #intFic, "<rd>"
Print #intFic, "<ord>" & Cells(cell.Row, (cell.Column)).Value & "</ord>"
Print #intFic, "<num>" & Cells(cell.Row, (cell.Column) + 1).Value & "</num>"
Print #intFic, "<des>" & Cells(cell.Row, (cell.Column) + 2).Value & "</des>"
Print #intFic, "<mht>" & Cells(cell.Row, (cell.Column) + 3).Value & "</mht>"
Print #intFic, "<tva>" & Cells(cell.Row, (cell.Column) + 4).Value & "</tva>"
Print #intFic, "<ttc>" & Cells(cell.Row, (cell.Column) + 5).Value & "</ttc>"
Print #intFic, "<refF>"
Print #intFic, "<if>"; Cells(cell.Row, (cell.Column) + 6).Value; "</if>"
Print #intFic, "<nom>" & Sheets("DEDUC").Range("C7").Value & "</nom>"
Print #intFic, "<ice>" & Cells(cell.Row, (cell.Column) + 8).Value & "</ice>"
Print #intFic, "</refF>"
Print #intFic, "<tx>" & Cells(cell.Row, (cell.Column) + 9).Value& & "</tx>"
Print #intFic, "<mp>"
Print #intFic, "<id>" & " Pas trouvé dans les infos" & "</id>"   ' à définir
Print #intFic, "</mp>"
Print #intFic, "<dpai>" & Cells(cell.Row, (cell.Column) + 11).Value & "</dpai>"
Print #intFic, "<dfac>" & "Pas trouvé dans les infos" & "</dfac>"   ' à définir
Print #intFic, "</rd>"


Close intFic

End If

Next

 

End Sub
 

Lipadec

XLDnaute Occasionnel
Re : marco pour générer xml

ReBonjour tout le monde
ReBonjour max.lander
Merci pour votre aide
Je viens d'appliquer le code que vous m'avez envoyé, et suite à quelques modifications j'ai exécuté la macro, et voici ce qu'elle me donne:
<?xml version= 1 ?>
<DeclarationReleveDeduction xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
<identifiantFiscal>123456</identifiantFiscal>
<annee>2016</annee>
<periode>5</periode>
<regime>1</regime>
<releveDeductions>
<rd>
<ord>12</ord>
<num>76</num>
<des>ART12</des>
<mht>175</mht>
<tva>35</tva>
<ttc>210</ttc>
<refF>
<if>123467</if>
<nom>SOCIETE</nom>
<ice>00145236987012</ice>
</refF>
<tx>0,2</tx>
<mp>
<id>2</id>
</mp>
<dpai>11/05/2016</dpai>
<dfac>29/02/2016</dfac>
</rd>
c'est un fichier xml qui contient les premières lignes d'information, et juste les données de la dernière ligne, "ord" 12 suivant le modèle que je vous ai envoyé.
Alors comment faire pour générer les autres lignes, à savoir les n° "ord" du 1 au N° 11
J'espère ne pas trop vous demander, car avant tout je suis nul en VBA, tout ce que je fais c'est grâce à vos explications et vos conseils.
Merci mille fois
 
Dernière édition:

max.lander

XLDnaute Occasionnel
Re : marco pour générer xml

Le code modifié pour avoir un fichier.

Par contre je n'ai pas compris votre séquençage, par défaut j'ai utilisé les balises <rd> </rd> pour séparer les changement de lignes.


Code:
Sub GenXML()
Dim derligne As Integer
Dim Chemin, Fichier As String


derligne = Range("A" & Rows.Count).End(xlUp).Row
 

Chemin = "D:\FichierGen" & ".xml"
Fichier = Chemin


Dim intFic As Integer
intFic = FreeFile


Open Fichier For Output As intFic

Print #intFic, "<?xml version="; 1#; "?>"
Print #intFic, "<DeclarationReleveDeduction xmlns:xsi=""http://www.w3.org/2001/XMLSchema-instance"" xmlns:xsd=""http://www.w3.org/2001/XMLSchema"">"


Print #intFic, "<identifiantFiscal>" & Sheets("DEDUC").Range("C2").Value & "</identifiantFiscal>"
Print #intFic, "<annee>" & Sheets("DEDUC").Range("C3").Value & "</annee>"
Print #intFic, "<periode>" & Sheets("DEDUC").Range("C4").Value & "</periode>"
Print #intFic, "<regime>" & Sheets("DEDUC").Range("C5").Value & "</regime>"
Print #intFic, "<releveDeductions>"

 For Each cell In Range("A1:A" & derligne)
 If Not IsEmpty(cell.Value) And IsNumeric(cell.Value) Then


Print #intFic, "<rd>"
Print #intFic, "<ord>" & Cells(cell.Row, (cell.Column)).Value & "</ord>"
Print #intFic, "<num>" & Cells(cell.Row, (cell.Column) + 1).Value & "</num>"
Print #intFic, "<des>" & Cells(cell.Row, (cell.Column) + 2).Value & "</des>"
Print #intFic, "<mht>" & Cells(cell.Row, (cell.Column) + 3).Value & "</mht>"
Print #intFic, "<tva>" & Cells(cell.Row, (cell.Column) + 4).Value & "</tva>"
Print #intFic, "<ttc>" & Cells(cell.Row, (cell.Column) + 5).Value & "</ttc>"
Print #intFic, "<refF>"
Print #intFic, "<if>"; Cells(cell.Row, (cell.Column) + 6).Value; "</if>"
Print #intFic, "<nom>" & Sheets("DEDUC").Range("C7").Value & "</nom>"
Print #intFic, "<ice>" & Cells(cell.Row, (cell.Column) + 8).Value & "</ice>"
Print #intFic, "</refF>"
Print #intFic, "<tx>" & Cells(cell.Row, (cell.Column) + 9).Value& & "</tx>"
Print #intFic, "<mp>"
Print #intFic, "<id>" & " Pas trouvé dans les infos" & "</id>"   ' à définir
Print #intFic, "</mp>"
Print #intFic, "<dpai>" & Cells(cell.Row, (cell.Column) + 11).Value & "</dpai>"
Print #intFic, "<dfac>" & Cells(cell.Row, (cell.Column) + 12).Value & "</dfac>"   ' à définir
Print #intFic, "</rd>"


End If

Next

end sub
 
Dernière édition:

Lipadec

XLDnaute Occasionnel
Re : marco pour générer xml

Bonjour le Forum
Bonjour max.lander
Vraiment, merci beaucoup pour votre aide. Votre code je l'ai appliqué à mon fichier d'origine (après quelques modifications)
J'ai même affecté la macro à un bouton sur ma feuille, et ça marche à merveille.
Toutefois, j'ai encore quelque chose à vous demander.
Sur le fichier généré, la derniere ligne de mon tableau ne s'affiche pas en entier, seulement jusqu'à la colonne 8. Je ne sais pas pourquoi, pourtant toutes les autres lignes s'affichent en entier.
J'ai sur mon fichier une dernière ligne qui affiche le total HT;le total de la TVA et le total TTC. Comment pourrai-je générer cette ligne dans mon fichier XML.
Pour l'enregistrement du fichier XML généré, y a-t-il un moyen pour que la macro me propose de nommer ce fichier et de l'enregistrer là où je veux.
Dans tous les cas, je vous remercie beaucoup, et je remercie beaucoup ce forum qui m'a tant appris depuis mon adhésion en 2006.
Bonne fin de journée à vous et à tout le monde
 

Lipadec

XLDnaute Occasionnel
Re : marco pour générer xml

Re.
Ok voici en pièce jointe le fichier zipé, mais il reste ce que je vous ai demandé à propos de la dernière ligne du total ainsi que la manière d'enregistrer le fichier XML généré

Encore une fois merci
 
Dernière édition:

max.lander

XLDnaute Occasionnel
Re : marco pour générer xml

Bonjour le Forum
Bonjour max.lander
Vraiment, merci beaucoup pour votre aide. Votre code je l'ai appliqué à mon fichier d'origine (après quelques modifications)
J'ai même affecté la macro à un bouton sur ma feuille, et ça marche à merveille.
Toutefois, j'ai encore quelque chose à vous demander.
Sur le fichier généré, la derniere ligne de mon tableau ne s'affiche pas en entier, seulement jusqu'à la colonne 8. Je ne sais pas pourquoi, pourtant toutes les autres lignes s'affichent en entier.
J'ai sur mon fichier une dernière ligne qui affiche le total HT;le total de la TVA et le total TTC. Comment pourrai-je générer cette ligne dans mon fichier XML.
Pour l'enregistrement du fichier XML généré, y a-t-il un moyen pour que la macro me propose de nommer ce fichier et de l'enregistrer là où je veux.
Dans tous les cas, je vous remercie beaucoup, et je remercie beaucoup ce forum qui m'a tant appris depuis mon adhésion en 2006.
Bonne fin de journée à vous et à tout le monde


Bonjour à tous,

Lipadec Je ne vois pas les lignes incomplètes, peux tu préciser ?


Pour mettre en place les informations liées à la totalisation, il nous faut les balises suivantes :

Total HT
Total de la TVA
Total TTC


A+
 

Lipadec

XLDnaute Occasionnel
Re : marco pour générer xml

Bonjour tout le monde
Les totaux HT, TVA et TTC sont sur la ligne 103 et qui est la dernière ligne du fichier que j'ai envoyé
Pour l'enregistrement du fichier XML généré, y a-t-il un moyen pour que la macro me propose de nommer ce fichier et de l'enregistrer là où je veux.
Je crois qu'il faut changer

Chemin = "E:\DEDUCTION\FichierGen" & ".xml"
Fichier = Chemin
 
Dernière édition:

max.lander

XLDnaute Occasionnel
Re : marco pour générer xml

Bonsoir,

Ci-joint le fichier modifié.

Attention tu noteras que j'ai ajouté la mention "Total" en C103 qu'il faut garder impérativement pour déterminer la ligne total.

Tu ne nous as pas communiqué les balises Total TVA, Total TTC je les ai donc inventées


A+

Edit : j'ai supprimé les PJ à la demande de l'intéressé mais je laisse la totalité du code
 
Dernière édition:

Statistiques des forums

Discussions
312 511
Messages
2 089 164
Membres
104 056
dernier inscrit
fxcas