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 :

Passer de VB.NET à VBA - XML via VB [XL-2010]


Sujet :

Macros et VBA Excel

  1. #1
    Membre confirmé
    Homme Profil pro
    Ressources humaines
    Inscrit en
    Mai 2013
    Messages
    75
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Ressources humaines
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Mai 2013
    Messages : 75
    Par défaut Passer de VB.NET à VBA - XML via VB
    Bonjour à tous,

    Voici mon problème :
    J'ai un fichier VB.Net qui fonctionne, cependant je dois le passer sous VBA et je n'y arrive pas. Je n'ai pas beaucoup de connaissance dans ce domaine.

    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
    45
    46
    47
    48
    49
    50
    51
    52
    Imports System.Xml
    Imports System
     
    Imports System.Reflection
     
    Module Module1
     
        Private Property xmlDoc As Object
        Dim nom As String
        Dim compte As Integer
        Dim nbp8 As Integer
     
     
        Sub Main()
     
            xmlDoc = CreateObject("Microsoft.XMLDOM")
            xmlDoc.Async = "false"
            xmlDoc.Load("C:\Users\Joris\Desktop\Parametrage.xml")
     
            Dim doc As XDocument = XDocument.Load("C:\Users\Joris\Desktop\Parametrage.xml")
            For Each oElement In xmlDoc.getElementsByTagName("ROW")
                If oElement.getAttribute("CODE_TYPE_PALETTE") = "P8" Then
     
                    For Each row In From element In doc.<DATAPACKET>.<ROWDATA>.<ROW>
            Where element.@CODE_TYPE_PALETTE = "P8"
                        nbp8 = nbp8 + 1
                        row.Remove()
                    Next
     
                End If
            Next
     
            xmlDoc = Nothing
     
            MsgBox(nbp8)
            doc.Save("C:\Users\Joris\Desktop\Parametrage.xml")
            doc = Nothing
     
            xmlDoc = CreateObject("Microsoft.XMLDOM")
            xmlDoc.Async = "false"
            xmlDoc.Load("C:\Users\Joris\Desktop\Parametrage.xml")
            compte = 0
     
            For Each RowElement In xmlDoc.selectNodes("/DATAPACKET/ROWDATA/ROW")
                compte = compte + 1
            Next
            MsgBox(compte)
            xmlDoc = Nothing
        End Sub
     
     
    End Module
    Ce code fonctionne correctement, mais impossible de le passer sous VBA Excel 2010.
    Avez-vous des idées ? svp

    Je vous remercie,

    A bientôt !

    Tom

  2. #2
    Membre confirmé
    Homme Profil pro
    Ressources humaines
    Inscrit en
    Mai 2013
    Messages
    75
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Ressources humaines
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Mai 2013
    Messages : 75
    Par défaut
    Aprés quelques essais, je suis arrivé à ce code là. Je ne comprends toujours pas.
    C'est comme si tout fonctionnait, mais les balises ne se suppriment pas. Il compte le nombre de balise ayant un attribut = "P8".
    Il ne me reste plus qu'a supprimer ces balises ROW mais je n'y arrive pas.

    Je vous laisse mon code VBA sous excel 2010 :

    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
    45
    Dim xmlDoc As New MSXML2.DOMDocument
    Dim xmlSelect As MSXML2.IXMLDOMSelection
     
    Sub Main()
     
    Dim nom As String
    Dim compte As Integer
    Dim nbp8 As Integer
     
     
     
    Dim xmlDoc As New DOMDocument
     
            'xmlDoc = CreateObject("Microsoft.XMLDOM")
            xmlDoc.async = "false"
            xmlDoc.Load ("C:\Users\Joris\Desktop\Parametrage_Specifique_Format - Copie (2).xml")
     
            ' Pour tous les noeuds "element", renvoie l'attribut "ID"
            ' Attention à la casse !
            For Each oElement In xmlDoc.getElementsByTagName("ROW")
                If oElement.getAttribute("CODE_TYPE_PALETTE") = "P8" Then
     
                   Set xmlSelect = xmlDoc.SelectNodes("/DATAPACKET/ROWDATA/ROW[CODE_TYPE_PALETTE='P8']")
     xmlSelect.RemoveAll
     
             nbp8 = nbp8 + 1
     
     
                End If
            Next
     
            MsgBox (nbp8)
            xmlDoc.Save ("C:\Users\Joris\Desktop\Parametrage_Specifique_Format - Copie (2).xml")
     
            xmlDoc.async = "false"
            xmlDoc.Load ("C:\Users\Joris\Desktop\Parametrage_Specifique_Format - Copie (2).xml")
            compte = 0
     
     
            For Each RowElement In xmlDoc.SelectNodes("/DATAPACKET/ROWDATA/ROW")
                compte = compte + 1
            Next
            MsgBox (compte)
     
    End Sub
    Avez-vous une idée ?

    Tom

  3. #3
    Invité
    Invité(e)
    Par défaut
    Bonjour,
    Difficile de faire un manuel de conversion car.net est plus souple dans la manipulation des objets mais plus complexe dans leurs définition.

    Si tu défins un string tu lui affectera sa valeur par défaut.
    En vba le fait de dimensionner un string lui donne"" par défaut.

    .net reconnait le type d'objet il donnera la valeur ou la référence de l'objet selon son type.
    En vba on affectera pas un objet lors de sa définition.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    set xmlDoc = CreateObject("Microsoft.XMLDOM") 'on préfixe par une fonction d'assignation
    Dim doc As XDocument ' on l'assigne pas une valeur sur la ligne de définition.
    Set doc= XDocument.Load("C:\Users\Joris\Desktop\Parametrage.xml")
    Alors qu'une variable string (et oui on fait encore la distinction entre variable et objet) recevra ca valeur. Directement.
    a=b !

    Je n'ai pa tout regarder mes voila la voie à suivre!

  4. #4
    Membre confirmé
    Homme Profil pro
    Ressources humaines
    Inscrit en
    Mai 2013
    Messages
    75
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Ressources humaines
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Mai 2013
    Messages : 75
    Par défaut
    Merci de ta réponse.
    Je suis désolé, j'ai re-posté à la suite de mon premier poste. Le second poste étant beaucoup plus précis. Je ne cherche plus qu'à supprimer une balise contenant un attribut.
    Grace à une boucle, je suis capable de tester si une balise contient l'attribut P8. Mais le problème c'est que je n'arrive pas à supprimer la balise entiere.
    J'utilise removeAll mais cela ne fait rien du tout et lorsque j'execute le programme, il n'y a pas d'erreur.
    Ce problème me rend dingue ! Je passe énormément de temps le dessus !

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

Discussions similaires

  1. Création d'un XMl via une application Vb.net
    Par machin1234 dans le forum Windows
    Réponses: 1
    Dernier message: 01/12/2010, 09h27
  2. Réponses: 6
    Dernier message: 15/02/2008, 11h10
  3. [VB.NET][VBA-E]Execution d'une macro excel via application
    Par Yolak dans le forum Windows Forms
    Réponses: 2
    Dernier message: 10/12/2007, 07h46
  4. [AJAX] Passer des donnees format xml via un POST
    Par ldcarpathes dans le forum Général JavaScript
    Réponses: 7
    Dernier message: 21/08/2006, 16h09
  5. [VB NET]: Modifier un fichier XML via un DataSet
    Par ADONET dans le forum Windows Forms
    Réponses: 1
    Dernier message: 08/02/2006, 18h54

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