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

Word Discussion :

Travailler sur un fichier inséré dans word sans liaison


Sujet :

Word

  1. #1
    Nouveau Candidat au Club
    Homme Profil pro
    Paris
    Inscrit en
    Août 2015
    Messages
    11
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Paris

    Informations forums :
    Inscription : Août 2015
    Messages : 11
    Points : 1
    Points
    1
    Par défaut Travailler sur un fichier inséré dans word sans liaison
    Bonjour à tous,

    C'est la première fois que je demande de l'aide sur un forum. J'ai cherché partout, mais ne trouve pas de solution.
    Voilà, j'ai un document word, dans lequel j'ai insérer une fichier XSD, sans liaison car je veux que le fichier soit indépendant, sous forme d'icone.
    J'ai un userform, dans lequel il y a un bouton.
    Lorsque l'utilisateur clique sur ce bouton, ca lui demande d'indiquer un fichier XML.
    Une fois sélectionné, alors le programme va le valider en fonction du fichier XSD qu'il contient sur l'une de ses pages. Çà c'est ce que j'aimerais !
    Actuellement mon programme fonctionne, mais en prenant le XSD via un chemin, à l’extérieur du document word.

    Mais je veux qu'il utilise celui qu'il a dans son document.
    j'ai je crois tout essayé avec ActiveDocument.InlineShapes(1), mais rien n'y fais, je n'arrive pas à faire fonctionner ma macro en récupérant le fichier XSD qui est inséré dans le document word.
    Une piste : via word, quand je fais un clique droit sur ce document XSD, et que je vais dans "Objet Objet d'environnement du gestionnaire de liaison" et que je clique sur "Renommer le package", j'obtiens une popup avec dedans le nom du fichier sous la forme "C:\Users\USER~1\AppData\Local\Temp\XSD.xsd"
    Si j'arrivais à récupérer ce chemin, je pense que cela fonctionnerais !

    Donc pour résumer, comment interagir avec un document inséré sans liaison, autre que excel car j'ai un autre document inséré qui est un fichier Excel et avec lequel j'arrive à interagir (ActiveDocument.InlineShapes(2))

    Voici la macro qui fonctionne, mais qui fait référence en dur au chemin du fichier XSD à l'extérieur du document WORD (Code à améliorer) :
    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
    Sub validerXML(xml As String) 'prend en paramètre le chemin du fichier XML à faire valider
        Dim WshShell
        Set WshShell = CreateObject("WScript.Shell")
     
        Dim xmlDoc
        Set xmlDoc = CreateObject("Msxml2.DOMDocument.6.0")
        xmlDoc.async = False
        xmlDoc.validateOnParse = True
        xmlDoc.setproperty "MultipleErrorMessages", True
     
        Dim xmlSchema
        Set xmlSchema = CreateObject("Msxml2.DOMDocument.6.0")
        xmlSchema.async = False
        xmlSchema.validateOnParse = True
        xmlSchema.Load "C:\Users\Desktop\WSD.xsd" 'ActiveDocument.InlineShapes(1).OLEFormat.IconLabel
     
        Dim xsdCache
        Set xsdCache = CreateObject("Msxml2.XMLSchemaCache.6.0")
        xsdCache.Add "", xmlSchema
        Set xmlDoc.schemas = xsdCache
     
        xmlDoc.Load xml
        Dim xmlParseErr
        Set xmlParseErr = xmlDoc.ParseError
        If (xmlParseErr.errorParametersCount <> 0) Then
            Dim ParseError
            Dim msgErr As String
     
            msgErr = ""
            For Each ParseError In xmlParseErr.AllErrors
                msgErr = msgErr & "Erreur ligne = " & ParseError.Line & vbCrLf & ParseError.reason & vbCrLf
            Next
            MsgBox msgErr
        Else
            MsgBox ("Fichier XML conforme à la XSD")
        End If
    End Sub
    En vous remerciant par avance

  2. #2
    Invité
    Invité(e)
    Par défaut
    Citation Envoyé par sebien0077 Voir le message
    Bonjour,

    Je ne sais pas si je peux vous aider, mais regardez cette discussion formule-utilisant-nbr-fixe-signet-cellule-tableau-excel-insere-word-resultat.
    Dans celle-ci, il est question de récupérer une valeur contenue dans un tableau Excel incorporé, ce qui n'est pas la même chose que votre cas. La difficulté était justement de connaître la mécanique pour accéder à l'objet incorporé. Pour cela les déclarations en tête sont nécessaires, ainsi que Edit et GetObjet pour récupérer l'instance créée.

  3. #3
    Nouveau Candidat au Club
    Homme Profil pro
    Paris
    Inscrit en
    Août 2015
    Messages
    11
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Paris

    Informations forums :
    Inscription : Août 2015
    Messages : 11
    Points : 1
    Points
    1
    Par défaut
    Citation Envoyé par Eric KERGRESSE Voir le message
    Bonjour,

    Je ne sais pas si je peux vous aider, mais regardez cette discussion formule-utilisant-nbr-fixe-signet-cellule-tableau-excel-insere-word-resultat.
    Dans celle-ci, il est question de récupérer une valeur contenue dans un tableau Excel incorporé, ce qui n'est pas la même chose que votre cas. La difficulté était justement de connaître la mécanique pour accéder à l'objet incorporé. Pour cela les déclarations en tête sont nécessaires, ainsi que Edit et GetObjet pour récupérer l'instance créée.
    Merci pour cette tentative, mais justement c'est bien là le soucis, j'arrive à interagir avec un autre InlineSHape Excel, sans soucis. Le truc c'est vraiment dès lors que le document n'est pas qqch d'Office, je veux juste récupérer le chemin pour que ma macro puisse valider le xml avec ledit xsd .

  4. #4
    Invité
    Invité(e)
    Par défaut
    Citation Envoyé par sebien0077 Voir le message
    Mettez un fichier en ligne pour voir.

  5. #5
    Nouveau Candidat au Club
    Homme Profil pro
    Paris
    Inscrit en
    Août 2015
    Messages
    11
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Paris

    Informations forums :
    Inscription : Août 2015
    Messages : 11
    Points : 1
    Points
    1
    Par défaut
    Citation Envoyé par Eric KERGRESSE Voir le message
    Mettez un fichier en ligne pour voir.
    N'importe quel fichier xsd. Voici un exemple en ligne
    Fichiers attachés Fichiers attachés

  6. #6
    Invité
    Invité(e)
    Par défaut
    Citation Envoyé par sebien0077 Voir le message
    Ce code doit ouvrir normalement le fichier en fonction de son extension. Mais visiblement la lecture est bloquée car le fichier contient des éléments XML personnalisés qui ne sont plus autorisés (office 365), voir l'aide en ligne sur ce sujet.

    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
     
    Sub OuvrirFichierXsd()
     
    Dim MonInLineShape As InlineShape
    Dim DocEncours As Document
     
        Set DocEncours = ActiveDocument
        With DocEncours
             If .InlineShapes.Count > 0 Then
                Set MonInLineShape = .InlineShapes(1)
                With MonInLineShape.OLEFormat
                     If .ClassType = "Package" Then .Edit
                End With
                Set MonInLineShape = Nothing
            End If
        End With
       Set DocEncours = Nothing
     
    End Sub
    Pièce jointe 505544

  7. #7
    Nouveau Candidat au Club
    Homme Profil pro
    Paris
    Inscrit en
    Août 2015
    Messages
    11
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Paris

    Informations forums :
    Inscription : Août 2015
    Messages : 11
    Points : 1
    Points
    1
    Par défaut
    Citation Envoyé par Eric KERGRESSE Voir le message
    Ce code doit ouvrir normalement le fichier en fonction de son extension. Mais visiblement la lecture est bloquée car le fichier contient des éléments XML personnalisés qui ne sont plus autorisés (office 365), voir l'aide en ligne sur ce sujet.
    Je pense m'être mal exprimé. Je ne veux pas l'ouvrir comme ça et l'éditer. Je désire pouvoir l'utiliser dans cette partie de mon code.
    Actuellement, le fichier correspond à la variable xsd, qui est un string dont la valeur est le chemin où se trouve le fichier xsd.
    Donc le .edit ne peut pas fonctionner

    Merci encore pour ton aide, on va peut être trouver qqch à force!

    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
    Sub validerXML(xml As String, xsd As String)
        Dim WshShell
        Set WshShell = CreateObject("WScript.Shell")
     
        Dim xmlDoc
        Set xmlDoc = CreateObject("Msxml2.DOMDocument.6.0")
        xmlDoc.async = False
        xmlDoc.validateOnParse = True
        xmlDoc.setproperty "MultipleErrorMessages", True
     
        Dim xmlSchema
        Set xmlSchema = CreateObject("Msxml2.DOMDocument.6.0")
        xmlSchema.async = False
        xmlSchema.validateOnParse = True
        xmlSchema.Load xsd
     
        Dim xsdCache
        Set xsdCache = CreateObject("Msxml2.XMLSchemaCache.6.0")
        xsdCache.Add "", xmlSchema
        Set xmlDoc.schemas = xsdCache
     
        xmlDoc.Load xml
        Dim xmlParseErr
        Set xmlParseErr = xmlDoc.ParseError
        If (xmlParseErr.errorParametersCount <> 0) Then
            Dim ParseError
            Dim msgErr As String
     
            msgErr = ""
            For Each ParseError In xmlParseErr.AllErrors
                msgErr = msgErr & "Erreur ligne = " & ParseError.Line & vbCrLf & ParseError.reason & vbCrLf
            Next
            MsgBox msgErr
        Else
            MsgBox ("Fichier XML conforme à la XSD")
        End If
    End Sub

  8. #8
    Nouveau Candidat au Club
    Homme Profil pro
    Paris
    Inscrit en
    Août 2015
    Messages
    11
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Paris

    Informations forums :
    Inscription : Août 2015
    Messages : 11
    Points : 1
    Points
    1
    Par défaut
    J'ai une piste de solution palliative.
    Comme visiblement, les fichier inséré sont mis en cache dans le TEMP (à confirmer...), je pense pouvoir jouer avec la variable d’environnement et y ajouter le nom de mon fichier.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Environ$("TMP") & "\" & ActiveDocument.InlineShapes(1).OLEFormat.IconLabel

    Est-ce fiable sur le long terme et sur plusieurs postes?

  9. #9
    Invité
    Invité(e)
    Par défaut
    Citation Envoyé par sebien0077 Voir le message
    Regardez également cette solution sur mon blog : sauvegarder-lire-macro-infos-collection-variables-document-word

  10. #10
    Nouveau Candidat au Club
    Homme Profil pro
    Paris
    Inscrit en
    Août 2015
    Messages
    11
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Paris

    Informations forums :
    Inscription : Août 2015
    Messages : 11
    Points : 1
    Points
    1
    Par défaut
    Citation Envoyé par Eric KERGRESSE Voir le message
    Regardez également cette solution sur mon blog : sauvegarder-lire-macro-infos-collection-variables-document-word
    Je vois, mais je maîtrise pas encore assez pour y arriver seul :/
    Si je comprends bien ton idée, ce serait de charger le doc XSD dans ta variable document, et de le charger lors de mon appel .load .

    Mais je ne vois pas du tout comment faire cela. (je maîtrise pas ce qui est OBJECT)

  11. #11
    Invité
    Invité(e)
    Par défaut
    Citation Envoyé par sebien0077 Voir le message
    Le nom seulement.

  12. #12
    Nouveau Candidat au Club
    Homme Profil pro
    Paris
    Inscrit en
    Août 2015
    Messages
    11
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Paris

    Informations forums :
    Inscription : Août 2015
    Messages : 11
    Points : 1
    Points
    1
    Par défaut
    Citation Envoyé par Eric KERGRESSE Voir le message
    Le nom seulement.
    Désolé, mais étant donné que le seul nom que j'arrive a récupérer est ActiveDocument.InlineShapes(1).OLEFormat.IconLabel , cela ne me sert toujours à rien.
    Il me faut réussir à récupérer le chemin de mon fichier Inline, qui pointe vers TEMP visiblement. mais je ne sais pas pourquoi, chez moi parfois il le renomme comme s'il existait déjà en rajoutant un (2) avant l'extension... alors que je vérifie, il n'en existe pas un autre dans TEMP
    Donc ma solution temporaire n'est pas valide/fiable.

  13. #13
    Invité
    Invité(e)
    Par défaut
    Citation Envoyé par sebien0077 Voir le message
    Je ne pense pas pouvoir t'aider, ne comprenant pas ce que tu veux faire. Lorsque j'essaie d'ouvrir le fichier, tu me dis que tu ne cherches pas à le faire, lorsque je t'indique le moyen mémoriser le chemin dans ton document où il serait susceptible de s'y trouver, ce n'est pas non plus la solution. J'avoue ne pas avoir assez de connaissances pour t'aider.

  14. #14
    Nouveau Candidat au Club
    Homme Profil pro
    Paris
    Inscrit en
    Août 2015
    Messages
    11
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Paris

    Informations forums :
    Inscription : Août 2015
    Messages : 11
    Points : 1
    Points
    1
    Par défaut
    Citation Envoyé par Eric KERGRESSE Voir le message
    Je ne pense pas pouvoir t'aider, ne comprenant pas ce que tu veux faire. Lorsque j'essaie d'ouvrir le fichier, tu me dis que tu ne cherches pas à le faire, lorsque je t'indique le moyen mémoriser le chemin dans ton document où il serait susceptible de s'y trouver, ce n'est pas non plus la solution. J'avoue ne pas avoir assez de connaissances pour t'aider.
    Voici un exemple très concret de ce que j'essai de faire (à déziper).
    Quand tu clique sur le bouton, ca te demande de selectionner un fichier index.xml.
    En dur dans le code il faut modifier la ligne :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    xsd = "C:\Users\sebien0077\Desktop\XSD.xsd" 'Récupération du fichier XSD en dehors pour le moment. Mais j'aimerais récupérer celui inclus dans mon fichier.
    et y mettre le chemin vers ton fichier XSD (reprendre celui inclus dans mon fichier word)
    Et normalement, ca fonctionnera et te validera ou non ton fichier Index avec un message.

    Et donc ce que j'aimerais c'est pouvoir récupérer le fichier XSD inclus dans le document word, et pas mettre un chemin vers un fichier XSD en dehors du fichier.exempleValidationXML.zip

  15. #15
    Nouveau Candidat au Club
    Homme Profil pro
    Paris
    Inscrit en
    Août 2015
    Messages
    11
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Paris

    Informations forums :
    Inscription : Août 2015
    Messages : 11
    Points : 1
    Points
    1
    Par défaut
    Compliqué n'est-ce pas? Est-ce que au moins maintenant ma demande est clair?

  16. #16
    Inactif  

    Homme Profil pro
    Développeur .NET
    Inscrit en
    Janvier 2012
    Messages
    4 903
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 68
    Localisation : Canada

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : Finance

    Informations forums :
    Inscription : Janvier 2012
    Messages : 4 903
    Points : 10 166
    Points
    10 166
    Billets dans le blog
    36
    Par défaut
    Citation Envoyé par sebien0077 Voir le message
    Compliqué n'est-ce pas? Est-ce que au moins maintenant ma demande est clair?
    Non. Tu aurais pu mettre un exemple de ton fichier xml à importer; quitte à y mettre des données fantaisistes.

    Tu as quelle version de Word ?

    Parce que Word 365, permet de mapper manuellement des fichiers xml à l'importation. Parce que, à première vue, en le faisant manuellement et en enregistrant la macro, tu aurais une base…

    Quant à savoir si tu as vraiment besoin de msxml, je ne sais pas.

    Pour la fiabilité à long terme des variables, d'environnement, je ne sais pas non plus.


    P.S. Une idée qui vient de me passer par la tête, et sans avoir essayé quoi que ce soit. Si tu insères le texte de ton fichier XSD dans un cadre de texte, cela donne quoi ?

  17. #17
    Nouveau Candidat au Club
    Homme Profil pro
    Paris
    Inscrit en
    Août 2015
    Messages
    11
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Paris

    Informations forums :
    Inscription : Août 2015
    Messages : 11
    Points : 1
    Points
    1
    Par défaut
    Pardon, mais le but de ce fichier est de valider un fichier xml en fonction d'un fichier xsd.
    Donc tu mets n'importe quel fichier, on s'en fou. Ça valide ou pas on s'en fou. Tu peux y mettre une image, un pdf, un film, une musique on s'en fou l'objectif n'est pas de valider ou non le fichier sélectionné.
    Concernant office, j'utilise office 2010 2013 et 2019.
    L'objectif est de récupérer le fichier xsd qui est inclut dans le word via vba.
    Et non, je ne vais pas recopier toute la xsd dans le document word, et la récupérer via une section. Les contournements ce n'est pas ce qui me manque. je veux uniquement pouvoir récupérer le fichier xsd inclut dans mon fichier word.

  18. #18
    Inactif  

    Homme Profil pro
    Développeur .NET
    Inscrit en
    Janvier 2012
    Messages
    4 903
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 68
    Localisation : Canada

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : Finance

    Informations forums :
    Inscription : Janvier 2012
    Messages : 4 903
    Points : 10 166
    Points
    10 166
    Billets dans le blog
    36
    Par défaut
    Essaie avec shape.textFrame, ou shape.textFrame2, d'un coup.

    Et quand je relis cela, je me demande si tu sais de quoi tu parles:

    Voilà, j'ai un document word, dans lequel j'ai insérer une fichier XSD, sans liaison car je veux que le fichier soit indépendant, sous forme d'icone.
    J'ai un userform, dans lequel il y a un bouton.
    Donc, tu as mis toi-même ton fichier XSD dans un document Word. Et moi, je te dis : au lieu de mettre ton fichier directement dans le document Word, mets un cadre de texte dans ton document Word et ton XSD dans ton cadre de texte.

    À ce que je sache, on valide un fichier XML en fonction du texte contenu dans un XSD, et pas en fonction de l'image du texte. Et puis, de toutes façons, que ton fichier XSD soit directement dans ton document Word, ou dans un cadre de texte, cela ne change pas grand chose pour VBA. Ce sont deux shapes de toutes façons.

    Et entre nous deux et puis la boîte à bois, je ne suis même pas sûr que toutes les versions de Word traitent les même fichiers XML de la même façon à l'ouverture.

  19. #19
    Nouveau Candidat au Club
    Homme Profil pro
    Paris
    Inscrit en
    Août 2015
    Messages
    11
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Paris

    Informations forums :
    Inscription : Août 2015
    Messages : 11
    Points : 1
    Points
    1
    Par défaut
    Merci pour cette info. Mais cela ne me convient pas et ne répond pas à ma demande d'aide initiale.
    Et si, je sais de quoi je parle. Là différence entre ta solution et mon XSD inséré en mode fichier/icone ? La taille dans un document de spécification métier. La XSD que je vous ai mise là est bidon, la véritable XSD tient sur plusieurs pages. Donc je ne vais pas polluer le document Word avec une énorme Frame.
    Après si c'est pas faisable, on clos le sujet.
    Je le répète je demande juste de l'aide pour parvenir à faire cela, pas à trouver une solution alternative que j'ai déjà mis en place.

Discussions similaires

  1. [CSV] Travailler sur un fichier temporaire?
    Par toniodp dans le forum Langage
    Réponses: 3
    Dernier message: 16/05/2007, 11h59
  2. [OpenDoc] Travailler sur un fichier OD avec C++, C# et XSLT
    Par oodini dans le forum XSL/XSLT/XPATH
    Réponses: 2
    Dernier message: 09/03/2007, 10h44
  3. travailler sur un fichier csv
    Par james2606 dans le forum Langage
    Réponses: 3
    Dernier message: 24/01/2007, 10h27
  4. Réponses: 7
    Dernier message: 23/03/2005, 22h23
  5. [Excel] Travailler sur un fichier excel existant
    Par scoder dans le forum Bibliothèques et frameworks
    Réponses: 2
    Dernier message: 26/10/2004, 12h54

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