[Bug] Ouverture .docx, modification et sauvegarde .pdf
Bonjour à tous,
il y a quelques temps j'avais récup un code permettant de modifier un word déjà créer et de le sauvegarder en .pdf ... Bizarrement à la première utilisation cela à fonctionné mais après plus moyen de le faire fonctionner. Ca beug en permanence, une fois que j'appuie sur le bouton pour générer le document il charge, charge, charge, .. pour m'afficher un message d'erreur : "microsoft excel attend la fin de l'exécution d'une action ole d'une autre application" ..
J'ai un peut regardé sur internet, j'ai suivi une procédure microsoft pour corriger ce problème en cochant une option dans les paramètres de l'app. Puis j'ai mis un sleep dans mon code mais rien n'y fait. J'ai mis une condition qui test le chemin du fichier. C'est toujours le même problème et je ne voie pas d'ou sa peut venir d'autre ...
Donc si quelqu'un a la solution pour moi (qui ne suis pas un programmeur expert) je serais très reconnaissant
Voici mon code :
Private Sub CommandButton3_Click()
fichier = "C:\Users\damien\Desktop\Devis ProcalStone\Devis Spraystone.docx"
If Dir(fichier) <> "" Then
Dim WordApp As Word.Application
Dim WordDoc As Word.Document
Set WordApp = CreateObject("word.application")
Application.Wait Time + TimeSerial(0, 0, 5)
WordApp.Visible = False 'mettre False pour garder Word masqué
Set WordDoc = WordApp.Documents.Open("C:\Users\damien\Desktop\Devis ProcalStone\Devis Spraystone.docx") 'ouvre le document Word
'SET VARIABLES
'---------------------
nomClient = TextBox21.Value
adresseChantier = TextBox24.Value
telClient = TextBox22.Value
chantierSpraystone = TextBox11.Value
autresDemandes = TextBox13.Value
Isolation = TextBox12.Value
totalHTVA = TextBox16.Value
tva21 = TextBox17.Value
totalTVAC = TextBox18.Value
primeIsolation = TextBox19.Value
totalCout = TextBox23.Value
'Tableau 2
'WordDoc.Tables(2).Columns(1).Cells(2).Range.Text = fDate
'WordDoc.Tables(2).Columns(2).Cells(2).Range.Text = NFacture
'WordDoc.Tables(2).Columns(3).Cells(2).Range.Text = Shop
'Coordonnées
WordDoc.Tables(1).Columns(2).Cells(1).Range.Text = nomClient
WordDoc.Tables(1).Columns(2).Cells(2).Range.Text = adresseChantier
WordDoc.Tables(1).Columns(2).Cells(3).Range.Text = telClient
'Chantier Spraystone
' WordDoc.Tables(3).Columns(1).Cells(1).Range.Text = "Chantier Spraystone"
'WordDoc.Tables(3).Columns(2).Cells(1).Range.Text = "1"
'WordDoc.Tables(3).Columns(3).Cells(1).Range.Text = chantierSpraystone
'Autres demandes
' WordDoc.Tables(3).Columns(1).Cells(3).Range.Text = "Autres demandes"
'WordDoc.Tables(3).Columns(2).Cells(3).Range.Text = "1"
'WordDoc.Tables(3).Columns(3).Cells(3).Range.Text = autresDemandes
' Conversion du fichier en pdf
PdfPath = "C:\Users\damien\Desktop\Devis ProcalStone\"
PDFName = PdfPath + nomClient + ".pdf"
Const wdExportFormatPDF = 17
Const wdExportOptimizeForPrint = 0
Const wdExportAllDocument = 0
Const wdExportDocumentContent = 0
Const wdExportCreateNoBookmarks = 0
strDocPath = "C:\Users\damien\Desktop\Devis ProcalStone\Devis Spraystone.docx"
'strDocPDF = "C:\Users\Damien\Documents\Facturier\facture.pdf"
' strDocPDF = PDFName
Set WordDoc = WordApp.Documents.Open(strDocPath)
WordDoc.ExportAsFixedFormat "C:\Users\damien\Desktop\Devis ProcalStone\Devis\Devis " & nomClient & ".pdf", wdExportFormatPDF, True, wdExportOptimizeForPrint, wdExportAllDocument, 1, 1, wdExportDocumentContent, True, True, wdExportCreateNoBookmarks, True, True, False
WordDoc.Close True 'ferme le document Word en enregistrant les modifications
WordApp.Quit 'ferme l'application Word
Else
MsgBox "Fichier introuvable"
End If
Unload Me
End SubJe vous remercie d'avance.
Bonjour,
il semble que tu essaies d'ouvrir 2 fois le document word.
proposition de correction (non testé car pas de fichiers)
Private Sub CommandButton3_Click()
fichier = "C:\Users\damien\Desktop\Devis ProcalStone\Devis Spraystone.docx"
If Dir(fichier) <> "" Then
Dim WordApp As Word.Application
Dim WordDoc As Word.Document
Set WordApp = CreateObject("word.application")
Application.Wait Time + TimeSerial(0, 0, 5)
WordApp.Visible = False 'mettre False pour garder Word masqué
Set WordDoc = WordApp.Documents.Open(fichier) 'ouvre le document Word
'SET VARIABLES
'---------------------
nomClient = TextBox21.Value
adresseChantier = TextBox24.Value
telClient = TextBox22.Value
chantierSpraystone = TextBox11.Value
autresDemandes = TextBox13.Value
Isolation = TextBox12.Value
totalHTVA = TextBox16.Value
tva21 = TextBox17.Value
totalTVAC = TextBox18.Value
primeIsolation = TextBox19.Value
totalCout = TextBox23.Value
'Tableau 2
'WordDoc.Tables(2).Columns(1).Cells(2).Range.Text = fDate
'WordDoc.Tables(2).Columns(2).Cells(2).Range.Text = NFacture
'WordDoc.Tables(2).Columns(3).Cells(2).Range.Text = Shop
'Coordonnées
WordDoc.Tables(1).Columns(2).Cells(1).Range.Text = nomClient
WordDoc.Tables(1).Columns(2).Cells(2).Range.Text = adresseChantier
WordDoc.Tables(1).Columns(2).Cells(3).Range.Text = telClient
'Chantier Spraystone
' WordDoc.Tables(3).Columns(1).Cells(1).Range.Text = "Chantier Spraystone"
'WordDoc.Tables(3).Columns(2).Cells(1).Range.Text = "1"
'WordDoc.Tables(3).Columns(3).Cells(1).Range.Text = chantierSpraystone
'Autres demandes
' WordDoc.Tables(3).Columns(1).Cells(3).Range.Text = "Autres demandes"
'WordDoc.Tables(3).Columns(2).Cells(3).Range.Text = "1"
'WordDoc.Tables(3).Columns(3).Cells(3).Range.Text = autresDemandes
' Conversion du fichier en pdf
PdfPath = "C:\Users\damien\Desktop\Devis ProcalStone\"
PDFName = PdfPath + nomClient + ".pdf"
Const wdExportFormatPDF = 17
Const wdExportOptimizeForPrint = 0
Const wdExportAllDocument = 0
Const wdExportDocumentContent = 0
Const wdExportCreateNoBookmarks = 0
strDocPDF = PDFName
WordDoc.ExportAsFixedFormat PDFName, wdExportFormatPDF, True, wdExportOptimizeForPrint, wdExportAllDocument, 1, 1, wdExportDocumentContent, True, True, wdExportCreateNoBookmarks, True, True, False
WordDoc.Close True 'ferme le document Word en enregistrant les modifications
WordApp.Quit 'ferme l'application Word
Else
MsgBox "Fichier introuvable"
End If
Unload Me
End SubSalut
merci pour ta réponse, j'ai essayé mais toujours le même problème :/ C'est fou ca :/
Je peux te mettre en jointure mon fichier si tu veux, fais pas attention il y a quelques bugs, tout n'est pas encore terminé ^^
je te remercie d'avance.
Bonjour,
cela fonctionne sans problème chez moi avec les adaptations que j'ai proposées.
C'est bizarre moi ca fonctionne pas :/
Est ce que cela fonctionne toujours si tu le fait plusieurs fois ? J'ai l'impression que c'est un bug avec word qui serait peut être "mal ouvert" ou "mal fermé" dans la mémoire vive.
Bref je sais pas trop c'est vraiment enmerdant :/ Ca m'empeche d'avancer.
re-bonjour,
j'ai fait plusieurs essais, sans problème chez moi.
essaie d'exécuter la macro en mode pas à pas et regarde sur quelle instruction elle bloque.
J'ai mis des msgbox et il semblerait que c'est ici que ca coince
Set WordDoc = WordApp.Documents.Open(fichier) 'ouvre le document WordBonjour bhooo,
Quelques remarques en complément de la réponse de h2so4 :
Dans le code, il n'y a pas de gestion des erreurs. Si le code plante, l'instance WORD créée n'est pas fermée (par un .quit). Tu peux alors te retrouver avec autant d'instances WORD ouvertes que de fois ou tu exécutes ce codes (jusqu'à un redémarrage du poste). Tu peux t'assurer du phénomène en ouvrant le gestionnaire de tâches lors d'un plantage de l'appli.
Je propose donc d'ajouter le code suivant entre "unload me" et "End Sub" :
Exit Sub
ErrorHandler:
Dim sMess As String
sMess = "Erreur: " & Err & vbCrLf & Err.Description
If Not WordApp Is Nothing Then
WordApp.Quit
End Ifet d'ajouter au début de code :
On Error GoTo ErrorHandlerSalut,
merci pour ta précision. Je viens de l'ajouter.
Effectivement je me doutais bien que ca devais etre un probleme de fermeture et donc qui touche à la mémoir. Mais même en redémarrant mon ordinateur le problème persiste. C'est fou quand meme ...
Alors,
j'ai un peut chipoter, j'ai fini par ouvrir mon fichier word betement. Il m'a mis un message d'erreur "la derniere fois que ce fichier a été ouvert, une erreur grave s'est produite". J'ai mis continué, j'ai ré enregistré le fichier correctement, j'ai relancer mon app et ca a l'air de fonctionner.
merci beaucoup de votre aide précieuse !
je clos le sujet