cs_JMO
Messages postés1854Date d'inscriptionjeudi 23 mai 2002StatutMembreDernière intervention24 juin 2018
-
21 janv. 2016 à 20:05
Whismeril
Messages postés18797Date d'inscriptionmardi 11 mars 2003StatutContributeurDernière intervention 3 décembre 2023
-
23 janv. 2016 à 13:38
Bonsoir le forum,
Avec VB 2010 Express, je créé des fichiers de consignes (word docx) à partir de plusieurs templates.
' Création des fichiers de Consignes
Call CreateMOP(customer)
'#####################################################################################
'# Consignes : création des fichiers de Consignes
'#####################################################################################
Private Sub CreateMOP(ByVal customer As String)
richtextboxlogscript.AppendText(dt(currentdate) & "Création des fichiers de Consignes")
Call UpdateDataGridViewPDP(1, 2, Color.Cyan, New String(" "c, 2) & "En cours ( " & "1" & " / " & fileword.Count & " )", False)
' Déclaration des variables
Dim pathinfile As String = pathroot & customer & pathconsigne
Dim pathoutfile As String = pathroot & customer & pathsaveconsigne
Dim countwordfile As Integer = 0
For Each item In fileword ' fileword As New List(Of ListFileWord)
' Déclaration des variables
Dim WordApp As Word.Application = New Word.Application()
Dim WordDoc As New Word.Document
Dim infile As String = item.FileWord
Dim file As String = infile.Substring(infile.LastIndexOf("\") + 1)
Dim filetrame As String = item.FileTrame
Dim trame As String = filetrame.Substring(filetrame.LastIndexOf("\") + 1)
Dim startparam As Integer = 14
' Ouverture Application Word
WordApp.Visible = False
WordApp.DisplayAlerts = CType(False, Microsoft.Office.Interop.Word.WdAlertLevel)
WordApp.ScreenUpdating = False
' Ouverture du Template Trame de Consignes
WordDoc = WordApp.Documents.Open(CType(item.FileTrame, Object), , True, , , , , , , , , False)
System.Windows.Forms.Application.DoEvents()
' Mise à jour des champs CustomDocumentProperties du document Word
WordDoc.CustomDocumentProperties.Item(11) = item.Contract
WordDoc.CustomDocumentProperties.Item(12) = item.Codebien
WordDoc.CustomDocumentProperties.Item(13) = item.Category
For w As Integer = 0 To item.Parameters.Count - 1
WordDoc.CustomDocumentProperties.Item(startparam) = item.Parameters.Item(w)
On Error Resume Next
startparam += 1
Next
System.Windows.Forms.Application.DoEvents()
' Mise à jour des propriétés du document Word
WordDoc.Fields.Update()
System.Windows.Forms.Application.DoEvents()
WordDoc.Application.DisplayAlerts = Word.WdAlertLevel.wdAlertsNone
' Sauvegarde de la Consigne
WordDoc.SaveAs(FileName:=CType(item.FileWord, Object))
System.Windows.Forms.Application.DoEvents()
WordDoc.Close(SaveChanges:=False)
System.Windows.Forms.Application.DoEvents()
' Fermeture Word
WordApp.Application.DisplayAlerts = CType(True, Microsoft.Office.Interop.Word.WdAlertLevel)
WordApp.Application.ScreenUpdating = True
WordApp.Quit()
WordApp = Nothing
datagridviewfilescgn.Rows(countwordfile).Cells(3).Value = New String(" "c, 3) & "Consigne créée"
datagridviewfilescgn.Item(3, countwordfile).Style.BackColor = Color.Lime
Me.Refresh()
System.Windows.Forms.Application.DoEvents()
Thread.Sleep(3000) ' attente pour fermeture de Word
countwordfile += 1
Next
Call UpdateDataGridViewPDP(1, 2, Color.Lime, New String(" "c, 2) & "Terminé", False)
End Sub
L'appli est publiée sur un serveur distant (Londres), et de part plusieurs proxy, l'ouverture de Word prend environ 2-3' !!!
Dans un statustrip, j'ai plusieurs labels indiquant l'heure (HH:mm:ss) actuelle, la durée du script ...
Ces labels freezent à chaque création d'un fichier de consigne.
Question :
Est-il possible d'exécuter la sub "CreateMOP" dans un thread ?
21 janv. 2016 à 20:47
Merci pour tes liens indiqués.
Je vais potasser le composant BackgroundWorker.
Pour le call, oui il n'est pas indispensable, mais c'est ma nostalgie du vbs.
Cela permet de "voir" qu'on appelle une sub ou function.
Bonne soirée,
jean-marc