VBA Excel : Importer XML - xlDialogOpen

Résolu
Eaheru Messages postés 205 Statut Membre -  
 HardyPetit -
Bonjour,

J'essaie vainement d'importer un fichier au format XML a l'aide d'une macro VBA dans Excel.

La fonction d'importation qui fonctionne est :
Workbooks.OpenXML Filename:= "D:\test\Reponses.xml", LoadOption:=xlXmlLoadImportToList


et afin de permettre à mes utilisateurs de pouvoir choisir leur fichier facilement, je souhaiterais passer par l'ouverture de la boite Excel d'ouverture de fichier (ou similaire).

J'ai donc tenté avec la fonction ci dessous :
encore:
FichierOk = Application.Dialogs(xlDialogOpen).Show
If Not FichierOk Then
MsgBox " Vous devez choisir un fichier"
GoTo encore
End If


Mais le résultat de l'importation n'est pas au format "Liste" tel que le génère le premier code que j'ai mentionné plus haut.
Il y a t il une solution pour effectuer cette importation à partir d'une boite "xldialogOpen" ou quelque chose dans le même style ?

Merci d'avance pour votre aide. !

8 réponses

  1. pilas31 Messages postés 1878 Statut Contributeur 648
     
    Bonjour,

    et en modifiant le début de la macro comme ceci ? :

    NomFichierXML = Application.GetOpenFilename("Fichier XML (*.xml),*.xml", , "Choisir le fichier")
    With ActiveSheet.QueryTables.Add(Connection:=NomFichierXML, Destination:=Range("A1"))
    ...
    A+
    1
  2. pilas31 Messages postés 1878 Statut Contributeur 648
     
    Bonjour,

    Peut-être en utilisant cette syntaxe :

    NomFichierXML = Application.GetOpenFilename("Fichier XML (*.xml),*.xml", , "Choisir le fichier")

    L'utilisateur fait le choix du fichier mais il n'est pas ouvert, c'est le chemin du fichier qui est retourné ici dans la variable NomFichierXML. Retourne FAUX si l'utilisateur ne fait pas de choix.

    Il suffit ensuite d'ouvrir le fichier avec la syntaxe :
    Workbooks.OpenXML Filename:= NomFichierXML

    A tester

    A+

    Cordialement,
    0
  3. Eaheru Messages postés 205 Statut Membre 20
     
    Bonjour,
    C'est parfait ! :) merci beaucoup pour ce coup de main.
    La chose chose a savoir est que la variable NomFichierXML doit etre configurée en "Variant" puisque si l'utilisateur ne choisi pas de fichier il y a un retour booleen (vrai/faux)

    NomFichierXML = Application.GetOpenFilename("Fichier XML (*.xml),*.xml", , "Choisir le fichier") 
    Set wk2 = Workbooks.OpenXML(Filename:=NomFichierXML, LoadOption:=xlXmlLoadImportToList)


    Une fois ce détail ajusté, ça marche impeccablement !
    Encore Merci

    Une question pour terminer complétement ma macro, est il possible d'ouvrir la fenêtre de choix du fichier XML dans un répertoire précis ? Cela faciliterait la vie de mes utilisateurs :)
    0
    1. Eaheru Messages postés 205 Statut Membre 20
       
      Ok j'ai resolu de maniere triviale :) en ajoutant une ligne :
      ChDir \\monchemin

      juste avant l'appel de la fonction getopenfilename
      0
  4. Jeremie
     
    Bonjour!

    je vous présente mon problème:

    j'ai un fichier excel contenant certaines données et j'ai besoin d'importer un fichier xml dans CE fichier excel (en créant une nouvelle feuille par exemple).

    J'ai réussi à créer une macro réalisant cette tâche (code ci-dessous):

    ActiveWorkbook.Worksheets.Add
    With ActiveSheet.QueryTables.Add(Connection:="FINDER;E:\Documents and Settings\u0557730\Bureau\PDCA.xml", Destination:=Range("A1"))
    .Name = "PDCA"
    .FieldNames = True
    .RowNumbers = False
    .FillAdjacentFormulas = False
    .PreserveFormatting = True
    .RefreshOnFileOpen = False
    .BackgroundQuery = True
    .RefreshStyle = xlInsertDeleteCells
    .SavePassword = False
    .SaveData = True
    .AdjustColumnWidth = True
    .RefreshPeriod = 0
    .WebSelectionType = xlAllTables
    .WebFormatting = xlWebFormattingNone
    .WebPreFormattedTextToColumns = True
    .WebConsecutiveDelimitersAsOne = True
    .WebSingleBlockTextImport = False
    .WebDisableDateRecognition = False
    .WebDisableRedirections = False
    .Refresh BackgroundQuery:=False
    End With

    SAUF QUE la macro va chercher le fichier xml à un emplacement bien défini de l'ordinateur, ce qui n'est pas pratique...

    J'ai trouvé sur le forum ce code:

    encore:
    FichierOk = Application.Dialogs(xlDialogOpen).Show
    If Not FichierOk Then
    MsgBox " Vous devez choisir un fichier"
    GoTo encore
    End If

    Ce code permet d'ouvrir une fenêtre de recherche pour récupérer le fichier xml à l'endroit de mon choix mais nouveau problème: le fichier xml est importé dans un nouveau fichier excel et non pas dans MON fichier excel!

    Je cherche désespéremment depuis une semaine à mixer ces deux programmes afin d'importer par macro ce fichier xml dans mon fichier excel en passant par une fenêtre de recherche...

    Quelqu'un pourrait-il m'aider?? J'ai cherché dans tout le forum mais ce problème n'est posé nul part...
    0
  5. Vous n’avez pas trouvé la réponse que vous recherchez ?

    Posez votre question
  6. Jeremie2011 Messages postés 8 Statut Membre
     
    J'obtiens un message d'erreur:

    "Erreur d'execution
    Erreur définie par l'application ou par l'objet"

    J'ai placé le code comme ceci et l'erreur se situe sur la 4eme ligne:

    Range("E31").Select
    ActiveWorkbook.Worksheets.Add
    PDCA = Application.GetOpenFilename("PDCA (*.xml),*.xml", , "Choisir le fichier")With ActiveSheet.QueryTables.Add(Connection:=PDCA, Destination:=Range("A1"))
    .Name = "PDCA"
    .FieldNames = True
    .RowNumbers = False
    .FillAdjacentFormulas = False
    .PreserveFormatting = True
    .RefreshOnFileOpen = False
    .BackgroundQuery = True
    .RefreshStyle = xlInsertDeleteCells
    .SavePassword = False
    .SaveData = True
    .AdjustColumnWidth = True
    .RefreshPeriod = 0
    .WebSelectionType = xlAllTables
    .WebFormatting = xlWebFormattingNone
    .WebPreFormattedTextToColumns = True
    .WebConsecutiveDelimitersAsOne = True
    .WebSingleBlockTextImport = False
    .WebDisableDateRecognition = False
    .WebDisableRedirections = False
    .Refresh BackgroundQuery:=False
    End With
    0
  7. pilas31 Messages postés 1878 Statut Contributeur 648
     
    Oui au temps pour moi j'ai été un peu rapide voila deux corrections :
    1/ j'ai ajouté "FINDER"
    2/ j'ai traité le cas ou l'utilisateur ne choisit pas de fichier et dans ce cas PDCA prend la valeur False.

    Voila le code correct :

    Range("E31").Select
    ActiveWorkbook.Worksheets.Add
    PDCA = Application.GetOpenFilename("PDCA (*.xml),*.xml", , "Choisir le fichier")
    If PDCA <> False Then
        With ActiveSheet.QueryTables.Add(Connection:="FINDER;" & PDCA, Destination:=Range("A1"))
        .Name = "PDCA"
        .FieldNames = True
        .RowNumbers = False
        .FillAdjacentFormulas = False
        .PreserveFormatting = True
        .RefreshOnFileOpen = False
        .BackgroundQuery = True
        .RefreshStyle = xlInsertDeleteCells
        .SavePassword = False
        .SaveData = True
        .AdjustColumnWidth = True
        .RefreshPeriod = 0
        .WebSelectionType = xlAllTables
        .WebFormatting = xlWebFormattingNone
        .WebPreFormattedTextToColumns = True
        .WebConsecutiveDelimitersAsOne = True
        .WebSingleBlockTextImport = False
        .WebDisableDateRecognition = False
        .WebDisableRedirections = False
        .Refresh BackgroundQuery:=False
        End With
    End If


    A+
    0
    1. HardyPetit
       
      Super methode merci.
      j'ai fait quelques arrangements pour corresponde à mon besoin
      si cela peut aider quelqu'un.

      Dim SheetRenew as String
      Dim xmlfilefrom As String
      Dim FileFrom as String
      Dim SheetName as string

      Sub PasteXmlData()
      FileFrom = "Fichier.xml"
      SheetRenew = "Imported_Data"
      For Each ws In Worksheets
      SheetName = ws.Name
      If SheetName = SheetRenew Then
      Sheets(SheetRenew).Visible = True
      Sheets(SheetRenew).Select
      Application.DisplayAlerts = False
      ActiveSheet.Delete
      Application.DisplayAlerts = True
      End If
      Next ws
      Sheets.Add.Name = SheetRenew
      Sheets(SheetRenew).Select
      Range("A1").Select
      xmlfilefrom = (ThisWorkbook.Path & "\DataBase\" & FileFrom)
      With ActiveSheet.QueryTables.Add(Connection:="FINDER;" & xmlfilefrom, Destination:=ActiveCell)
      .Name = "PDCA"
      .FieldNames = True
      .RowNumbers = False
      .FillAdjacentFormulas = False
      .PreserveFormatting = True
      .RefreshOnFileOpen = False
      .BackgroundQuery = True
      .RefreshStyle = xlInsertDeleteCells
      .SavePassword = False
      .SaveData = True
      .AdjustColumnWidth = True
      .RefreshPeriod = 0
      .WebSelectionType = xlAllTables
      .WebFormatting = xlWebFormattingNone
      .WebPreFormattedTextToColumns = True
      .WebConsecutiveDelimitersAsOne = True
      .WebSingleBlockTextImport = False
      .WebDisableDateRecognition = False
      .WebDisableRedirections = False
      .Refresh BackgroundQuery:=False
      End With

      End Sub
      0
  8. Jeremie2011 Messages postés 8 Statut Membre
     
    Pilas,

    Tout d'abord un grand MERCI pour ton aide!

    J'ai testé et le programme semble fonctionner, cependant, il me manque le fichier XML à importer pour tester correctement ce week-end mais je te fais un retour dès Lundi 8h!

    Cordialement,

    Jérémie
    0
  9. Jeremie2011 Messages postés 8 Statut Membre
     
    Salut,

    comme promis j'ai vérifié et le programme fonctionne à merveille!

    Merci beaucoup!

    Jérémie
    0