Bonjour,

Je suis novice dans la manipulation de fichiers XML.
Je cherche à récupérer des spécification d'import de fichier Excel sous Access.

Les spécifications d'import ne sont accessibles qu'en parcourant le modèle objet d'Access,et les spécifications d'import sont stockés dans un XML qui n'est pas consultable directement sous Access.
Afin de récupérer les information, j'ai utilisé le complément XML DOM et utilisé les fonctionnalités suivantes :

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
Sub litfichierxml()
Dim nomfic As String
nomfic = "<répertoire/fichier.xml>"
BrowseXMLDocument filename:=nomfic
End Sub
 
 
 
Private Sub BrowseXMLDocument(ByVal filename As String)
 
    Dim xmlDoc As DOMDocument, root As IXMLDOMElement
 
    Set xmlDoc = New DOMDocument
    xmlDoc.async = False
    xmlDoc.Load filename
    Set root = xmlDoc.documentElement
    If Not root Is Nothing Then
        Debug.Print root.baseName
        BrowseChildNodes root
    End If
 
End Sub
 
 Private Sub BrowseChildNodes(root_node As IXMLDOMNode)
 
    Dim i As Long
   Dim attr As IXMLDOMAttribute
    For i = 0 To root_node.childNodes.length - 1
        If root_node.childNodes.Item(i).nodeType <> 3 Then Debug.Print root_node.childNodes.Item(i).baseName
        For Each attr In root_node.childNodes.Item(i).Attributes
                 Debug.Print attr.baseName, attr.Text
        Next attr
        Debug.Print "-------------------------------------"
        BrowseChildNodes root_node.childNodes(i)
    Next
End Sub
A noter que je ne suis pas arriver à lire le code XML (variable de type string) sans avoir à l'exporter dans un fichier.
Lorsque j'essaye de lire un fichier ... rien ne se passe ! ...
Afin de contrôler si le fichier exporté est correct, j'ai essayé de le charger sous Excel; là Excel trouve des anomalies.
Je vous joins un exemple de fichier XML que je dois analyser ;

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
<?xml version="1.0" encoding="utf-8" ?>
<ImportExportSpecification Path = "\\ntsparigi\Comarea\Infrastrutture\2. SUIVI\1. Base de données\1. Base de données ACCESS\Data\envois_DAOT_MEDDTL.xlsx" xmlns="urn:www.microsoft.com/office/access/imexspec">
     <ImportExcel FirstRowHasNames="true" Destination="test_ECOMOUV - Suivi transmission DAOT au MEDDTL" Range="Feuil1$" >
            <Columns PrimaryKey="N° Site">
                  <Column Name="Col1" FieldName="N° Site" Indexed="YESDUPLICATES" SkipColumn="false" DataType="Double" />
                  <Column Name="Col2" FieldName="Ancien numéro" Indexed="NO" SkipColumn="false" DataType="Text" />
                  <Column Name="Col3" FieldName="Type CA" Indexed="NO" SkipColumn="false" DataType="Text" />
                  <Column Name="Col4" FieldName="Nom du fichier transmis - 1er envoi" Indexed="NO" SkipColumn="false" DataType="Text" />
                  <Column Name="Col5" FieldName="Date première transmission électronique" Indexed="NO" SkipColumn="false" DataType="DateTime" />
                  <Column Name="Col6" FieldName="Support première transmission électronique" Indexed="NO" SkipColumn="false" DataType="Text" />
                  <Column Name="Col7" FieldName="Date premier envoi papier" Indexed="NO" SkipColumn="false" DataType="DateTime" />
                  <Column Name="Col8" FieldName="Date accusé réception premier envoi papier" Indexed="NO" SkipColumn="false" DataType="DateTime" />
                  <Column Name="Col9" FieldName="Nom du fichier transmis - 2ème envoi" Indexed="NO" SkipColumn="false" DataType="Text" />
                  <Column Name="Col10" FieldName="Date seconde transmission électronique" Indexed="NO" SkipColumn="false" DataType="DateTime" />
                  <Column Name="Col11" FieldName="Support seconde transmission électronique" Indexed="NO" SkipColumn="false" DataType="Text" />
                  <Column Name="Col12" FieldName="Date deuxième envoi papier" Indexed="NO" SkipColumn="false" DataType="DateTime" />
                  <Column Name="Col13" FieldName="Date accusé réception deuxième envoi papier" Indexed="NO" SkipColumn="false" DataType="DateTime" />
                  <Column Name="Col14" FieldName="Nom du fichier transmis - 3ème envoi" Indexed="NO" SkipColumn="false" DataType="Text" />
                  <Column Name="Col15" FieldName="Date  3ème transmission électronique" Indexed="NO" SkipColumn="false" DataType="DateTime" />
                  <Column Name="Col16" FieldName="Support 3ème transmission électronique" Indexed="NO" SkipColumn="false" DataType="Text" />
                  <Column Name="Col17" FieldName="Date 3ème envoi papier" Indexed="NO" SkipColumn="false" DataType="DateTime" />
                  <Column Name="Col18" FieldName="Date accusé réception 3ème envoi papier" Indexed="NO" SkipColumn="false" DataType="DateTime" />
                  <Column Name="Col19" FieldName="Nom du fichier transmis - 4ème envoi" Indexed="NO" SkipColumn="false" DataType="Text" />
                  <Column Name="Col20" FieldName="Date  4ème transmission électronique" Indexed="NO" SkipColumn="false" DataType="DateTime" />
                  <Column Name="Col21" FieldName="Support 4ème transmission électronique" Indexed="NO" SkipColumn="false" DataType="Text" />
                  <Column Name="Col22" FieldName="Date 4ème envoi papier" Indexed="NO" SkipColumn="false" DataType="DateTime" />
                  <Column Name="Col23" FieldName="Date accusé réception 4ème envoi papier" Indexed="NO" SkipColumn="false" DataType="DateTime" />
                  <Column Name="Col24" FieldName="Nom du fichier transmis - 5ème envoi" Indexed="NO" SkipColumn="false" DataType="Text" />
                  <Column Name="Col25" FieldName="Date  5ème transmission électronique" Indexed="NO" SkipColumn="false" DataType="DateTime" />
                  <Column Name="Col26" FieldName="Support 5ème transmission électronique" Indexed="NO" SkipColumn="false" DataType="Text" />
                  <Column Name="Col27" FieldName="Date 5ème envoi papier" Indexed="NO" SkipColumn="false" DataType="DateTime" />
                  <Column Name="Col28" FieldName="Date accusé réception ème envoi papier" Indexed="NO" SkipColumn="false" DataType="DateTime" />
                  <Column Name="Col29" FieldName="Demande complément AOT - Nom fichier" Indexed="NO" SkipColumn="false" DataType="Text" />
                  <Column Name="Col30" FieldName="Demande complément AOT - Date tranmission électronique" Indexed="NO" SkipColumn="false" DataType="DateTime" />
                  <Column Name="Col31" FieldName="Demande complément AOT - Date tranmission papier" Indexed="NO" SkipColumn="false" DataType="DateTime" />
                  <Column Name="Col32" FieldName="Date commentaires n°1 MEDDTL" Indexed="NO" SkipColumn="false" DataType="DateTime" />
                  <Column Name="Col33" FieldName="Commentaires n°1 MEDDTL" Indexed="NO" SkipColumn="false" DataType="Text" />
                  <Column Name="Col34" FieldName="Commentaires n°1 transmis à SETEC ? (0/1)" Indexed="NO" SkipColumn="false" DataType="DateTime" />
                  <Column Name="Col35" FieldName="Date réponse commentaires n°1 par ECOMOUV" Indexed="NO" SkipColumn="false" DataType="DateTime" />
                  <Column Name="Col36" FieldName="Réponse commentaires n°1 par ECOMOUV" Indexed="NO" SkipColumn="false" DataType="DateTime" />
                  <Column Name="Col37" FieldName="Date commentaires n°2 MEDDTL" Indexed="NO" SkipColumn="false" DataType="DateTime" />
                  <Column Name="Col38" FieldName="Commentaires n°2 MEDDTL" Indexed="NO" SkipColumn="false" DataType="Text" />
                  <Column Name="Col39" FieldName="Commentaires n°2 transmis à SETEC ? (0/1)" Indexed="NO" SkipColumn="false" DataType="DateTime" />
                  <Column Name="Col40" FieldName="Date réponse commentaires n°2 par ECOMOUV" Indexed="NO" SkipColumn="false" DataType="DateTime" />
                  <Column Name="Col41" FieldName="Réponse commentaires n°2 par ECOMOUV" Indexed="NO" SkipColumn="false" DataType="DateTime" />
                  <Column Name="Col42" FieldName="Date commentaires n°3 MEDDTL" Indexed="NO" SkipColumn="false" DataType="DateTime" />
                  <Column Name="Col43" FieldName="Commentaires n°3 MEDDTL" Indexed="NO" SkipColumn="false" DataType="Memo" />
                  <Column Name="Col44" FieldName="Commentaires n°3 transmis à SETEC ? (0/1)" Indexed="NO" SkipColumn="false" DataType="DateTime" />
                  <Column Name="Col45" FieldName="Date réponse commentaires n°3 par ECOMOUV" Indexed="NO" SkipColumn="false" DataType="DateTime" />
                  <Column Name="Col46" FieldName="Réponse commentaires n°3 par ECOMOUV" Indexed="NO" SkipColumn="false" DataType="DateTime" />
                  <Column Name="Col47" FieldName="Date commentaires n°4 MEDDTL" Indexed="NO" SkipColumn="false" DataType="DateTime" />
                  <Column Name="Col48" FieldName="Commentaires n°4 MEDDTL" Indexed="NO" SkipColumn="false" DataType="Memo" />
                  <Column Name="Col49" FieldName="Champ49" Indexed="NO" SkipColumn="false" DataType="DateTime" />
                  <Column Name="Col50" FieldName="Date réponse commentaires n°4 par ECOMOUV" Indexed="NO" SkipColumn="false" DataType="DateTime" />
                  <Column Name="Col51" FieldName="Réponse commentaires n°4 par ECOMOUV" Indexed="NO" SkipColumn="false" DataType="DateTime" />
                  <Column Name="Col52" FieldName="Date refus" Indexed="NO" SkipColumn="false" DataType="DateTime" />
                  <Column Name="Col53" FieldName="Motif refus" Indexed="NO" SkipColumn="false" DataType="Text" />
                  <Column Name="Col54" FieldName="Synthèse motif refus" Indexed="NO" SkipColumn="false" DataType="Text" />
                  <Column Name="Col55" FieldName="Réponse au refus" Indexed="NO" SkipColumn="false" DataType="Text" />
                  <Column Name="Col56" FieldName="Indice refus" Indexed="NO" SkipColumn="false" DataType="Double" />
                  <Column Name="Col57" FieldName="Date refus CAOT" Indexed="NO" SkipColumn="false" DataType="Text" />
                  <Column Name="Col58" FieldName="Motif refus CAOT" Indexed="NO" SkipColumn="false" DataType="DateTime" />
                  <Column Name="Col59" FieldName="Synthèse motif refus CAOT" Indexed="NO" SkipColumn="false" DataType="DateTime" />
                  <Column Name="Col60" FieldName="Réponse au refus CAOT" Indexed="NO" SkipColumn="false" DataType="DateTime" />
                  <Column Name="Col61" FieldName="Indice refus CAOT" Indexed="NO" SkipColumn="false" DataType="Text" />
             </Columns>
        </ImportExcel>
