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 :

Mappage XML piloté par VBA [XL-2007]


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Inscrit en
    Décembre 2008
    Messages
    101
    Détails du profil
    Informations forums :
    Inscription : Décembre 2008
    Messages : 101
    Par défaut Mappage XML piloté par VBA
    Bonsoir !

    J'ai 2 fichiers : un fichier nommé devis.xlsm et un fichier Facture.xlsm.
    Chaque fichier a son mappage...
    jusque là tout va bien.

    A présent je veux regrouper les 2 fichiers en un seul "DEV_FACT.xlsm" (jusque là normalement je devrais m'en sortir ).
    Maintenant ça se complique car je voudrais exporter, par un clic sur bp, les données devis avec son mappage et les données facture avec son mappage via un autre Bp.
    Je cherche comment sélectionner le mappage et assurer l'envoi par VBA .... ( l'idéal étant que l'utilisateur n'ait pas à ouvrir l'éditeur / source / etc ... ) . Si vous avez des éléments pour me mettre sur une piste je suis VRAIMENT preneur ! ...
    Je vous remercie par avance pour votre aide ...

  2. #2
    Expert éminent Avatar de Menhir
    Homme Profil pro
    Ingénieur
    Inscrit en
    Juin 2007
    Messages
    16 037
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Finistère (Bretagne)

    Informations professionnelles :
    Activité : Ingénieur
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2007
    Messages : 16 037
    Par défaut
    Citation Envoyé par Alain7751 Voir le message
    Chaque fichier a son mappage...
    Qu'est-ce que tu appelles un mappage ?

    je voudrais exporter
    Sous quel format ?
    Généralement, quand on parle d'exporter et non de sauvegarder, c'est pour obtenir un autre format que Excel.

    par un clic sur bp
    Où devra se trouver ce bouton ? Dans la feuille Excel ou dans la barre d'outils ?

    assurer l'envoi par VBA ....
    Quel type d'envoi et vers quoi ?

  3. #3
    Membre confirmé
    Inscrit en
    Décembre 2008
    Messages
    101
    Détails du profil
    Informations forums :
    Inscription : Décembre 2008
    Messages : 101
    Par défaut
    Merci Menhir !
    Je réponds à tes questions :
    1 - le mappage est le fichier XML qui permet l'exportation des données de la facture ou du devis que nous exportons vers le serveur client.
    A partir de la feuille "Devis" ou "Facture" je vais dans Développeur puis source pour sélectionner le fichier de mappage du type "devis.xml".
    2 - dans l'idéal le bouton sera sur la feuille excel "Devis" et un autre sur la feuille "Facture".
    3- les données sont exportées vers le serveur du client qui a un mappage identique mais en importation.

    J'espère avoir répondu clairement à tes questions...

  4. #4
    Inactif  

    Homme Profil pro
    cuisiniste
    Inscrit en
    Avril 2009
    Messages
    15 374
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : cuisiniste
    Secteur : Bâtiment

    Informations forums :
    Inscription : Avril 2009
    Messages : 15 374
    Billets dans le blog
    8
    Par défaut re
    Bonjour

    ben non ca répond pas vraiment a la question que l'on t 'a demandé en fait

    je me sert moi même d'une exportations en XML de mes devis factures sauf que je n'utilise pas le format XML de excel je fait moi

    même par macro cette exportation en xml et la structure du fichier xml est perso

    a fin de pouvoir avoir un document exploitable en excel comme en html

    si tu nous dit pas comment et sous quelle forme et de quelle manière le mappage est fait tu peut attendre longtemps avant d'avoir une réponse


    si c'est simplement fait par " enregistrer sous" je ne vois pas ce dont tu a besoins, l'enregistreur de macro te fait le boulot

    moyennant par la suite un arrangement de variable dynamique pour en faire un code générique et dynamique

    ps:
    je viens d'y aller a ton menu source /mappage il faut choisir un fichier xml
    des l'ors je ne comprends pas vraiment ta demande car la macro serait sur le fichier lui mémé et lui même devrait avoir été enregistré au format xml

    bref le serpent qui se mort la queue


    édit:

    je te propose d'essayer cela et de me dire si c'est ce que tu cherche a avoir en modifiant la plage bien entendu

    cela te donne un mappage un peu différent directement de la source du fichier en cours d'utilisation et contenant la macro

    ilte serait facile de merger le devis facture dans un même fichier xml tout simplement avec open for input

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    ExtraitdevisXML = sheets("devis").Range("A1:C5").Value(xlRangeValueXMLSpreadsheet)
     Debug.Print ExtraitdevisXML
    ou
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     ExtraitdevisXML = Sheets("devis").Range("A1:C5").Value(xlRangeValueMSPersistXML)
     Debug.Print ExtraitdevisXML
    je te laisse faire tes tests
    a+
    mes fichiers dans les contributions:
    mail avec CDO en vba et mail avec CDO en vbs dans un HTA
    survol des bouton dans userform
    prendre un cliché d'un range

    si ton problème est résolu n'oublie pas de pointer : : ça peut servir aux autres
    et n'oublie pas de voter

  5. #5
    Expert éminent Avatar de Menhir
    Homme Profil pro
    Ingénieur
    Inscrit en
    Juin 2007
    Messages
    16 037
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Finistère (Bretagne)

    Informations professionnelles :
    Activité : Ingénieur
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2007
    Messages : 16 037
    Par défaut
    Citation Envoyé par Alain7751 Voir le message
    2 - dans l'idéal le bouton sera sur la feuille excel "Devis" et un autre sur la feuille "Facture".
    Après avoir créé te macro.
    Dans ta feuille, tu crées une simple forme (Ruban Insertion > Icone Formes) avec l'aspect qui te convient le mieux (rectangle, rond, étoile, etc.).
    Tu fais un clic droit sur cette forme > Affecter une macro > Choisis ta macro > Ok
    Ta forme s'est transformée en bouton qui lance ta macro.

    Pour le reste, je ne suis pas compétent pour ce qui touche à la relation Excel / Internet.

  6. #6
    Membre confirmé
    Inscrit en
    Décembre 2008
    Messages
    101
    Détails du profil
    Informations forums :
    Inscription : Décembre 2008
    Messages : 101
    Par défaut
    Merci PatrickToulon ... j'ai adopté ta 1ere solution "spreadsheet" ... merci pour ton aide !!
    Je n'ai plus qu'à le travailler un peu ... il est clair que je ne pouvais pas m'en sortir seul !

    dysorthographie ... merci à toi aussi pour ton aide !

    Un grand merci à tous !! ( c'est comme ça qu'on comprend pourquoi certains ont des étoiles et pas d'autres !! )

  7. #7
    Invité
    Invité(e)
    Par défaut
    Bonjour,
    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
    Enum AdoConst
        adBstr = 8 'String
        adBoolean = 11 'Boolean
        adInteger = 3 'Integer
        adUnsignedTinyInt = 17 'Byte
        adDate = 7 'Date
        adDouble = 5 'Double
        adSingle = 4 'Single
    End Enum
    Enum RsSave
        adPersistADTG = 0
        adPersistXML = 1
    End Enum
     
     
    Private Sub test()
      With CreateObject("ADODB.Recordset")
        .Fields.Append "Id", adInteger, 4 'Ajouter champ ID as Integer
        .Fields.Append "Nom", adBstr, 50 'Ajouter champ Nom as String
        .Fields.Append "PNom", adBstr, 50 'Ajouter champ PrénomNom as String
        .Open
        For i = 1 To 10
         .AddNew
         .Fields("Id") = i
         .Fields("Nom") = "Dysorthographie"
         .Fields("PNom") = "Robert"
        .Update
        Next
        If Dir(Environ("UserProfile") & "\Desktop\AdoXML1.XML") <> "" Then Kill Environ("UserProfile") & "\Desktop\AdoXML1.XML"
        .Save Environ("UserProfile") & "\Desktop\AdoXML1.XML", adPersistXML
        .Close
      End With
    End Sub
    Sub test2()
     With CreateObject("Adodb.Connection")
            .Open "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" & ThisWorkbook.FullName & ";Extended Properties=""Excel 12.0;HDR=YES;"""
            If Dir(Environ("UserProfile") & "\Desktop\AdoXML2.XML") <> "" Then Kill Environ("UserProfile") & "\Desktop\AdoXML2.XML"
            .Execute("Select * from [Feuil1$]").Save Environ("UserProfile") & "\Desktop\AdoXML2.XML", adPersistXML
            .Close
        End With
    End Sub
    Fichiers attachés Fichiers attachés
    Dernière modification par Invité ; 08/09/2017 à 12h48.

  8. #8
    Inactif  

    Homme Profil pro
    cuisiniste
    Inscrit en
    Avril 2009
    Messages
    15 374
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : cuisiniste
    Secteur : Bâtiment

    Informations forums :
    Inscription : Avril 2009
    Messages : 15 374
    Billets dans le blog
    8
    Par défaut re
    bonjour robert

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    Sub essai()
    Dim ExtraitXML As String
     If Dir(Environ("UserProfile") & "\Desktop\AdoXML1.XML") <> "" Then Kill Environ("UserProfile") & "\Desktop\AdoXML1.XML"
           Range("A1:A" & ActiveSheet.Rows.Count).RowHeight = 15
        ExtraitXML = Sheets("Feuil1").Range("A1:C20").Value(xlRangeValueXMLSpreadsheet)
        ' ecriture dans fichier
        fichier = Environ("UserProfile") & "\Desktop\AdoXML1.XML"
          x = FreeFile
        Open fichier For Output As #x
        Print #x, ExtraitXML
        Close #x
    End Sub
    après si tu veux un mappage encodé plus simplement tu change la constante pour celle ci "xlRangeValueMSPersistXML"
    ca élimine un peu des propriétés et ne garde qu'une structure simple de table avec les valeurs

    avec cette méthode on peut sauver une plage bien précise

    il faut remercier Pijaku d'avoir péché ca
    mes fichiers dans les contributions:
    mail avec CDO en vba et mail avec CDO en vbs dans un HTA
    survol des bouton dans userform
    prendre un cliché d'un range

    si ton problème est résolu n'oublie pas de pointer : : ça peut servir aux autres
    et n'oublie pas de voter

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

Discussions similaires

  1. [XL-2010] IE piloté par VBA = probleme de style: "Display" à exécuter
    Par jbonneval dans le forum Macros et VBA Excel
    Réponses: 3
    Dernier message: 29/03/2017, 08h15
  2. Piloter le publipostage par VBA
    Par Microlog-PC dans le forum VBA Word
    Réponses: 7
    Dernier message: 24/06/2016, 17h04
  3. [Toutes versions] OutLook Express piloter en VBA par Access
    Par fevec dans le forum VBA Access
    Réponses: 2
    Dernier message: 18/04/2011, 18h37
  4. [WD-2000] Publipostage piloté par un ERP et VBA
    Par juju05 dans le forum VBA Word
    Réponses: 17
    Dernier message: 23/11/2010, 09h27
  5. pb formatage document XML généré par un dom tree
    Par lionel69 dans le forum APIs
    Réponses: 11
    Dernier message: 17/10/2002, 09h53

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