1. #1
    Membre régulier
    Homme Profil pro
    Technicien maintenance
    Inscrit en
    avril 2013
    Messages
    121
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations professionnelles :
    Activité : Technicien maintenance
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : avril 2013
    Messages : 121
    Points : 77
    Points
    77

    Par défaut Comment Exporter une DGV dans Word?

    Bon soir tous le monde

    J'essai d'améliorer ma petite application concernant un parc auto. Tous fonctionne correctement jusqu'à présent. J'ai pris un document Word comme modèle pour faire un fiche technique avec l'entête de l'entreprise et son Logo, j'ai réussi à remplir les 'Signets' par des enregistrement correspondants de ma base donnée Via VB2012
    mais, j'ai échoué à exporter ma DGV (qui contient tous les interventions effectuées sur une véhicule sélectionné) à la suite de mon document. La question c'est un coup de pouce S.V.P. Merci

    Voici mon code ou je me suis arréter

    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
     
     
      Private Sub BtnImprime_Click(sender As Object, e As EventArgs) Handles BtnImprime.Click
     
             Dim MSW As New Microsoft.Office.Interop.Word.Application
            Dim MSD As New Microsoft.Office.Interop.Word.Document
            MSD = MSW.Documents.Open("D:\VehiDocs.Docx")
     
                MSD.Bookmarks.Item("Matricule").Range.Text = TxTMatricule.Text : MSD.Bookmarks.Item("Constructeur").Range.Text = TxTConstructeur.Text
                MSD.Bookmarks.Item("Modele").Range.Text = TxTModele.Text : MSD.Bookmarks.Item("Puissance").Range.Text = TxTPuissance.Text
                MSD.Bookmarks.Item("DateCirculation").Range.Text = TXTDateCirculation.Text : MSD.Bookmarks.Item("Energie").Range.Text = TxTEnergie.Text
                .
                .
                 PictureVeh = "D:\PhotosVeh\" & Me.TxTMatricule.Text & ".JPG"  'Chemin ou se trouve le fichier a charger     
                If My.Computer.FileSystem.FileExists(PictureVeh) Then 'Recherche l'existance d'un fichier
                    MSD.InlineShapes.AddPicture(FileName:="D:\PhotosVeh\" & Me.TxTMatricule.Text & ".JPG" , Range:=MSD.Bookmarks.Item("PhotoPers").Range, 
                     LinkToFile:=False, SaveWithDocument:=True)
                End If
     
                    MSD.PrintOut()   ' Impression directe du document sans l'afficher
                    MSD.Close() ' Fermeture du Document
                    MSW.Application.Quit() ' Fermeture de Word
                    MSW = Nothing ' Vider le Serveur RPC pour une Nouvelle Action sur un autre document sans quitter l'application

  2. #2
    Membre régulier
    Homme Profil pro
    Technicien maintenance
    Inscrit en
    avril 2013
    Messages
    121
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations professionnelles :
    Activité : Technicien maintenance
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : avril 2013
    Messages : 121
    Points : 77
    Points
    77

    Par défaut

    Merci pour tous qui sont passés même s'il n'y as pas de réponse jusqu'à présent. En bref, j'ai continué à cherché et je suis arrivé à cette solution qui est favorable, et voici le 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
    30
    31
    32
    33
    34
    35
    36
    37
    38
     Private Sub BtnImprime_Click(sender As Object, e As EventArgs) Handles BtnImprime.Click
     
             Dim MSW As New Microsoft.Office.Interop.Word.Application
            Dim MSD As New Microsoft.Office.Interop.Word.Document
            MSD = MSW.Documents.Open("D:\VehiDocs.Docx")
     
                MSD.Bookmarks.Item("Matricule").Range.Text = TxTMatricule.Text : MSD.Bookmarks.Item("Constructeur").Range.Text = TxTConstructeur.Text
                MSD.Bookmarks.Item("Modele").Range.Text = TxTModele.Text : MSD.Bookmarks.Item("Puissance").Range.Text = TxTPuissance.Text
                MSD.Bookmarks.Item("DateCirculation").Range.Text = TXTDateCirculation.Text : MSD.Bookmarks.Item("Energie").Range.Text = TxTEnergie.Text
                .
                .
                 PictureVeh = "D:\PhotosVeh\" & Me.TxTMatricule.Text & ".JPG"  'Chemin ou se trouve le fichier a charger     
                If My.Computer.FileSystem.FileExists(PictureVeh) Then 'Recherche l'existance d'un fichier
                    MSD.InlineShapes.AddPicture(FileName:="D:\PhotosVeh\" & Me.TxTMatricule.Text & ".JPG" , Range:=MSD.Bookmarks.Item("PhotoPers").Range, 
                     LinkToFile:=False, SaveWithDocument:=True)
                End If
     
               Dim notables As Microsoft.Office.Interop.Word.Table
                notables = MSD.Tables.Add(MSD.Bookmarks.Item("DGVListe").Range, Dt.Rows.Count + 1, Dt.Columns.Count)
                For c = 0 To Dt.Columns.Count - 1
                    notables.Cell(1, c + 1).Range.Text = Dt.Columns(c).ToString
                Next
                For r = 0 To Dt.Rows.Count - 1
                    For c = 0 To Dt.Columns.Count - 1
                        notables.Cell(r + 2, c + 1).Range.Text = Dt.Rows(r).Item(c).ToString
                    Next
                Next
                notables.Borders.InsideLineStyle = Microsoft.Office.Interop.Word.WdLineStyle.wdLineStyleDashDotDot
                notables.Borders.OutsideLineStyle = Microsoft.Office.Interop.Word.WdLineStyle.wdLineStyleDashDotDot
                'notables.Borders.OutsideLineStyle = Microsoft.Office.Interop.Word.WdLineStyle.wdLineStyleSingle
                GC.Collect()
                GC.WaitForFullGCComplete()
     
     
                    MSD.PrintOut()   ' Impression directe du document sans l'afficher
                    MSD.Close() ' Fermeture du Document
                    MSW.Application.Quit() ' Fermeture de Word
                    MSW = Nothing ' Vider le Serveur RPC pour une Nouvelle Action sur un autre document sans quitter l'application
    mais ça reste un petit problème, lignes 18 à 32, c'est que l'entête qui est exporté vers le document comporte le nom des champs de ma table dans la base, et n'est ce qui affiché dans la forme.

  3. #3
    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,


    mais ça reste un petit problème, lignes 18 à 32, c'est que l'entête qui est exporté vers le document comporte le nom des champs de ma table dans la base, et n'est ce qui affiché dans la forme.
    Je ne comprends pas vraiment ce que tu veux dire. On dirait qu'il y a des fautes de frappe.

    Ceci dit, tu peux toujours exécuter au pas-à-pas en vérifiant ce qui se passe dans le document Word.

    Et il me semble que cette technique de publipostage, pourrait être une solution de rechange, en cas de besoin.
    À 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.

  4. #4
    Membre régulier
    Homme Profil pro
    Technicien maintenance
    Inscrit en
    avril 2013
    Messages
    121
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations professionnelles :
    Activité : Technicien maintenance
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : avril 2013
    Messages : 121
    Points : 77
    Points
    77

    Par défaut

    Merci clementmarcotte

    Je viens juste d'ouvrir mon PC et j'ai reçu ta question:

    " Je ne comprends pas vraiment ce que tu veux dire. On dirait qu'il y a des fautes de frappe.

    Ceci dit, tu peux toujours exécuter au pas-à-pas en vérifiant ce qui se passe dans le document Word.

    Et il me semble que cette technique de publipostage, pourrait être une solution de rechange, en cas de besoin. "

    Ce n'est pas de la publipostage que je veux. Le publipostage est une autre chose. Les champs de ma table TSuivieVeh sont :
    Matricule comme clé primaire Indexé, Constructeur, Modele, Puissance, ID_Conducteur, ...

    J'ai un parc contenant plus de 1100 Véhicules (Voitures, Camions, Engin Lourd, Bus pour le personnels, Élévateurs,... ) en bref, plusieurs catégories. Tous sont répertoriés dans une base de donnée. Je cherche un moyen simple et beau pour imprimer une fiche de suivie d'une véhicule quelconque tous en gardant une copie de cette fiche au serveur comme historique. Le nom de ce document comporte "Matricule+Date+Time.DOCX" et tout cela se fait automatiquement.

    Jusque là tout se passe à merveille sauf que les infos dans le dataGrid qui me causent un peu dérangement (c-à-d le Header qui s'imprime dans le Document n'est pas le même qui est afficher sur l'écran, c'est le nom des champs sélectionnées qui s'impriment et pas l'entête du DataGrid).

    Dieu merci j'ai enfin trouver une solution, et voici mon code pour ceux qui s’intéressent:

    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
    
     Private Sub BtnImprime_Click(sender As Object, e As EventArgs) Handles BtnImprime.Click
     
             Dim MSW As New Microsoft.Office.Interop.Word.Application
            Dim MSD As New Microsoft.Office.Interop.Word.Document
            MSD = MSW.Documents.Open("D:\VehiDocs.Docx")
     
                MSD.Bookmarks.Item("Matricule").Range.Text = TxTMatricule.Text : MSD.Bookmarks.Item("Constructeur").Range.Text = TxTConstructeur.Text
                MSD.Bookmarks.Item("Modele").Range.Text = TxTModele.Text : MSD.Bookmarks.Item("Puissance").Range.Text = TxTPuissance.Text
                MSD.Bookmarks.Item("DateCirculation").Range.Text = TXTDateCirculation.Text : MSD.Bookmarks.Item("Energie").Range.Text = TxTEnergie.Text
                .
                .
                 PictureVeh = "D:\PhotosVeh\" & Me.TxTMatricule.Text & ".JPG"  'Chemin ou se trouve le fichier a charger (L'image du véhicule)   
                If My.Computer.FileSystem.FileExists(PictureVeh) Then 'Recherche l'existance d'un fichier
                    MSD.InlineShapes.AddPicture(FileName:="D:\PhotosVeh\" & Me.TxTMatricule.Text & ".JPG" , Range:=MSD.Bookmarks.Item("PhotoPers").Range, 
                     LinkToFile:=False, SaveWithDocument:=True)
                End If
     
               Dim notables As Microsoft.Office.Interop.Word.Table
                notables = MSD.Tables.Add(MSD.Bookmarks.Item("DGVListe").Range, Dt.Rows.Count + 1, Dt.Columns.Count)
    
                notables.Cell(1, 1).Range.Text = "Matricule"           'Ce qui est afficher à l'écran
                notables.Cell(1, 2).Range.Text = "Contructeur"
                notables.Cell(1, 3).Range.Text = "Modèle"
                ect...                                                                    'La suite des colonnes à imprimer
    
                For c = 0 To Dt.Columns.Count - 1
                    notables.Cell(1, c + 1).Range.Text = Dt.Columns(c).ToString
                Next
                For r = 0 To Dt.Rows.Count - 1
                    For c = 0 To Dt.Columns.Count - 1
               
                          notables.Cell(r + 2, c + 1).Column.AutoFit()
    
                           notables.Cell(r + 2, c + 1).Range.Text = Dt.Rows(r).Item(c).ToString
                    Next
                Next
                notables.Borders.InsideLineStyle = Microsoft.Office.Interop.Word.WdLineStyle.wdLineStyleDashDotDot
                notables.Borders.OutsideLineStyle = Microsoft.Office.Interop.Word.WdLineStyle.wdLineStyleDashDotDot
                GC.Collect()
                GC.WaitForFullGCComplete()
     
     
                    MSD.PrintOut()   ' Impression directe du document sans l'afficher
                    MSD.Close() ' Fermeture du Document
                    MSW.Application.Quit() ' Fermeture de Word
                    MSW = Nothing ' Vider le Serveur RPC pour une Nouvelle Action sur un autre document sans quitter l'application
    J'espère que tous ça est lisible et merci pour tous le monde.

  5. #5
    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 JetLibre Voir le message
    Merci clementmarcotte:Ce n'est pas de la publipostage que je veux. Le publipostage est une autre chose. .
    Le publipostage dans Word, c'est de prendre des informations quelconques dans une base de données et les afficher dans un document Word. Cela peut être n'importe quel type de document et pas juste une lettre.

    Même que si tu regardes les champs dans Word, tu vas voir que tu peux insérer toi-même, sans passer par le publipostage, des champs de bases de données.

    La méthode que je t'ai indiquée te permet de récupérer, à la limite, tous tes véhicules, ou même un seul, et de récupérer tous les travaux et d'imprimer ta fiche. Ce n'est pas du courrier, mais cela fait pareil.

    Que tu le fasses de la manière que tu veux, je m'en sacre.

    P.S. J'ai commencé à travailler avec Word 6, il y a plus de 20 ans. Je sais très bien à quoi peut servir le Publipostage de Word.
    P.P.S. Avec VB.net, on peut même créer des documents Word sans avoir Word. Cherche docx dans in moteur de recherche.
    À 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.

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

Discussions similaires

  1. Comment exporter une fonction dans un package BPL ?
    Par pepito62 dans le forum C++Builder
    Réponses: 3
    Dernier message: 13/02/2017, 10h47
  2. Réponses: 1
    Dernier message: 29/07/2008, 23h40
  3. Réponses: 4
    Dernier message: 25/05/2007, 14h10
  4. Réponses: 1
    Dernier message: 24/04/2007, 18h20
  5. Réponses: 3
    Dernier message: 24/03/2006, 11h20

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