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 :

Importer en Excel des données d’un fichier XML


Sujet :

Macros et VBA Excel

  1. #1
    Membre du Club
    Homme Profil pro
    Inscrit en
    Juillet 2009
    Messages
    79
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Italie

    Informations forums :
    Inscription : Juillet 2009
    Messages : 79
    Points : 53
    Points
    53
    Par défaut Importer en Excel des données d’un fichier XML
    Bonjour à tout le monde.
    La situation: en Excel 2003, je fais des index de fichiers XML. C’est un code pris ici : www.cpearson.com/Excel/DownloadFile.aspx et qui fonctionne très bien après quelques adaptations à mon cas ; il est très long et compliqué, raison pour laquelle je ne le copie pas ici.
    Pour résumer, l’utilisateur colle en Excel une liste de messages (ce sont des fichiers XML), ensuite lance une macro qui télécharge les fichiers XML en les mettant dans le répertoire approprié, ensuite la liste est re-linkée vers les nouveaux emplacements des fichiers et publiée en HTML pour une utilisation collective.
    Et jusqu’ici tout va bien.

    Maintenant, je voudrais faire un pas en avant.
    En effet, nos messages en XML ont souvent des pièces jointes (chez nous, on dit « Allegati »), et ils sont téléchargés dans le même répertoire, manuellement parce que je n’ai pas su ajouter cette fonction. Dans le fichier XML il y a des mentions : « Allegato 1 : monfichier.doc, Allegato 2 : unautrefichier.pdf, Allegato 3 : ledernier.xls ». Le pas en avant que je voudrais faire est constitué de deux volets :

    1) Fouiller dans le XML et charger dans une variable Excel le nom du fichier qui suit la mention « Allegato 1 », puis s’il y a lieu « Allegato 2 » et ainsi de suite. C’est la partie la plus importante.

    2) Voir s’il est possible, toujours en entrant avec Excel dans le fichier XML, de prélever dans une variable le lien vers le fichier cité après « Allegato… » afin de le télécharger ensuite avec la même méthode utilisée pour le fichier XML.

    Or, je ne trouve nulle part un moyen de prélever un petit bout du contenu d’un fichier XML.
    Je suppose qu’il sera utile de montrer la structure (une petite partie seulement) d’un de ces fichiers XML :
    Code xml : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
            <Gruppi><Gruppo acronimo="MIEIACRO"><Mailbox acronimo="141">SP - Segreteria Particolare</Mailbox><Mailbox acronimo="142">SP2 – Segreteria particolare 2</Mailbox><Mailbox acronimo="145"> SP2 – Segreteria particolare 5</Mailbox></Gruppo></Gruppi>
            <Allegati>
            <Allegato nome_file_server="2480100A_20101001135240.A01" nome_file="International_Commission_against_the_death_penalty.pdf">International_Commission_against_the_death_penalty.pdf</Allegato>
            <Allegato nome_file_server="2480100A_20101001135240.A02" nome_file="Strategies_for_discussion_by_the_support_group_28_September_2010_AVC_.pdf">Strategies_for_discussion_by_the_support_group_28_September_2010_AVC_.pdf</Allegato>
            <Allegato nome_file_server="2480100A_20101001135240.A03" nome_file="Declaration_on_the_establishment_and_functioning_of_the_international_commission_against_the_death_penalty.pdf">Declaration_on_the_establishment_and_functioning_of_the_international_commission_against_the_death_penalty.pdf</Allegato>
            </Allegati>
            <ContenutoDocumento>
                    <TipoCifra/>
                    <Oggetto>COSTITUZIONE DI UNA COMMISSIONE CONTRO LA PENA DI MORTE.
     
    </Oggetto>
    Quelqu’un pourrait me filer un coup de main ?
    Merci d’avance !

  2. #2
    Membre actif
    Profil pro
    chomeur
    Inscrit en
    Août 2006
    Messages
    343
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : chomeur

    Informations forums :
    Inscription : Août 2006
    Messages : 343
    Points : 246
    Points
    246
    Par défaut
    tu peux utiliser le xpath ou le xql..?

  3. #3
    Membre du Club
    Homme Profil pro
    Inscrit en
    Juillet 2009
    Messages
    79
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Italie

    Informations forums :
    Inscription : Juillet 2009
    Messages : 79
    Points : 53
    Points
    53
    Par défaut
    Merci de ton implication.
    Pour être tout à fait sincère... je ne sais même pas de quoi il s'agit.
    J'ai oublié de préciser, en effet, que mon niveau est modeste. Tout le code que j'ai monté, j'ai pu le faire grâce à beaucoup d'aides.
    Si tu veux bien essayer de me proposer un début de solution, je te dirai ensuite sur quoi je bute...
    Merci encore.

  4. #4
    Membre régulier
    Inscrit en
    Décembre 2007
    Messages
    172
    Détails du profil
    Informations forums :
    Inscription : Décembre 2007
    Messages : 172
    Points : 107
    Points
    107
    Par défaut
    t enregistres une macro qui importe le fichier xml en tant que texte dans une feuille excel.

    ensuite tu fais un find de la bonne balise (avec quelques boucles probablement), puis un instr sur le bon mot pour trouver le lien qui t interesse.

    pas forcement evident pour un debutant mais en travaillant un peu et en suivant mes etapes t arriveras a mettre le lien dans une variable reutilisable par la suite !

  5. #5
    Membre du Club
    Homme Profil pro
    Inscrit en
    Juillet 2009
    Messages
    79
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Italie

    Informations forums :
    Inscription : Juillet 2009
    Messages : 79
    Points : 53
    Points
    53
    Par défaut
    Merci à toi aussi, Pierre.
    Si je comprends bien, ta proposition présuppose l'importation du fichier XML tout entier dans une feuille Excel.
    Je ne te cache pas que cela me semble très lourd, surtout parce que ma feuille est un index qui traite plusieurs dizaines de fichiers à la fois. Et pour tout dire, mes collègues qui doivent l'utiliser ne sont pas toujours au top de la patience et de l'intell... Bon, laissons tomber. - C'était pour dire que je le ferai s'il n'y a pas d'alternative.
    Pour te faire un exemple du mécanisme que je voudrais mettre en place, le code suivant me trouve, dans un fichier doc, la portion de texte qui suit la mention "Oggetto". Il appelle Word.Application mais il n'importe pas le fichier dans le tableur, et il me semble assez agile (je ne sais pas si mon impression est juste), et en tout cas il lui faut un peu plus de deux secondes par fichier.
    Serait-il possible traiter les fichiers XML d'une façon similaire?

    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
    Option Compare Text
    Sub ElencoFile()
    Dim f As String, miadir As String, i As Integer
    Dim wrdApp As Word.Application
    Dim wrdDoc As Word.Document
    Dim tString As String, tRange As Word.Range
    Dim p As Long
    miadir = "d:\ora\pratiche\"
    f = Dir("D:\ora\pratiche\*.doc")
    If f = "" Then Exit Sub
    While f <> ""
    i = i + 1
    Cells(i, 1) = f
    Set wrdApp = CreateObject("Word.Application")
    Set wrdDoc = wrdApp.Documents.Open(miadir & f)
    With wrdDoc
    For p = 1 To .Paragraphs.Count
    Set tRange = .Range(Start:=.Paragraphs(p).Range.Start, _
    End:=.Paragraphs(p).Range.End)
    tString = tRange.Text
    tString = Left(tString, Len(tString) - 1)
    If Left(tString, 7) = "Oggetto" Then
    ActiveSheet.Range("B" & i).Formula = Mid(tString, 10, 100)
    Exit For
    End If
    Next p
    End With
    wrdApp.Quit
    Set wrdDoc = Nothing
    Set wrdApp = Nothing
    f = Dir
    Wend
    End Sub
    Merci pour tout commentaire, même non définitif!

  6. #6
    Membre régulier
    Inscrit en
    Décembre 2007
    Messages
    172
    Détails du profil
    Informations forums :
    Inscription : Décembre 2007
    Messages : 172
    Points : 107
    Points
    107
    Par défaut
    oui en fait tu peux aussi traiter le fichier xml sans l importer avec printf ou je sais plus quoi, mais pas sur que tu puisses naviguer a travers les balises. je sais juste qu il est possible d ajouter ou de supprimer des lignes

  7. #7
    Membre émérite Avatar de Godzestla
    Homme Profil pro
    Chercheur de bonheur
    Inscrit en
    Août 2007
    Messages
    2 392
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 59
    Localisation : Belgique

    Informations professionnelles :
    Activité : Chercheur de bonheur
    Secteur : Industrie

    Informations forums :
    Inscription : Août 2007
    Messages : 2 392
    Points : 2 985
    Points
    2 985
    Par défaut
    Bonjour,

    pour traiter ton fichier XML, tu peux le faire en le considérant comme un fichier texte.

    Regarde ici, une discussion qui pourrait t'inspirer. Attention, a bine lire jusqu'au bout.
    (\ _ /) Cordialement G@dz
    (='.'=)

    (")-(") Vous avez des neurones. Sollicitez-les. . Si vous êtes aidé, pensez à Voter.

  8. #8
    Membre régulier
    Inscrit en
    Décembre 2007
    Messages
    172
    Détails du profil
    Informations forums :
    Inscription : Décembre 2007
    Messages : 172
    Points : 107
    Points
    107
    Par défaut
    voila c est ca, input, print ..

    du coup tu peux mettre chaque ligne dans une variable, puis tu testes la variable avec un instr pour trouver ce que tu veux dans la ligne !!
    et quand t as trouve le lien dans la ligne, tu le mets dans une autre variable pour l utiliser ailleurs !

    tu as la la solution !

Discussions similaires

  1. Réponses: 0
    Dernier message: 02/04/2013, 13h09
  2. DomDocument extraire des données du fichier XML
    Par Mika2008 dans le forum Langage
    Réponses: 3
    Dernier message: 18/03/2013, 10h25
  3. Réponses: 6
    Dernier message: 21/04/2010, 14h27
  4. Inserer des données dans fichier Xml
    Par Logarythme dans le forum InfoPath
    Réponses: 3
    Dernier message: 28/02/2008, 08h35

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