XL 2010 Boucle sur fichiers XML - Méthode d'accès

Twing83

XLDnaute Junior
Bonsoir,
Je suis en galère depuis plusieurs jours pour un problème certainement très connu, mais pas de moi...
J'ai un répertoire contenant 3 types de fichiers XML différents.
Je le sauvegarde (jamais trop prudent...) et je créé un répertoire par type.
Mon problème est que lorsque j'exécute mon code pour boucler sur les fichiers d'un répertoire afin d'importer les données, suivant la méthode d'accès au répertoire, mon import ne s'effectue pas, je m'explique :
- Si je sélectionne le répertoire par "Application.FileDialog(msoFileDialogFolderPicker)" ça fonctionne correctement.
- Si je récupère le chemin via une cellule ça ne fonctionne pas.
Encore plus étrange, si j'essaye en premier la méthode "FileDialog" et ensuite via le chemin dans une cellule ça marche.
J'ai tout essayé, les "/", les " \", écrire directement le chemin, rien n'y fait, toujours le même constat, dans un ordre c'est bon mais pas dans l'autre.
J'ai essayé sur un autre PC (on ne sait jamais...), mais pas mieux...
Si quelqu'un a une idée.
Merci d'avance.
 
Solution
Bonjour à tous,
J'ai enfin eu le temps de tester la solution de TooFatBoy #45 et le résultat est à la hauteur de mes attentes.
Merci également à patricktoulon pour ton code #45 qui permet de robustifier mes procédures.
Un grand merci à vous... :)

TooFatBoy

XLDnaute Barbatruc
Pour résumer :

1- Il faut commencer par lancer la macro dumps.
2- Ladite macro demande un nom de dossier (dossier de sauvegarde qu'elle va créer dans le dossier du classeur).
3- Elle va ensuite demander le classeur source contenant les fichiers à sauvergarder.
4- Une fois qu'elle a fait les sauvegardes, elle inscrit les deux chemins encellules A1 et A2 de "Feuil1".

5- Il faut maintenant lancer la macro ExtracAttributesPathAuto.
6- Elle doit récupérer les chemins en A1 et A2, lire les données et remplir les tableaux ad hoc.

J'ai bon ???
 

Twing83

XLDnaute Junior
Si tu veux voir un truc super bizarre, tu utilises la macro FileDialog et tu sélectionnes le rep Auto, là l'import se passe correctement.
Tu effaces le contenu de la feuille 2 et tu relance avec celle qui ne marche pas et là ça marche...Ça me rend dingue !
 

TooFatBoy

XLDnaute Barbatruc
Bon ben, si jamais plus tard il m'arrive d'essayer de t'aider, rappelle-moi tout de suite d'arrêter... ça m'use trop de décrypter tout ça et j'ai passé l'âge... 😞

Bon, plaisanterie mise à part, chez moi non plus les tableaux ne se remplissent pas si je prends les fichiers xml sauvegardés, alors que ça marche avec les fichiers du dossier "XML".

Je vais investiguer un peu.
@+
 

Twing83

XLDnaute Junior
Bon ben, si jamais plus tard il m'arrive d'essayer de t'aider, rappelle-moi tout de suite d'arrêter... ça m'use trop de décrypter tout ça et j'ai passé l'âge... 😞

Bon, plaisanterie mise à part, chez moi non plus les tableaux ne se remplissent pas si je prends les fichiers xml sauvegardés, alors que ça marche avec les fichiers du dossier "XML".

Je vais investiguer un peu.
@+
Merci et @+
 

TooFatBoy

XLDnaute Barbatruc
Je crois que j'ai trouvé. Mais ça reste à vérifier...

Il faut mettre le chemin en plus du nom du fichier quand tu le "load". ;)
Code:
objXML.Load monRepertoire & "\" & Fichier


Remarque : tu as de la chance, ça marche, même avec "/\" ou "//" entre le chemin du dossier et le nom du fichier.
Normalement ça ne devrait pas fonctionner et il faudrait gérer ce problème.
 
Dernière édition:

patricktoulon

XLDnaute Barbatruc
bonsoir ,juste en passant
il se lisent tres bien ces fichiers XML
VB:
Option Explicit
Sub ExtracAttributesPathAuto()
    Dim objXML As Object, Fichier$, i&, y&, monRepertoire$, dialog As Object, elements, elem

    With Sheets("Feuil2")
        .Activate
        .UsedRange.ClearContents
    End With

    Set dialog = Application.FileDialog(msoFileDialogFolderPicker)
    dialog.Show
    If dialog.SelectedItems.Count > 0 Then
        monRepertoire = dialog.SelectedItems(1)
    Else
        MsgBox "Aucun Répertoire Sélectionné": Exit Sub
    End If

    Cells(1, 1).Resize(, 3).Value = Array("planId", "sessionId", "recordType")


    Fichier = Dir(monRepertoire & "\" & "*.xml")

    y = 2
    Do While Len(Fichier) > 0

        Set objXML = CreateObject("MSXML2.DOMDocument")
        objXML.async = False: objXML.validateOnParse = False
        objXML.Load (monRepertoire & "\" & Fichier)

        Set elements = objXML.getelementsbytagname("*")

        For Each elem In elements

            If Not IsNull(elem.getattribute("planId")) Then Cells(y, 1).Value = elem.getattribute("planId")
            If Not IsNull(elem.getattribute("sessionId")) Then Cells(y, 2).Value = elem.getattribute("sessionId")
            If Not IsNull(elem.getattribute("recordType")) Then Cells(y, 3).Value = elem.getattribute("recordType")

        Next
        y = y + 1
        Fichier = Dir
    Loop

    With ActiveSheet.ListObjects.Add(xlSrcRange, Range("A1").Resize(y - 1, 3), , xlYes)
        .Name = "Tableau1"
        '.TableStyle = "TableStyleLight9"
    End With
End Sub
 

Discussions similaires

Statistiques des forums

Discussions
311 711
Messages
2 081 786
Membres
101 817
dernier inscrit
carvajal