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 :

Nettoyer une base XML en fonction d'un ID


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre à l'essai
    Profil pro
    Inscrit en
    Juillet 2012
    Messages
    5
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2012
    Messages : 5
    Par défaut Nettoyer une base XML en fonction d'un ID
    Hello Folks !

    J'ai besoin de votre savoir inestimable afin de cleaner une BDD.

    Je vous donne un exemple, j'ai ces lignes (XML) que je copie/colle dans excel :

    Code xml : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
          <object ID="5445/0/0" KEY="45A61E3D1DZDZ82A5F6E61755DZ1F14E">
          <field value="2131" visible="true" />
          <field value="02i NAME" />
          <field value="EMAIL@EMAIL.FR" />
          <field value="NOM" />
          <field value="PRENOM" />
          <field value="1" />

    J'ai créer quelque chose (en VB par exemple) qui dise :

    1. On trouve <field value="
    2. Si l'ID dans <field value="XXX" est supérieur à 2130 on garde la ligne en question ainsi que les 4 lignes en dessous.

    Autrement dit si j'ai :

    Code xml : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
          <object ID="5445/0/0" KEY="45A61E3D1DZDZ82A5F6E61755DZ1F14E">
          <field value="2131" visible="true" />
          <field value="02i NAME" />
          <field value="EMAIL@EMAIL.FR" />
          <field value="NOM" />
          <field value="PRENOM" />
          <field value="1" />
          <field value="BLABLABLABLA" />
          <object ID="5445/0/0" KEY="45A61E3D1DZDZ82A5F6E61755DZ1F14E">
          <field value="2129" visible="true" />
          <field value="02i NAME" />
          <field value="EMAIL@EMAIL.FR" />
          <field value="NOM" />
          <field value="PRENOM" />
          <field value="1" />

    Après passage de mon code j'aurais :

    Code xml : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
          <field value="2131" visible="true" />
          <field value="02i NAME" />
          <field value="EMAIL@EMAIL.FR" />
          <field value="NOM" />
          <field value="PRENOM" />

    Merci à vous !

  2. #2
    Invité
    Invité(e)
    Par défaut
    Un solution un peu artisanale:
    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
    Option Explicit
     
    Public Sub Nettoyer()
     
        Dim i As Integer
        Dim lngLig As Long
        Dim C As Range
        Dim strChaine As String
     
        lngLig = Range("A" & Rows.Count).End(xlUp).Row
     
        Do
            Set C = Columns(1).Find("object ID", , , xlPart)
            If C Is Nothing Then Exit Sub
     
            strChaine = Cells(C.Row + 1, 1).Value
            strChaine = Mid(strChaine, 21, Len(strChaine))
     
            If Val(strChaine) <= 2130 Then
                Range(Cells(C.Row, 1), Cells(C.Row + 7, 1)).EntireRow.Delete
            Else
                Range(Cells(C.Row + 6, 1), Cells(C.Row + 7, 1)).EntireRow.Delete
                Rows(C.Row).Delete
            End If
        Loop
     
    End Sub
    La ligne suivante est peut être à adapter:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    strChaine = Mid(strChaine, 21, Len(strChaine))
    sauf si ton copier/coller est identique à ton fichier Excel.
    Dernière modification par Invité ; 11/06/2013 à 10h21.

  3. #3
    Membre Expert
    Inscrit en
    Octobre 2010
    Messages
    1 401
    Détails du profil
    Informations forums :
    Inscription : Octobre 2010
    Messages : 1 401
    Par défaut
    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
    Sub tt()
        'Si l 'ID dans <field value="XXX" est supérieur à 2130 on garde la ligne en question ainsi que les 4 lignes en dessous.
        ligne = 1
     
        While ligne < ThisWorkbook.Worksheets(2).Range("A" & Cells.Rows.Count).End(xlUp).Row
     
            st = ThisWorkbook.Worksheets(2).Cells(ligne, 1).Text
     
            result = DetecteFieldValue(st, "<field value=" & Chr(34), 2130)
     
            If result = True Then
     
                For ligne = ligne To ligne + 4
     
                    ThisWorkbook.Worksheets(2).Rows(ligne & ":" & ligne).Select
                    LigneDestination = LigneDestination + 1
                    ThisWorkbook.Worksheets(2).Rows(ligne & ":" & ligne).Copy ThisWorkbook.Worksheets(4).Cells(LigneDestination, 1)
     
                Next
            End If
            ligne = ligne + 1
        Wend
     
    End Sub
     
    Function DetecteFieldValue(st, field_value, plusGrandQue)
     
        b = InStr(UCase(st), UCase(field_value))
     
        If b > 0 Then
            valeur = Mid(st, b + Len(field_value))
     
            If Val(valeur) > plusGrandQue Then
                DetecteFieldValue = True
            End If
     
        End If
     
    End Function

Discussions similaires

  1. Nettoyer une base piratée
    Par yannc83 dans le forum Débuter
    Réponses: 8
    Dernier message: 18/05/2010, 10h58
  2. [PHP 5.3] Nettoyer une base de données
    Par guillaume2vo dans le forum Langage
    Réponses: 1
    Dernier message: 23/10/2009, 17h35
  3. Nettoyer une base de données
    Par lylandra6 dans le forum Requêtes et SQL.
    Réponses: 4
    Dernier message: 06/02/2009, 13h35
  4. Créer une base de données + fonction SetFocus
    Par aboishak dans le forum C++Builder
    Réponses: 4
    Dernier message: 17/08/2008, 14h30
  5. Réponses: 5
    Dernier message: 17/09/2007, 17h01

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