1. #1
    Membre du Club
    Homme Profil pro
    Enseignant
    Inscrit en
    mars 2017
    Messages
    76
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Enseignant
    Secteur : Enseignement

    Informations forums :
    Inscription : mars 2017
    Messages : 76
    Points : 54
    Points
    54

    Par défaut Appel d'un modèle de document Word par le code VB.net et insertion automatique des champs d'une DGV

    Bonjour,
    J'ai créé un modèle de document dans Word avec des champs que je souhaite relier à une BDD.
    Je souhaiterais appeler ce document par le code dans VB.net et renseigner directement les champs du document Word à partir d'une DatagridView.
    Mais pour l'instant je ne sais pas trop par où commencer.
    Quelqu'un a-t-il une idée ou un exemple de code à me donner ?
    Merci d'avance pour votre aide

  2. #2
    Expert éminent

    Homme Profil pro
    Développeur .NET
    Inscrit en
    janvier 2012
    Messages
    3 863
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : Canada

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

    Informations forums :
    Inscription : janvier 2012
    Messages : 3 863
    Points : 7 892
    Points
    7 892
    Billets dans le blog
    18

    Par défaut

    Bonjour,

    Vite fait comme cela je ne sais pas trop. Mais, il y a probablement plus d'une façon de procéder.

    1) Tu peux créer un modèle Word avec les macros dans le modèle et lancer les macros à partir de VB.net

    2) Tu peux agir directement sur les objets Word à partir de VB.net

    Ceci dit, tu dois commencer par le commencement et te poser deux questions:

    - Ton DatagridView est alimenté comment ? À la mitaine dans le code ou directement d'une banque de données ?
    - Ton document Word est-il lié directement à un banque de données particulières.

    Une fois que tu as répondu à ces deux questions, voici la troisième. Pourquoi pas un banal publipostage dans Word ?
    -
    À ma connaissance, le seul personnage qui a été diagnostiqué comme étant allergique au mot effort. c'est Gaston Lagaffe.

    À force de vouloir considérer les utilisateurs comme des imbéciles patentés, on risque de se mettre dans le trouble.

    Excel n'a jamais été, n'est pas et ne sera jamais un SGBD, c'est pour cela que Excel s'appelle Excel et ne s'appelle pas Access junior.

  3. #3
    Membre du Club
    Homme Profil pro
    Enseignant
    Inscrit en
    mars 2017
    Messages
    76
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Enseignant
    Secteur : Enseignement

    Informations forums :
    Inscription : mars 2017
    Messages : 76
    Points : 54
    Points
    54

    Par défaut

    Merci pour ta réponse clementmarcotte,
    Pour répondre à tes questions :
    • Ma DGV est alimentée par un DataSet issu d'une BDD SQL
    • Mon document Word n'est lié à acune BDD pour l'instant


    Ce que je voudrais faire c'est après avoir sélectionné une ligne dans ma DGV de pouvoir choisir un modèle de document Word préparé (j'ai plusieurs modèles en fonction du type de document nécessaire) pour recevoir les données issue de la ligne sélectionnée sur la DGV et ensuite l'imprimer sans autre intervention.
    Problème je suis un peu débutant et je ne sais pas par où commencer ...
    Ce que je souhaiterais c'est un exemple de code qui me permettrait de comprendre comment faire et ensuite de l'adapter avec mon propre code, j'ai appris tout ce que je sais de VB.net pour l'instant comme ça

  4. #4
    Expert éminent

    Homme Profil pro
    Développeur .NET
    Inscrit en
    janvier 2012
    Messages
    3 863
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : Canada

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

    Informations forums :
    Inscription : janvier 2012
    Messages : 3 863
    Points : 7 892
    Points
    7 892
    Billets dans le blog
    18

    Par défaut

    Bonjour,

    Je n'ai pas de code, ni de BD pour cela sous la main, et personnellement je ne vois pas l'intérêt. Et les règles de la maison ne sont pas vraiment en faveur du code gratuit clef en main.

    Tu peux alimenter ton document Word en puisant directement dans ta base SQL, soit en passant par le publipostage avec une requête SQL. C'est possible pour un seul document et aucune obligation que le document en question ne soit une lettre.

    Tu peux aussi mettre directement dans ton document Word des champs de BD.

    Si ton idée c'est de prendre une ligne d'un DGV et de foutre chaque donnée de ta ligne à un endroit précis dans un document Word inconnu, là, cela dépend de ton document. Si tu as des signets présents aux bons endroits de ton document, et que tu connais les noms des signets, c'est une affaire de rien d'itérer les colonnes de ta ligne et de mettre les données à côté, à l'intérieur ou à la place des signets, pour autant que l'on connaisse l'ABC de la manipulation des signets avec VBA Word.

    Si tu ne connais pas le nom de tes signets, ou que tu dois les insérer par programmation, là, tu dois maîtriser VB.net et VBA pour Word. Cela en fait beaucoup en même temps.

    Tu peux aussi avec VB.net utiliser directement les objets du publipostage de Word par automation, et leur transmettre les données de ton DGV...

    Tu peux toujours fouiller par là. Il y a quelques exemples de manipulation d'Excel et de Word avec VB.net
    À ma connaissance, le seul personnage qui a été diagnostiqué comme étant allergique au mot effort. c'est Gaston Lagaffe.

    À force de vouloir considérer les utilisateurs comme des imbéciles patentés, on risque de se mettre dans le trouble.

    Excel n'a jamais été, n'est pas et ne sera jamais un SGBD, c'est pour cela que Excel s'appelle Excel et ne s'appelle pas Access junior.

  5. #5
    Membre du Club
    Homme Profil pro
    Enseignant
    Inscrit en
    mars 2017
    Messages
    76
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Enseignant
    Secteur : Enseignement

    Informations forums :
    Inscription : mars 2017
    Messages : 76
    Points : 54
    Points
    54

    Par défaut

    Merci pour ta réponse mais tout ça ne m'aide pas beaucoup, j'ai cherché partout sur le net mais n'ai pas trouvé ...
    Alors vu le peu de réponses que j'ai obtenues, ce que je croyais assez simple à réaliser ne semble pas aussi aisé.

    Je vais donc expliciter un peu ce que je souhaite, d'où je pars et où je voudrais arriver :
    • Je suis parti de rien ou presque il y a 9 mois, j'ai donc appris à coder en VB.NET (VB 2010 express) à partir du cours de Philippe Lasserre et d'aides nombreuses qui m'ont été fournies sur ce forum. Je ne suis donc plus tout à fait un novice mais j'ai bien conscience qu'il me manque encore plein de chose. C'est en faisant qu'on apprend ...
    • J'ai donc créé une appli en VB.NET (en VB 2100 express) qui gère une BDD SQL server 2008 R2 avec plusieurs tables.
    • J'ai déjà réussi dernièrement à faire des exports d'une DataGridView vers Excel et Pdf (en utilisant iTextSharp) avec de l'aide trouvée sur ce forum.
    • Aujourd'hui je voudrais faire le lien entre une DataGridView contenant un fichier de contacts et une lettre-type dans Word en faisant glisser les coordonnées du contact (Nom, adresse) sélectionné dans la DataGridView dans des champs prévus à cet effet dans le document Word. Il y a plein d'exemples sur différents forums pour les export Excel ou Pdf mais pas pour Word.


    Donc voilà ce que je voudrais faire dans l'ordre :
    • Afficher la liste des contacts dans une DataGridView (ça c'est déjà fait)
    • Cliquer sur l'un des contacts pour le sélectionner
    • Cliquer sur un objet (bouton par exemple) qui ouvre une boîte de dialogue me permettant de choisir la lettre-type que je souhaite et ouvrir le document Word (ça c'est fait)
    • Cliquer sur un autre objet (bouton) pour faire glisser les données Nom et adresse de la ligne sélectionnée dans la DataGridView dans les champs prévus à cet effet dans le document Word. (c'est ça qu'il reste à faire)


    D'où mes questions :
    • Que dois-je importer au début de mon projet (par exemple pour Excel : Imports Excel = Microsoft.Office.Interop.Excel) ?
    • Comment saisir les champs appropriés dans le document word ?
    • Comment faire glisser les données requises de la DatagridView vers les champs du document Word ?

    Je ne cherche pas un code tout fait mais comprendre comment faire avec quelques exemples de code qui me permettent de comprendre la logique
    Encore merci à tous ceux qui prendront le temps de me répondre

  6. #6
    Expert éminent

    Homme Profil pro
    Développeur .NET
    Inscrit en
    janvier 2012
    Messages
    3 863
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : Canada

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

    Informations forums :
    Inscription : janvier 2012
    Messages : 3 863
    Points : 7 892
    Points
    7 892
    Billets dans le blog
    18

    Par défaut

    Bonjour

    Citation Envoyé par Feliperennes Voir le message
    Merci pour ta réponse mais tout ça ne m'aide pas beaucoup, j'ai cherché partout sur le net mais n'ai pas trouvé ...[*]Aujourd'hui je voudrais faire le lien entre une DataGridView contenant un fichier de contacts et une lettre-type dans Word en faisant glisser les coordonnées du contact (Nom, adresse) sélectionné dans la DataGridView dans des champs prévus à cet effet dans le document Word. Il y a plein d'exemples sur différents forums pour les export Excel ou Pdf mais pas pour Word.
    [*]Cliquer sur un autre objet (bouton) pour faire glisser les données Nom et adresse de la ligne sélectionnée dans la DataGridView dans les champs prévus à cet effet dans le document Word. (c'est ça qu'il reste à faire)

    Le plus simple c'est probablement ce que je t'ai déjà dit. Tu mets manuellement des signets dans ton modèle et tu boucles les bonnes colonnes de la bonne ligne de ton DGV pour remplacer tes signets. Tant que tu n'enregistres pas ton modèle en modèle à partir de VB.net, tu ne perds pas tes champs


    Que dois-je importer au début de mon projet (par exemple pour Excel : Imports Excel = Microsoft.Office.Interop.Excel) ?
    Au moins Microsoft.office.interop.word

    [*]Comment saisir les champs appropriés dans le document word ?
    Le plus simple c'est de mettre tes signets manuellement dans tes modèles. Cela peut aussi se faire par VBA, mais cela va être l'enfer, juste pour atteindre l'endroit où tu vas vouloir mettre chaque signet.

    [*]Comment faire glisser les données requises de la DatagridView vers les champs du document Word ?
    Cela resterait à prouver, mais je doute que tu puisses faire du glisser-déposer entre VB.net et Word.

    Donc c'est là que le fun commence.

    -Soit que tu connais les noms exacts de tes champs et tu as besoin d'une seule boucle qui prend les valeurs de ton DGV et les mets à la place des res signets.

    -Soit que tu te crées un système pour faire correspondre tes colonnes de DGV et tes noms de signets. Cela te prend au moins deux boucles imbriquées. Une boucle pour les valeurs de ton DGV et une boucle sur la collection bookmarks de ton document Word avec un subtil système de comparaison de noms et d'affectations en conséquence

    Puisque tu dis avoir piloté Excel à partir de VB.net, tu peux t'inspirer de ces "équivalences"

    L'objet Workbook d'Excel est approximativement un objet Document dans Word. Même adaptation pour Workbooks, activeworkbook et thisworkbook

    Ceci dit les objets Selection et Range de Word, s'appliquent à du texte et pas à des cellules.
    À ma connaissance, le seul personnage qui a été diagnostiqué comme étant allergique au mot effort. c'est Gaston Lagaffe.

    À force de vouloir considérer les utilisateurs comme des imbéciles patentés, on risque de se mettre dans le trouble.

    Excel n'a jamais été, n'est pas et ne sera jamais un SGBD, c'est pour cela que Excel s'appelle Excel et ne s'appelle pas Access junior.

  7. #7
    Membre du Club
    Homme Profil pro
    Enseignant
    Inscrit en
    mars 2017
    Messages
    76
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Enseignant
    Secteur : Enseignement

    Informations forums :
    Inscription : mars 2017
    Messages : 76
    Points : 54
    Points
    54

    Par défaut

    Merci de me consacrer un peu de ton temps, je rame à mort !

    On va essayer d'y aller par étape :

    Citation Envoyé par clementmarcotte Voir le message
    Bonjour
    Le plus simple c'est de mettre tes signets manuellement dans tes modèles.
    Ca je viens de le faire.

    Soit que tu connais les noms exacts de tes champs et tu as besoin d'une seule boucle qui prend les valeurs de ton DGV et les mets à la place des res signets
    Oui je connais exactement les noms des champs.
    Faire la boucle ça je sais faire.
    Comment mettre les valeurs issues des champs de la DGV à la place des signets ?

    Voilà où j'en suis dans mon code :
    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
     
    Private Sub Button_Click(sender As System.Object, e As System.EventArgs) Handles Button.Click
            'Les noms des variables sont les mêmes que les noms des signets dans Word        
            Dim Nom As String
            Dim Prénom As String
            Dim Adresse As String
            Dim CodePostal As String
            Dim Commune As String
            Nom = DataGridView1("Nom_DGV1", NumLigneDataGridView1).Value
            Prénom = DataGridView1("PrénomNom_DGV1", NumLigneDataGridView1).Value
            Adresse = DataGridView1("Adresse_DGV1", NumLigneDataGridView1).Value
            CodePostal = DataGridView1("CodePostal_DGV1", NumLigneDataGridView1).Value
            Commune = DataGridView1("Commune_DGV1", NumLigneDataGridView1).Value
     
            OpenFileDialog1.InitialDirectory = "C:\Users\Documents"
            OpenFileDialog1.Filter = "Word Documents|*.doc;*.docx"
            OpenFileDialog1.Title = "OUVRIR un document type."
            OpenFileDialog1.FileName = ""
            If OpenFileDialog1.ShowDialog() = DialogResult.OK Then 'si l'utilisateur a bien cliqué sur ok
                Dim WordApp As Word.Application
                WordApp = (CreateObject("Word.Application"))
                Dim WordDoc As Word.Document
                WordDoc = WordApp.Documents.Open(OpenFileDialog1.FileName)
                WordApp.Visible = True
            End If
     
     
     
        End Sub

  8. #8
    Expert éminent

    Homme Profil pro
    Développeur .NET
    Inscrit en
    janvier 2012
    Messages
    3 863
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : Canada

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

    Informations forums :
    Inscription : janvier 2012
    Messages : 3 863
    Points : 7 892
    Points
    7 892
    Billets dans le blog
    18

    Par défaut

    Bonjour,

    Cet exemple-là :

    https://msdn.microsoft.com/fr-fr/lib...v=vs.110).aspx

    Ces pages-là qui devraient aussi être dans ton aide locale


    https://msdn.microsoft.com/fr-fr/lib...v=vs.110).aspx

    https://msdn.microsoft.com/fr-fr/lib...v=vs.110).aspx

    https://msdn.microsoft.com/fr-fr/lib...v=vs.110).aspx

    https://msdn.microsoft.com/fr-fr/vba...ks-object-word


    Tu peux quand même t'inspirer de cela, quitte à l'exécuter au pas-à-pas en observant ce qui se passe dans ton document, quitte à te faire un petit projet à part. Parce que je déteste Create Object, tu as besoin d'une référence soit avec Microsoft.Office.Interop.Word.dll, soit directement avec Winword.exe

    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
     
    Sub SignetSurbrillant()
               Dim WordApp As Microsoft.Office.Interop.Word.Application = New Microsoft.Office.Interop.Word.Application
            WordApp.Visible = False
            Dim WordDoc As Microsoft.Office.Interop.Word.Document = WordApp.Documents.Open("C:\Copie\SignetAvecVBNet.docx")
            WordDoc.Bookmarks.Item("Texte1").Select()
            WordDoc.Bookmarks.Item("Texte1").Range.Text = "essai de ma phrase"
            Dim arange As Microsoft.Office.Interop.Word.Range = WordDoc.Range(Start:=WordDoc.Bookmarks("Texte1").Range.Start,
                                                                                       End:=WordDoc.Bookmarks("Texte1").Range.End)
            arange.Expand(Unit:=3)
            arange.HighlightColorIndex = 7
            WordApp.Visible = True
            WordDoc = Nothing
     
        End Sub
    À ma connaissance, le seul personnage qui a été diagnostiqué comme étant allergique au mot effort. c'est Gaston Lagaffe.

    À force de vouloir considérer les utilisateurs comme des imbéciles patentés, on risque de se mettre dans le trouble.

    Excel n'a jamais été, n'est pas et ne sera jamais un SGBD, c'est pour cela que Excel s'appelle Excel et ne s'appelle pas Access junior.

  9. #9
    Membre du Club
    Homme Profil pro
    Enseignant
    Inscrit en
    mars 2017
    Messages
    76
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Enseignant
    Secteur : Enseignement

    Informations forums :
    Inscription : mars 2017
    Messages : 76
    Points : 54
    Points
    54

    Par défaut

    Bonjour et merci encore pour ton aide,

    J'ai donc suivi tes conseils et à mon avis on est plus très loin d'aboutir.
    Voilà mon code modifié à partir de tes conseils :
    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
     
    Private Sub Button_Click(sender As System.Object, e As System.EventArgs) Handles Button.Click
            'Les noms des variables sont les mêmes que les noms des signets dans Word        
            Dim Nom As String
            Dim Prenom As String
            Dim Adresse As String
            Dim CodePostal As String
            Dim Commune As String
            Nom = DataGridView1("Nom_DGV1", NumLigneDataGridView1).Value
            Prénom = DataGridView1("PrenomNom_DGV1", NumLigneDataGridView1).Value
            Adresse = DataGridView1("Adresse_DGV1", NumLigneDataGridView1).Value
            CodePostal = DataGridView1("CodePostal_DGV1", NumLigneDataGridView1).Value
            Commune = DataGridView1("Commune_DGV1", NumLigneDataGridView1).Value
     
            OpenFileDialog1.InitialDirectory = "C:\Users\Documents"
            OpenFileDialog1.Filter = "Word Documents|*.doc;*.docx"
            OpenFileDialog1.Title = "OUVRIR un document type."
            OpenFileDialog1.FileName = ""
            If OpenFileDialog1.ShowDialog() = DialogResult.OK Then 'si l'utilisateur a bien cliqué sur ok
                Dim WordApp As Microsoft.Office.Interop.Word.Application = New Microsoft.Office.Interop.Word.Application
                WordApp.Visible = False
                Dim WordDoc As Microsoft.Office.Interop.Word.Document = WordApp.Documents.Open(OpenFileDialog1.FileName)
                'WordApp.Visible = True
                WordDoc.Bookmarks.Item("Nom").Select()
                WordDoc.Bookmarks.Item("Nom").Range.Text = Nom
                WordDoc.Bookmarks.Item("Prenom").Select()
                WordDoc.Bookmarks.Item("Prenom").Range.Text = Prenom
                WordDoc.Bookmarks.Item("Adresse").Select()
                WordDoc.Bookmarks.Item("Adresse").Range.Text = Adresse
                WordDoc.Bookmarks.Item("CodePostal").Select()
                WordDoc.Bookmarks.Item("CodePostal").Range.Text = CodePostal
                WordDoc.Bookmarks.Item("Commune").Select()
                WordDoc.Bookmarks.Item("Commune").Range.Text = Commune
                Dim arange As Microsoft.Office.Interop.Word.Range = WordDoc.Range(Start:=WordDoc.Bookmarks("Nom").Range.Start,
                                                                                           End:=WordDoc.Bookmarks("Commune").Range.End)
                arange.Expand(Unit:=3)
                arange.HighlightColorIndex = 7
                WordApp.Visible = True
                WordDoc = Nothing
            End If
         End Sub
    J'ai un plantage au niveau de cette ligne :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    Dim arange As Microsoft.Office.Interop.Word.Range = WordDoc.Range(Start:=WordDoc.Bookmarks("Nom").Range.Start,
                                                                                           End:=WordDoc.Bookmarks("Commune").Range.End)
    Nom : Capture d'écran 2017-11-07 09.44.50.png
Affichages : 34
Taille : 20,2 KoNom : Capture d'écran 2017-11-07 13.26.33.png
Affichages : 33
Taille : 7,2 Ko

    Par la suite quand j'ouvre "manuellement" mon document Word je constate que les signets ont bien été remplacés par les données issues de la DataGridView. Donc le transfert est bien fait.
    Quelle erreur ai-je commise dans le code pour générer cette exception ?

    Si par contre je supprime ces 3 lignes, ça fonctionne :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    Dim arange As Microsoft.Office.Interop.Word.Range = WordDoc.Range(Start:=WordDoc.Bookmarks("Nom").Range.Start,
                                                                                           End:=WordDoc.Bookmarks("Commune").Range.End)
                arange.Expand(Unit:=3)
                arange.HighlightColorIndex = 7

  10. #10
    Expert éminent

    Homme Profil pro
    Développeur .NET
    Inscrit en
    janvier 2012
    Messages
    3 863
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : Canada

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

    Informations forums :
    Inscription : janvier 2012
    Messages : 3 863
    Points : 7 892
    Points
    7 892
    Billets dans le blog
    18

    Par défaut

    Tu dois faire tes signets un par un.
    À ma connaissance, le seul personnage qui a été diagnostiqué comme étant allergique au mot effort. c'est Gaston Lagaffe.

    À force de vouloir considérer les utilisateurs comme des imbéciles patentés, on risque de se mettre dans le trouble.

    Excel n'a jamais été, n'est pas et ne sera jamais un SGBD, c'est pour cela que Excel s'appelle Excel et ne s'appelle pas Access junior.

  11. #11
    Membre du Club
    Homme Profil pro
    Enseignant
    Inscrit en
    mars 2017
    Messages
    76
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Enseignant
    Secteur : Enseignement

    Informations forums :
    Inscription : mars 2017
    Messages : 76
    Points : 54
    Points
    54

    Par défaut

    Merci encore,

    Quel est l'intérêt de ces trois lignes ? Car ça fonctionne parfaitement sans elles ...
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    Dim arange As Microsoft.Office.Interop.Word.Range = WordDoc.Range(Start:=WordDoc.Bookmarks("Nom").Range.Start,
                                                                                           End:=WordDoc.Bookmarks("Commune").Range.End)
    arange.Expand(Unit:=3)
    arange.HighlightColorIndex = 7
    Autre question : Y-a-t-il un moyen de changer le nom du document en fin de sub de manière à ce qu'accidentellement on enregistre pas la version créée avec les données en écrasant la version contenant les signets ?

  12. #12
    Expert éminent

    Homme Profil pro
    Développeur .NET
    Inscrit en
    janvier 2012
    Messages
    3 863
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : Canada

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

    Informations forums :
    Inscription : janvier 2012
    Messages : 3 863
    Points : 7 892
    Points
    7 892
    Billets dans le blog
    18

    Par défaut

    Bonjour,

    Citation Envoyé par Feliperennes Voir le message
    Quel est l'intérêt de ces trois lignes ? Car ça fonctionne parfaitement sans elles ...
    J'en avais besoin pour la surbrillance. Cela donne la longueur du texte.


    Autre question : Y-a-t-il un moyen de changer le nom du document en fin de sub de manière à ce qu'accidentellement on enregistre pas la version créée avec les données en écrasant la version contenant les signets ?
    Dans VBA Word SaveAS ou SaveAS2 pour un document Word en format Word. ExportAsFixedFormat pour passer de Word à PDF. Tu enregistres une macro dans Word et tu la reprends dans VB.net. Cela va prendre quelques ajustements mineurs, mais cela donne un canevas.
    À ma connaissance, le seul personnage qui a été diagnostiqué comme étant allergique au mot effort. c'est Gaston Lagaffe.

    À force de vouloir considérer les utilisateurs comme des imbéciles patentés, on risque de se mettre dans le trouble.

    Excel n'a jamais été, n'est pas et ne sera jamais un SGBD, c'est pour cela que Excel s'appelle Excel et ne s'appelle pas Access junior.

  13. #13
    Membre du Club
    Homme Profil pro
    Enseignant
    Inscrit en
    mars 2017
    Messages
    76
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Enseignant
    Secteur : Enseignement

    Informations forums :
    Inscription : mars 2017
    Messages : 76
    Points : 54
    Points
    54

    Par défaut

    Merci pour tout clementmarcotte, ton aide a été très précieuse.

    J'ai terminé ce travail et j'ai réalisé ce que je voulais

  14. #14
    Membre du Club
    Homme Profil pro
    Enseignant
    Inscrit en
    mars 2017
    Messages
    76
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Enseignant
    Secteur : Enseignement

    Informations forums :
    Inscription : mars 2017
    Messages : 76
    Points : 54
    Points
    54

    Par défaut

    Bonjour clementmarcotte,
    J'ai découvert un bogue dans mon appli :
    J'ai créé plusieurs documents différents avec des signets différents selon les besoins.
    Si dans la boîte de dialogue on se trompe de document en choisissant un document qui ne comporte pas les bons signets, ça génère naturellement une erreur que j'ai traité par un Try et une MessageBox pour informer l'utilisateur.
    Malheureusement le document sélectionné par erreur passe en lecture seule ce qui ne permet plus de l'utiliser, ça fait même planter l'appli parfois. Il n'y a pas d'autre moyen que de supprimer le fichier caché par le système d'exploitation et de redémarrer le PC pour résoudre le problème.
    Y-a-il un moyen d'empêcher ce passage en lecture seule dans le code si le Try trouve une erreur ?

    Merci !

  15. #15
    Expert éminent

    Homme Profil pro
    Développeur .NET
    Inscrit en
    janvier 2012
    Messages
    3 863
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : Canada

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

    Informations forums :
    Inscription : janvier 2012
    Messages : 3 863
    Points : 7 892
    Points
    7 892
    Billets dans le blog
    18

    Par défaut

    Bonjour
    Commence par faire fermer ton mauvais fichier par Word dans les règles de l'art, dans ton try. Ce genre d'histoire arrive quand un fichier n'est pas libéré par Word ou par Windows à la fermeture.
    À ma connaissance, le seul personnage qui a été diagnostiqué comme étant allergique au mot effort. c'est Gaston Lagaffe.

    À force de vouloir considérer les utilisateurs comme des imbéciles patentés, on risque de se mettre dans le trouble.

    Excel n'a jamais été, n'est pas et ne sera jamais un SGBD, c'est pour cela que Excel s'appelle Excel et ne s'appelle pas Access junior.

  16. #16
    Membre du Club
    Homme Profil pro
    Enseignant
    Inscrit en
    mars 2017
    Messages
    76
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Enseignant
    Secteur : Enseignement

    Informations forums :
    Inscription : mars 2017
    Messages : 76
    Points : 54
    Points
    54

    Par défaut

    Oui c'est bien ce que je pensais et ce que j'essaie de faire.
    le code suivant semble fonctionner :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    Catch ex As Exception
                    WordDoc.Close()
                    WordApp.Quit()
                    If MessageBox.Show("Le document sélectionné ne correspond pas au document requis", "Erreur de Document", MessageBoxButtons.OK, MessageBoxIcon.Error) = DialogResult.OK Then Exit Sub
                End Try
    Par ailleurs j'ai mis tous mes documents modèles en lecture seule et je les renomme dans le code, ce qui évite à un profane de bidouiller le modèle comportant les signets et de l'écraser

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    WordDoc.SaveAs2("Nouveau document ")
    Merci encore et bonne fin de WE

Discussions similaires

  1. Generer document word par rapport rdlc?
    Par Pingva dans le forum ASP.NET
    Réponses: 1
    Dernier message: 25/03/2009, 10h30
  2. Generer document word par rapport rdlc?
    Par Pingva dans le forum ASP
    Réponses: 0
    Dernier message: 12/03/2009, 12h05
  3. Envoi document Word par Outlook
    Par xcbilx dans le forum VBA Word
    Réponses: 1
    Dernier message: 17/10/2008, 22h13
  4. Réponses: 2
    Dernier message: 07/06/2006, 10h50
  5. Réponses: 11
    Dernier message: 26/04/2005, 10h23

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