</ImportExportSpecification>
Ce fichier refuse d'être parsé. J'en ai très vite conclu que la présence de caractères accentués était à l'origine de ce dysfonctionnement

Ceci est un fichier que j'ai manipulé (j'ai enlevé tous les caractères accentués), et qui fonctionne:

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
<?xml version="1.0" encoding="utf-8" ?>
<ImportExportSpecification Path = "C:\Users\isabelle pierre\Documents\Jean-Yves DUMAS\Frontend local\Data\conducteurs_travaux.xlsx" xmlns="urn:www.microsoft.com/office/access/imexspec">
     <ImportExcel FirstRowHasNames="true" Destination="test import table excel" Range="Referentiel$" >
            <Columns PrimaryKey="ID_Etat">
                  <Column Name="Col1" FieldName="ID_Etat" Indexed="NO" SkipColumn="false" DataType="Double" />
                  <Column Name="Col2" FieldName="Type" Indexed="NO" SkipColumn="false" DataType="Text" />
                  <Column Name="Col3" FieldName="GV" Indexed="NO" SkipColumn="false" DataType="Text" />
                  <Column Name="Col4" FieldName="Region" Indexed="NO" SkipColumn="false" DataType="Text" />
                  <Column Name="Col5" FieldName="Dep" Indexed="NO" SkipColumn="false" DataType="Text" />
                  <Column Name="Col6" FieldName="Commune" Indexed="NO" SkipColumn="false" DataType="Text" />
                  <Column Name="Col7" FieldName="Statut" Indexed="NO" SkipColumn="false" DataType="Text" />
                  <Column Name="Col8" FieldName="Entreprise" Indexed="NO" SkipColumn="false" DataType="Text" />
                  <Column Name="Col9" FieldName="Conducteur de travaux" Indexed="NO" SkipColumn="false" DataType="Text" />
                  <Column Name="Col10" FieldName="email" Indexed="NO" SkipColumn="false" DataType="Text" />
                  <Column Name="Col11" FieldName="Mobile" Indexed="NO" SkipColumn="false" DataType="Text" />
                  <Column Name="Col12" FieldName="Ligne Fixe" Indexed="NO" SkipColumn="false" DataType="Text" />
             </Columns>
        </ImportExcel>
</ImportExportSpecification>
Je souhaiterais m'affranchir de ce problème de caractère accentué. En lisant plusieurs article, je pense qu'une solution serait de passer par un encodage en utf-16. Une autre solution serait de remplacer les caractères accentués par des coaractères compatibles. J'ai essayé de les remplacer par les équivalents HTML (ex: é par &eacute; ), mais sans plus de succès.

Comment faire pour rendre ce code HTML parsable ?
Je précise que je n'ai pas la main sur l'en-tête Xml (notamment l'encodage, où il force l'encodage en utf-8

NB : J'ai posté aussi ce topic sur le forum VB6.