Création des fiches.doc à partir d'un tableau Excel

hanendaly Messages postés 1 Date d'inscription lundi 3 février 2014 Statut Membre Dernière intervention 16 avril 2014 - 16 avril 2014 à 01:49
ucfoutu Messages postés 18038 Date d'inscription lundi 7 décembre 2009 Statut Modérateur Dernière intervention 11 avril 2018 - 17 avril 2014 à 22:11
Bonjour
Je veux créer une application qui sert à remplir des fiches word à partir d'un tableau Excel , le principe est de copier le contenue de chaque ligne Excel et le coller dans un petit tableau dans une fiche word et enregistrer le doc .
L'application se plante à un avancement qui n'est pas toujours le même et m'affiche le message d'erreur suivant : Cette méthode ou propriété n'est pas disponible car le Presse-papiers est vide ou non valide
J'utilise le Microsoft Visual Basic 2010 Express, En fait Je suis débutante en programmation VB ( c'est mon premier programme donc veuillez m'excuser pour les bêtises ) j'ai besoin de votre aide , Merci d'avance :) .


Imports Word = Microsoft.Office.Interop.Word
Imports Excel = Microsoft.Office.Interop.Excel
Imports wind = Microsoft.Win32.TimerElapsedEventArgs
Imports Microsoft.Office.Interop.Word

Public Class Form1
    
    Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
        Dim oWord As Word.Application
        Dim oDoc As Word.Document
        Dim oTable As Word.Table


        Dim ExcelApp As Object
        Dim ExcelBook As Object
        Dim ExcelSheet As Object
        Dim j As Integer
        Dim i As Integer
        Dim l As Byte
        Dim str As String

        'Start Word and open the document template.

        ExcelApp = CreateObject("Excel.Application")
        ExcelApp.visible = False

        ExcelBook = ExcelApp.workbooks.add("C:\Users\hanen\Documents\Visual Studio 2010\Projects\TRIADE-word\TRIADE w-e\mot de passe.xls")
        ExcelSheet = ExcelBook.WorkSheets(1)
        j = ExcelSheet.UsedRange.Cells.count
        i = ExcelSheet.UsedRange.Rows.count()


        l = 2
        Do
            str = ExcelSheet.cells(l, 5).value
            My.Computer.FileSystem.CreateDirectory("\" & str)
            str = ""
            oWord = CreateObject("Word.Application")
            oWord.Visible = False
            oDoc = oWord.Documents.Add("C:\Users\hanen\Documents\Visual Studio 2010\Projects\TRIADE-word\TRIADE w-e\Fiches_Parent.dot")
            oTable = oDoc.Tables.Add(oDoc.Bookmarks.Item("\endofdoc").Range, 4, 2)
            oTable.Rows.Alignment = Word.WdRowAlignment.wdAlignRowCenter
            oTable.Borders.Enable = 1
            oTable.Shading.BackgroundPatternColorIndex = Word.WdColorIndex.wdWhite
            oTable.Cell(1, 1).Range.Text = "Nom de l'élève"
            oTable.Cell(2, 1).Range.Text = "Prénom de l'élève"
            oTable.Cell(3, 1).Range.Text = "Mot de passe parents"
            oTable.Cell(4, 1).Range.Text = "Mot de passe élèves"
            oTable.Cell(1, 2).Range.Text = ""
            oTable.Cell(2, 2).Range.Text = ""
            oTable.Cell(3, 2).Range.Text = ""
            oTable.Cell(4, 2).Range.Text = ""
            


            Clipboard.SetDataObject(Text, True)
            Clipboard.GetData(ExcelSheet.cells(l, 1).Copy.ToString())
            Threading.Thread.Sleep(1000)
            oTable.Cell(1, 2).Range.Paste()


            Threading.Thread.Sleep(1000)

            Clipboard.SetDataObject(Text, True)
            Clipboard.GetData(ExcelSheet.cells(l, 2).Copy.ToString())
            Threading.Thread.Sleep(1000)
            oTable.Cell(2, 2).Range.Paste()


            Threading.Thread.Sleep(1000)
            Clipboard.Clear()
            Clipboard.SetDataObject(Text, True)
            Clipboard.GetData(ExcelSheet.cells(l, 3).Copy.ToString())
            Threading.Thread.Sleep(1000)
            oTable.Cell(3, 2).Range.Paste()


            Threading.Thread.Sleep(1000)
            Clipboard.SetDataObject(Text, True)
            Clipboard.Clear()
            Clipboard.GetData(ExcelSheet.cells(l, 4).Copy.ToString())
            Threading.Thread.Sleep(1000)
            oTable.Cell(4, 2).Range.Paste()

            Clipboard.SetDataObject(Text, True)
            Threading.Thread.Sleep(1000)
            Clipboard.SetDataObject(Text, True)
            Clipboard.Clear()

            For Each oRows In oTable.Range.Cells
                oTable.Range.ParagraphFormat.SpaceAfter = 0
                oRows.Range.Font.Bold = True
                oRows.Range.Font.Italic = True
                oRows.Width = 180
            Next oRows
            ExcelSheet.cells(l, 4).Copy.ToString()
            str = str & ExcelSheet.cells(l, 4).ToString & ExcelSheet.cells(l, 2).ToString()
            oDoc.SaveAs2("\" & ExcelSheet.cells(l, 5).value & "\" & ExcelSheet.cells(l, 1).value & "-" & ExcelSheet.cells(l, 2).value & ".doc")
            oDoc.Close()
            oWord = Nothing
            l = l + 1
        Loop While l <= i
        Me.Close()

    End Sub


End Class

2 réponses

NHenry Messages postés 15113 Date d'inscription vendredi 14 mars 2003 Statut Modérateur Dernière intervention 22 avril 2024 159
17 avril 2014 à 19:54
Bonsoir,

Comme tu n'indiques pas où se trouve l'erreur, je vais donc juste essayer de comprendre que que tu as voulu faire avec :
ExcelSheet.cells(l, 4).Copy.ToString()
et
str = str & ExcelSheet.cells(l, 4).ToString & ExcelSheet.cells(l, 2).ToString()

Surtout que tu ne sembles pas utiliser str par la suite.
0
ucfoutu Messages postés 18038 Date d'inscription lundi 7 décembre 2009 Statut Modérateur Dernière intervention 11 avril 2018 211
17 avril 2014 à 21:43
Bonjour,
Pour NHenry : il l'utilise (str) en boucle pour y créer (en boucle) des dossiers/répertoires.
A cette ligne :
 My.Computer.FileSystem.CreateDirectory("\" & str)
qui me parait personnellement assez étrange (VB.Net , que je ne connais pas, comprendrait-il c e qu'est un tel chemin ?)

0
NHenry Messages postés 15113 Date d'inscription vendredi 14 mars 2003 Statut Modérateur Dernière intervention 22 avril 2024 159
17 avril 2014 à 22:04
Enfin, reste que le
.Copy.ToString()
Me semble tout de même incohérent.
0
ucfoutu Messages postés 18038 Date d'inscription lundi 7 décembre 2009 Statut Modérateur Dernière intervention 11 avril 2018 211
17 avril 2014 à 22:11
Oui. Et de toutes manières, passer par le presse-papier est également surprenant et s'écarte de l'esprit de pilotage.
0
Rejoignez-nous