[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 Sub

Je 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 Sub

Salut

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.

18devis-procalstone.zip (718.64 Ko)

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 Word

Bonjour 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 If

et d'ajouter au début de code :

   On Error GoTo ErrorHandler

Salut,

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

Rechercher des sujets similaires à "bug ouverture docx modification sauvegarde pdf"