IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Macros et VBA Excel Discussion :

Fonction XMLImport [XL-2010]


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Candidat au Club
    Homme Profil pro
    Ingénieur validation
    Inscrit en
    Janvier 2015
    Messages
    2
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur validation

    Informations forums :
    Inscription : Janvier 2015
    Messages : 2
    Par défaut Fonction XMLImport
    Bonjour à tous,

    Je cherche à traiter un fichier XML et j'ai un petit souci avec l'importation.
    Outre le fait qu'il faut 10 secondes pour importer un fichier de 500Ko, je suis embêté par le message "(ne répond pas)" qui vient s'ajouter au titre de ma barre de progression au bout de 5 secondes puis disparaît une fois l'importation terminée.

    Nom : progress_bar.jpg
Affichages : 873
Taille : 140,4 Ko

    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
     
    Sub ImporterFichierXML()
     
    Dim FileToOpen As Variant
     
    Application.Calculation = xlManual 'desactivation de l'execution automatique des formules
    Application.ScreenUpdating = False 'desactivation du raffraichissement de l'écran
     
     
    ChDir (ThisWorkbook.Path & "/XML")
    FileToOpen = Application.GetOpenFilename("XML Files (*.xml), *.xml")
     
    If FileToOpen = False Then
     
        MsgBox ("File not selected - Execution halted")
        Sheets("main").Activate
        End
     
    End If
     
    'efface données précédentes
    Sheets("decoded_conf").Activate
    Columns("A:BM").Select
    Range("BM1").Activate
    Selection.Delete Shift:=xlToLeft
     
    Application.DisplayAlerts = False
     
    'Importe le fichier dans la cellule A1 de la Feuille decoded_XML
    ThisWorkbook.XmlImport _
    URL:=FileToOpen, ImportMap:=Nothing, Overwrite:=True, _
    Destination:=Worksheets("decoded_conf").Range("$A$1")
     
    Application.DisplayAlerts = True
     
     
    Sheets("decoded_conf").Range("A1").Select
     
    Application.Calculation = xlAutomatic 'réactivation de l'execution automatique des formules
    Application.ScreenUpdating = True 'réactivation du raffraichissement de l'écran
     
    End Sub
    Connaissez-vous un moyen plus rapide pour importer un fichier XML ou alors comment éviter l'apparition du message "(ne répond pas)"
    D'avance merci pour votre aide.

  2. #2
    Membre confirmé
    Homme Profil pro
    Humoriste raté
    Inscrit en
    Janvier 2015
    Messages
    21
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Humoriste raté

    Informations forums :
    Inscription : Janvier 2015
    Messages : 21
    Par défaut
    C'est juste une fonctionnalité de merde. Utilise plutôt msxml6.dll si tu n'es pas obligé de le mettre sous forme d'un tableau. Et même, pour le mettre en tableau, via msxml + VBA c'est 1000 fois plus rapide (désolé je n'ai pas le droit de fournir le code)
    ca fonctionne rapidement & bien sur mon PC pourri jusqu'à 50 Mo

  3. #3
    Membre confirmé
    Profil pro
    ERP + Oracle + VBA Excel
    Inscrit en
    Juin 2005
    Messages
    58
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations professionnelles :
    Activité : ERP + Oracle + VBA Excel
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Juin 2005
    Messages : 58
    Par défaut
    en complément, un bout de code que j'utilise pour chargement XML.

    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
     
     
    ' Définir un objet
     
    Dim Document_XML as MSXML2.DOMDocument60
     
     
    ' choix fichier 
    fileToOpen = Application.GetOpenFilename("XM à ouvril  (*.xml), *.xml")
     
     
    If fileToOpen <> False Then
     
       rep = MsgBox("Fichier à charger  ->  " & Chr(10) & fileToOpen, vbInformation + vbYesNo, "Confirmation")
     
    Else
     
        Exit Sub
     
    End If
     
    If rep = vbNo Then Exit Sub
     
     
     
    ' Chargement du XML
     
    Document_XML.Load (fileToOpen)
     
      If Len(Document_XML.XML) < 1 Then
     
                         rep = MsgBox("Attention problème avec le fichier", vbCritical, "Connexion")
     
                         Exit Sub
      End If

    Pour ne pas avoir "ne réponds pas " il faut ajouter un Doevents dans la boucle de chargement (par exemple chargement depuis une URL)

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     With Document_XML
                .Load sUrl
                Do: DoEvents: Loop Until .readyState = 4
                End With

  4. #4
    Candidat au Club
    Homme Profil pro
    Ingénieur validation
    Inscrit en
    Janvier 2015
    Messages
    2
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur validation

    Informations forums :
    Inscription : Janvier 2015
    Messages : 2
    Par défaut
    Merci pour vos réponses, je vais faire des essais demain avec msxml.
    Par contre faudra t-il ajouter la référence MS XML chez tous les utilisateurs de la macro?
    J'ai vu que c'était possible de l'ajouter par macro mais que c'est compliqué si tout le monde ne tourne pas sur la même version de WINDOWS ce qui est mon cas.

    Pour le moment, j'ai contourné le problème même si je vais essayer de faire mieux par la suite avec le msxml

    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
     
    Sub ImporterFichierXML()
    Dim FileToOpen As Variant
     
    'ChDir (ThisWorkbook.Path & "/XML")
    ChDir (ThisWorkbook.Path)
    FileToOpen = Application.GetOpenFilename("XML Files (*.xml), *.xml")
     
    If FileToOpen = False Then
     
        MsgBox ("File not selected - Execution halted")
        Sheets("main").Activate
        End
     
    End If
     
     
     
    Mon_classeur = ThisWorkbook.Name
    Application.Workbooks.OpenXML Filename:=FileToOpen, LoadOption:=xlXmlLoadImportToList
     
    FileToClose = ActiveWorkbook.Name
     
    Derncolonne = ActiveSheet.Range("XFD2").End(xlToLeft).column
    Dernligne = ActiveSheet.Range("A1048576").End(xlUp).Row
     
    ActiveSheet.Range(Cells(1, 1), Cells(Dernligne, Derncolonne)).Copy
     
    Windows(Mon_classeur).Activate
    Sheets("decoded_conf").Select
    Range("A1").Select
    ActiveSheet.Paste
     
     
    Windows(FileToClose).Activate
    Application.DisplayAlerts = False
    ActiveWindow.Close
    Application.DisplayAlerts = True
     
    Windows(Mon_classeur).Activate
     
     
    Sheets("decoded_conf").Range("A1").Select

  5. #5
    Membre confirmé
    Homme Profil pro
    Humoriste raté
    Inscrit en
    Janvier 2015
    Messages
    21
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Humoriste raté

    Informations forums :
    Inscription : Janvier 2015
    Messages : 21
    Par défaut
    La référence est enregistrée avec le xlsm, si les utilisateurs ont le fichier dans le même dossier (probable) ca marchera chez eux

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 8
    Dernier message: 12/02/2013, 02h08
  2. Fonction API
    Par margilb dans le forum C++Builder
    Réponses: 2
    Dernier message: 08/07/2002, 12h11
  3. Implémentation des fonctions mathématiques
    Par mat.M dans le forum Mathématiques
    Réponses: 9
    Dernier message: 17/06/2002, 17h19
  4. fonction printf
    Par ydeleage dans le forum C
    Réponses: 7
    Dernier message: 30/05/2002, 12h24
  5. FOnction api specifiant la position de la souris
    Par florent dans le forum C++Builder
    Réponses: 4
    Dernier message: 15/05/2002, 21h07

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo