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 :

Import de données, arborescence


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Inscrit en
    Octobre 2013
    Messages
    14
    Détails du profil
    Informations forums :
    Inscription : Octobre 2013
    Messages : 14
    Par défaut Import de données, arborescence
    Bonjour à tous,

    Je solicite votre aide pour ma deuxième macro que j'essaie de faire, je progresse dans la programmation mais pas tant que je voudrais !

    Je travaille sur une macro qui extrait des données d’un gros XML (cf ci-joint).
    Mon idée est de faire une liste avec les valeurs des HREF (exemple HREF="AFC00000766A0200") à l’interieur des GRAPHREF et d’afficher son arborescence (les title des PSL et DU INV et le code de la DU-SOL).
    J’ai deux soucis actuellement :

    -Ma boucle « DO WHILE » s’arrete à la seconde itération (1ere position=0, position_fin=0 et second position=qlq chose, position_fin=qlq chose…), pourquoi ?

    -Comment on recupère l’arborescence ? J’ai trouvé dans ma recherche internet une ligne de code (Xpath : //*[starts-with(name(),'PSL')]) mais ça n’a pas l’air d’être ça.

    Pour info la structure est divisée en different PSL et se termine par un seul DU-INV et un DU-SOL (la ou se trouve le ou les code(s) HREF ou pas) exemple :
    PSL
    > PSL
    >> PSL
    >>> PSL
    >>>>DU-INV
    >>>>> DU-SOL
    > PSL
    >> DU-INV
    >>> DU-SOL
    ...

    Mon debut de code :
    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
    Public mot As String
    Public nomFichier As String
     
    Function opened_file() As String
    'ouverture des fichiers excel
    opened_file_data = Application.GetOpenFilename()
    If opened_file_data = False Then
        MsgBox ("File not selected, the program is turning off.")
        End
     
    Else
        opened_file = opened_file_data ' W:\bibi\hola.xlsx
        Open opened_file_data For Input As #1 '-------------------
     
     
    End If
    End Function
     
    Public Sub Search_titre()
    opened_file ' ------------------
     
    chaineCherche = "HREF="""
    'chaineCherche = "TITLE>"
    p = 1
    i = 1
    position_avancement = 1
    Do While Not EOF(1)
        Line Input #1, strline
        Sheets(2).Cells(1, i) = strline
        'On récupère la position de départ de la chaine de texte
        position = InStr(position_avancement, strline, chaineCherche, vbTextCompare)
        position_fin = InStr(position + 1, strline, """>", vbTextCompare)
     
        If (position > 0) Then
                ThisWorkbook.Activate
                Sheets(1).Cells(1, i) = Mid(strline, position + Len(chaineCherche), position_fin - position - Len(chaineCherche))
    '            Xpath : //*[starts-with(name(),'PSL')]
                i = i + 1
                position = position_fin
        End If
        MsgBox (position & position_fin)
    Loop 'Until EOF(1)
    Close #1
    End Sub
    Fichiers attachés Fichiers attachés

  2. #2
    Expert éminent
    Avatar de Marc-L
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Avril 2013
    Messages
    9 468
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2013
    Messages : 9 468
    Par défaut

    Bonjour,

    une autre approche en utilisant une librairie gérant les XML, voir VBA et développement Web

  3. #3
    Membre averti
    Inscrit en
    Octobre 2013
    Messages
    14
    Détails du profil
    Informations forums :
    Inscription : Octobre 2013
    Messages : 14
    Par défaut
    Merci de ton aide, mais ca me genere de nouveaux soucis...
    Le probleme est que mon fichier xml n est pas "propre", c est a dire que j ai des balises non ferme et dans lesquelles se cachent l information que je cherche. Comme <all> ou <fileref....> sans </all>...
    Vous avez une idee pour le solutionner?

  4. #4
    Expert éminent
    Avatar de Marc-L
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Avril 2013
    Messages
    9 468
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2013
    Messages : 9 468
    Par défaut

    Il est vrai qu'il y a deux types de fichiers où l'on trouve de tout et souvent du n'importe quoi : les .csv & les .xml !

    Commencer par exiger du créateur du xml de se sortir les doigts d'où je pense et de se mettre à bosser proprement ‼

    Sinon la visualisation du fichier xml en pièce jointe dans le Bloc-notes est digne des années 70 : psychédélique ‼

    Sinon te reste plus qu'à y trouver des repères (balises ouvrantes, non ?) et t'accrocher !

  5. #5
    Membre averti
    Inscrit en
    Octobre 2013
    Messages
    14
    Détails du profil
    Informations forums :
    Inscription : Octobre 2013
    Messages : 14
    Par défaut
    Ne pouvant pas agir sur la creation de l'xml ... j'opte pour la seconde solution, mon idée du départ.
    Comme le code à recuperer est du type HREF="AFC00000766A0200"
    Ma balise d'entrée est :HREF="
    Ma balise de sortie est :"
    Mais le probleme du code que j'ai fait est que seule le premier code est recuperé... comment pourrai-je avoir tout le listing de chacune de ces codes?

  6. #6
    Membre Expert
    Profil pro
    Inscrit en
    Juin 2009
    Messages
    652
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Juin 2009
    Messages : 652
    Par défaut
    Bonjour,

    Si cela peut vous aider, j'ai fait un code de nettoyage de votre fichier .XML pour le rendre plus descriptible
    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
    '### Constantes à adapter ###
    Const XML_SOURCE As String = "c:\envoi.xml"
    Const XML_RESULT As String = "c:\tempo_CleanXML.xml"
    '############################
     
    Sub CleanXML()
    Dim FSO As Object       'Scripting.FileSystemObject
    Dim myStream As Object  'Scripting.TextStream
    Dim A$
    Dim B$
    Dim i&
    '---
    Set FSO = CreateObject("Scripting.FileSystemObject")
    Set myStream = FSO.OpenTextFile(XML_SOURCE, 1) '1=ForReading
    A$ = myStream.ReadAll
    myStream.Close
    '---
    Set myStream = FSO.CreateTextFile(XML_RESULT)
    Do
      i& = InStr(2, A$, "<")
      If i& = 0 Then Exit Do
      B$ = Mid(A$, 1, i& - 1)
      myStream.WriteLine B$
      A$ = Mid(A$, i&)
    Loop
    If A$ <> "" Then myStream.WriteLine A$
    myStream.Close
    '---
    Set myStream = Nothing
    Set FSO = Nothing
    '---
    MsgBox "Le fichier nettoyé est : " & XML_RESULT
    End Sub

  7. #7
    Membre averti
    Inscrit en
    Octobre 2013
    Messages
    14
    Détails du profil
    Informations forums :
    Inscription : Octobre 2013
    Messages : 14
    Par défaut
    Je te remercie beaucoup PMO2017. Même si les lignes de codes, n'arrangent pas mon xml comme il devrait (la structure est modifiée) , il m'a permis en revanche de découvrir des fonctions du "Scripting.FileSystemObject" qui m'aident grandement à lire tout mon fichier.
    J'arrive du coup maintenant à faire une liste des images ! et pense enfin pouvoir finir ce programme...

    J'aurai une petite question supplémentaire maintenant:
    Pour connaitre la structure lors du parcours de mon fichier A$, y a-t-il la possibilité de savoir quel string apparait le premier?
    Un genre de instr(1, A$, "PSL" or "HREF" or "DU-SOL" or "DU-INV")

    Merci

Discussions similaires

  1. Importer des données grace a des *.cvs dans MySQL
    Par Mic0001 dans le forum Installation
    Réponses: 3
    Dernier message: 05/01/2005, 19h26
  2. [CR]Importer des données d'une feuille excel
    Par rolan dans le forum SAP Crystal Reports
    Réponses: 3
    Dernier message: 17/12/2004, 22h32
  3. Réponses: 3
    Dernier message: 13/12/2004, 13h54
  4. Importer des données dans sql server avec DELPHI ???
    Par moutanakid dans le forum MS SQL Server
    Réponses: 2
    Dernier message: 11/08/2004, 17h22
  5. Importation de données postgresql
    Par ythierrin dans le forum PostgreSQL
    Réponses: 2
    Dernier message: 10/10/2003, 22h18

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