Ceci est une page optimisée pour les mobiles. Cliquez sur ce texte pour afficher la vraie page.

import fichier XML

danval

XLDnaute Junior
bonjour à tous,

je suis débutant en VBA et je réalise mes fichiers en prenant des bout de code à droite et à gauche et en les adaptant à ce que je veux mais cela à ces limites.

je travaille sur un projet afin de voir en "live" la planification des travaux.

j'ai réalisé un fichier qui exporte un fichier xml par feuille dans un répertoire portant le nom de la feuille.
celui-ci fonctionne trés bien.


voila mon code d'exportation:


Code:
Sub ExportDesDonneesXML()
 
On Error Resume Next
 
Application.ScreenUpdating = False
Application.EnableEvents = False
Application.DisplayAlerts = False
 
Dim Chemin As String
Dim Nom As String
Dim Fichier As String
Dim numfile As Integer
Dim i As Integer
 
Chemin = "N:\MOYENS GENERAUX\Imprimerie\FichiersXMLindicateurs\XML\communication\janvier\"
Nom = ActiveWorkbook.Name
Nom = Split(Nom, ".")(0)                                            'On prend le nom du fichier courant sans son extension .xls
Fichier = Chemin & Nom & ".xml"
 
numfile = FreeFile
Open Fichier For Output As #numfile
Print #numfile, "<?xml version='1.0'  encoding='ISO-8859-1' ?>"
Print #numfile, "<releves>"
i = 10
    While Cells(i, 6) <> ""
        Print #numfile, "<factures>"
            Print #numfile, "<numFacture>" & Cells(i, 1) & "</numFacture>"
            Print #numfile, "<date>" & Cells(i, 2) & "</date>"
            Print #numfile, "<C>" & Cells(i, 3) & "</C>"
            Print #numfile, "<service>" & Cells(i, 4) & "</service>"
            Print #numfile, "<numero>" & Cells(i, 5) & "</numero>"
            Print #numfile, "<intitule>" & Cells(i, 7) & "</intitule>"
            Print #numfile, "<machine>" & Cells(i, 8) & "</machine>"
            Print #numfile, "<couleur>" & Cells(i, 9) & "</couleur>"
            Print #numfile, "<rectoVerso>" & Cells(i, 10) & "</rectoVerso>"
            Print #numfile, "<brochure>" & Cells(i, 11) & "</brochure>"
            Print #numfile, "<formatFini>" & Cells(i, 12) & "</formatFini>"
            Print #numfile, "<nbreDePages>" & Cells(i, 13) & "</nbreDePages>"
            Print #numfile, "<attente>" & Cells(i, 14) & "</attente>"
            Print #numfile, "<nbreDExemplaires>" & Cells(i, 15) & "</nbreDExemplaires>"
            Print #numfile, "<O>" & Cells(i, 16) & "</O>"
            Print #numfile, "<papier>" & Cells(i, 17) & "</papier>"
            Print #numfile, "<Q>" & Cells(i, 18) & "</Q>"
            Print #numfile, "<typeDePapier>" & Cells(i, 19) & "</typeDePapier>"
            Print #numfile, "<S>" & Cells(i, 20) & "</S>"
            Print #numfile, "<NbreDeFeuilles>" & Cells(i, 21) & "</NbreDeFeuilles>"
            Print #numfile, "<feuillesOffset>" & Cells(i, 22) & "</feuillesOffset>"
            Print #numfile, "<V>" & Cells(i, 23) & "</V>"
            Print #numfile, "<NbreDeTours>" & Cells(i, 24) & "</NbreDeTours>"
            Print #numfile, "<X>" & Cells(i, 25) & "</X>"
            Print #numfile, "<montage>" & Cells(i, 26) & "</montage>"
            Print #numfile, "<Z>" & Cells(i, 27) & "</Z>"
            Print #numfile, "<NbreDePlaques>" & Cells(i, 28) & "</NbreDePlaques>"
            Print #numfile, "<AB>" & Cells(i, 29) & "</AB>"
            Print #numfile, "<NbreDexPlies>" & Cells(i, 30) & "</NbreDexPlies>"
            Print #numfile, "<Perfos>" & Cells(i, 31) & "</Perfos>"
            Print #numfile, "<NbreDexAssembles>" & Cells(i, 32) & "</NbreDexAssembles>"
            Print #numfile, "<miseSousPlis>" & Cells(i, 33) & "</miseSousPlis>"
            Print #numfile, "<AG>" & Cells(i, 34) & "</AG>"
            Print #numfile, "<couleur2>" & Cells(i, 35) & "</couleur2>"
            Print #numfile, "<prix>" & Cells(i, 36) & "</prix>"
        Print #numfile, "</factures>"
        i = i + 1
    Wend
 
Print #numfile, "</releves>"
Close #numfile
 
Application.ScreenUpdating = True
Application.EnableEvents = True
Application.DisplayAlerts = True
 
If (Err.Number <> 0) Then GoTo plantage   'gestion des erreurs afin de prévenir l'utilisateur
 
