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 :

Bug VBA ? Quel type de classe VBA utiliser pour créer un nouveau noeud dans une arborescence XML ?


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Nouveau membre du Club

    Homme Profil pro
    Ing. dev
    Inscrit en
    Septembre 2009
    Messages
    29
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations professionnelles :
    Activité : Ing. dev
    Secteur : Industrie

    Informations forums :
    Inscription : Septembre 2009
    Messages : 29
    Points : 29
    Points
    29
    Billets dans le blog
    1
    Par défaut Bug VBA ? Quel type de classe VBA utiliser pour créer un nouveau noeud dans une arborescence XML ?
    Bonjour,

    J'ai un problème pour créer un nouveau nouveau noeud dans une arborescence XML avec VBA Excel.

    J'utilise le code VBA suivant :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    ...
        Set node_u_rOB_X = node_Type.SelectSingleNode(DefinitionNodeName)
     
        If node_u_rOB_X Is Nothing Then
            Set node_u_rOB_X = xmlDoc.createElement(DefinitionNodeName)
            node_Type.appendChild (node_u_rOB_X)
        Else
    ...
    Si je déclare ma variable node_u_rOB_X :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    Dim node_Type As MSXML2.IXMLDOMNode
    Dim node_u_rOB_X As MSXML2.IXMLDOMNode
    ou
    Dim node_u_rOB_X As MSXML2.IXMLDOMElement
    J'ai l'erreur suivante lors de l'appel de la méthode appendChild :
    Erreur d’exécution 438, propriété ou méthode non gérée par cet objet.
    J'ai la même erreur si je code comme cela :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    node_Type.appendChild (xmlDoc.createElement(DefinitionNodeName))
    Mais si je déclare ma variable :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Dim node_u_rOB_X As Variant
    Ca fonctionne !
    Et lorsque je regarde le type de ma variable node_u_rOB_X avec le debuggeur(espion) celle-ci est déclarée IXMLDOMElement après la commande Set !??

    Est-ce un bug de la librairie Microsoft XML ou est-ce moi qui suis à côté de la plaque ?

    J'utilise Excel 2007 sous Windows 7 64bits


    Stéphane

  2. #2
    Nouveau membre du Club

    Homme Profil pro
    Ing. dev
    Inscrit en
    Septembre 2009
    Messages
    29
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations professionnelles :
    Activité : Ing. dev
    Secteur : Industrie

    Informations forums :
    Inscription : Septembre 2009
    Messages : 29
    Points : 29
    Points
    29
    Billets dans le blog
    1
    Par défaut
    Il suffit de passer le paramètre à la méthode appendChild sans les ( )

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    node_Type.appendChild node_u_rOB_X
    et dans ce cas je peux utiliser ma variable de type MSXML2.IXMLDOMNode



    Je ne suis pas un pro VBA, je fais plutôt dans le C et C++, donc il y a surement une explication logique à ce K. Mais si je pouvais avoir une explication afin de combler mon manque je serais super content.

    Merci Stéphane

  3. #3
    Membre habitué Avatar de francis60
    Homme Profil pro
    Modélisation coût/process
    Inscrit en
    Août 2011
    Messages
    178
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Oise (Picardie)

    Informations professionnelles :
    Activité : Modélisation coût/process
    Secteur : Conseil

    Informations forums :
    Inscription : Août 2011
    Messages : 178
    Points : 162
    Points
    162
    Par défaut
    Citation Envoyé par lesteph Voir le message
    il y a surement une explication logique à ce K
    les parenthèses indiquent un passage d'argument par valeur (Forçage de ByVal par opposition à ByRef mode par défaut)

    Les parenthèses ont dû rendre ton paramètre non modifiable en retour, je pense.

    Je crois même me souvenir - mais il faudrait que je recherche le K - qu'il existe des exceptions où même en spécifiant ByRef dans la définition, le code n'en tient pas compte et ne modifie pas l'argument passé en référence par le code appelant et sans message d'alerte.

    Un tableau résumé des modes d'appel
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
                                   Function              Sub
    Sans Call    ByRef            F(a,b)               S a, b
    Sans Call    ByVal forcé      F((a), (b))          S (a), (b)
    Avec Call    ByRef            Call F((a), (b))     Call S(a, b)
    Avec Call    ByVal forcé      Call F(a, b)         Call S((a), (b))
    On peut aussi combiner: S a, (b), c
    Avec Call la fonction ne retourne rien.

    Bienvenue @VBA

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

Discussions similaires

  1. Réponses: 5
    Dernier message: 17/07/2013, 08h23
  2. [Batch] Script pour exécuter un autre script dans une arborescence de repertoires.
    Par jano_dave dans le forum Scripts/Batch
    Réponses: 16
    Dernier message: 02/07/2009, 14h43
  3. Réponses: 6
    Dernier message: 22/01/2009, 14h45
  4. Réponses: 1
    Dernier message: 08/01/2009, 18h34

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