MsgBox "Les données XML ont bien été exportées.", vbOKOnly + vbInformation, "Message"
 
Exit Sub
 
plantage:
MsgBox "Une erreur s'est produite : l'export des données ne s'est pas passé correctement !", vbCritical
 
End Sub

j'ai aussi réalisé un autre fichier qui compte douze feuilles (une par mois).
je réalise l'importation grâce à un mappage de tout les fichiers XML d'un même répertoire dans la feuille portant le nom du répertoire et ceci bout à bout.
il fonctionne sur la feuille de janvier qui possède un mappage.

voici donc mon probléme:

j'ai donc fait une copie pour les onze autres mois de la feuille.

elles ont toute la même structure et le même mappage.

il y a deux choses que je n'arrive pas à faire:

1 - étendre la macro à toute les feuilles: charger les xml du répertoire février dans la feuille février,...

2 - lorsque je lance la macro elle ajoute le contenu des fichiers xml dans la feuille à la suite de ce qu'il y as déjà.
le problème est que le fichier importé est dèja présent dedans donc il y as doublon.
ce qu'il faudrait s'est effacer les feuilles avant de procédé à l'import.

comme il y as un mappage j'ai un cadre bleu qui suit les données et je n'arrive pas à effacer.


macro import:


Code:
Sub ActuDonneesClasseur()
'
' ActuDonneesClasseur Macro
' Macro enregistrée le 09/04/2013 par plancot daniel
'
 
'
On Error Resume Next
 
Application.EnableEvents = False
Application.DisplayAlerts = False
Application.ScreenUpdating = False
 
Dim Repertoire As String
Dim Fichier As String
Dim ws As Worksheet
 
'-------------- Retrait de la protection de tous les onglets ------------------------
For Each ws In ThisWorkbook.Worksheets
    ws.Unprotect Password:=""
Next ws
 
ActiveWorkbook.XmlMaps("commandesFournitures_Mappage").DataBinding.Refresh          'Appel pour mise à jour des données XML
 
Repertoire = "N:\MOYENS GENERAUX\Imprimerie\FichiersXMLindicateurs\xml\communication\janvier\"
Fichier = Dir(Repertoire & "*.xml")                                                 ' recherche des fichiers .xml dans le répertoire FichiersXMLindicateurs
 
While Fichier <> ""                                                                 ' On importe les données de tous les fichiers xml trouvés dans le mappage releves_Travaux_Imprimerie
    ThisWorkbook.XmlMaps("releves_Travaux_Imprimerie").Import URL:=Repertoire & Fichier
    If (Err.Number = 0) Then Kill (Repertoire & Fichier)                            'S'il n'y a pas eu de pb, une fois l'importation réalisée on suprime le fichier XML afin d'éviter les redondances de données
    Fichier = Dir()
Wend
 
 
    ActiveWorkbook.RefreshAll                                                       'Mise à jour de toutes les requêtes et des TxD
 
'------------------------ Remise en place de la protection des onglets ----------------
For Each ws In ThisWorkbook.Worksheets
    ws.Protect Password:="", DrawingObjects:=False, Contents:=True, Scenarios:=True _
        , UserInterfaceOnly:=True, AllowFormattingCells:=True, AllowFormattingColumns:=True, _
        AllowSorting:=True, AllowFiltering:=True, AllowUsingPivotTables:=True
Next ws
 
Application.ScreenUpdating = True
Application.EnableEvents = True
Application.DisplayAlerts = True
 
If (Err.Number <> 0) Then GoTo plantage    'gestion des erreurs afin de prévenir l'utilisateur
 
MsgBox "Toutes les données ont été actualisées.", vbOKOnly + vbInformation, "Message"
 
Exit Sub
 
plantage:
MsgBox "Une erreur s'est produite : la mise à jour des données a échouée.", vbCritical
 
End Sub

une chose l'exportation n'utilise pas le mappage volontairement car il est utilisé par 6 personnes dont deux ou le mappage ne fonctionne pas sur leur MAC.

je joint à ce post un XML, mon fichier export et mon fichier import avec les macros dedans.

par avance merci pour votre aide trés précieuse.

Daniel


Regarde la pièce jointe Archive.zip
 

Pièces jointes

  • Archive.zip
    149.6 KB · Affichages: 33
  • Archive.zip
    149.6 KB · Affichages: 27
G

Guest

Guest
Re : import fichier XML

Re,

Aïe...mille excuses à te présenter, mon agrafe vigilante...! Sont en dessous de tout les potes d'aujourd'hui, mon ami!
Bon, j'essaierai de faire moins de choses en même temps pour ne pas louper l'essentiel du forum.

agrafe à dit:
BBCODE t'a trahi
Si seulement c'était le seul! je crois que ma caboche aussi me trahi!

A+++
 

Discussions similaires

Réponses
2
Affichages
640
Les cookies sont requis pour utiliser ce site. Vous devez les accepter pour continuer à utiliser le site. En savoir plus…