IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

VB 6 et antérieur Discussion :

PdfCreator problémes de blocages OLE


Sujet :

VB 6 et antérieur

  1. #1
    Membre du Club
    Homme Profil pro
    Inscrit en
    Juin 2007
    Messages
    56
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Juin 2007
    Messages : 56
    Points : 64
    Points
    64
    Par défaut Blocage OLE
    Bonjour,
    [edit bbil]
    suite à la discussion : Export Word vers PDF : pilotage du composant ActiveX PDFCreator
    [/edit]

    Après avoir galèré sur des impression PDF à partir de VBA (fichier non dispo ou illisible, ..) je suis tombé sur ce post et j'ai intégré le code dans le programme ... Un grand merci à son auteur

    L'application qui l'utilise est un Excel VBA qui scrute régulièrement une boite mail et traite des fichiers Excel envoyés par des personnes (envoi de demande).

    Lorsque la demande est validée, l'application génère une copie pdf et l'envoi à la personne.

    Assez régulièrement, sans que j'ai pu identifier l'origine, le VBA se fige avec un message "Excel est en attente d'une application OLE ...." et le seul moyen de le laisser poursuivre est d'aller tuer la tache PDFCreator (statut "pas de réponse").

    Cela se produit toujours après que le fichier ait été correctement généré sur le disque.

    Le code a simplement été modifié pour permettre une impression par .printout d'un morceaux d'Excel (une feuille de calcul). A la place du paramètre nom du fichier, je transmet la référence de l'objet à éditer. C'est peut être cela la cause de l'erreur mais je n'arrive pas à expliquer pourquoi.

    Bingo !!!!!!!! en écrivant ce message je viens de me rendre compte que je détruisait pas la variable objet transmise au terminate de la classe ... donc je pense que l'erreur provient de là ! je test demain et vous apporte la réponse.

    Mon erreur pourra peut être servir à quelqu'un !

    A bientôt,

  2. #2
    Membre éclairé
    Profil pro
    Inscrit en
    Mai 2006
    Messages
    730
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2006
    Messages : 730
    Points : 876
    Points
    876
    Par défaut
    Oui, tiens-nous au courant, sinon, n'hésite pas à ouvrir un post avec code à l'appui.

  3. #3
    Membre du Club
    Homme Profil pro
    Inscrit en
    Juin 2007
    Messages
    56
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Juin 2007
    Messages : 56
    Points : 64
    Points
    64
    Par défaut
    Bonsoir,
    Et non ... la solution n'était pas la bonnne. Les blocages ont continué !

    Voici le code de la classe et de l'appel. Peut être que cela va permettre à quelqu'un de voir ce que je n'arrive pas à trouver !

    Classe ExportPDF :
    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
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
    129
    130
    131
    132
    133
    134
    135
    136
    137
    138
    139
    140
    141
    142
    143
    144
    145
    146
    147
    148
    149
    150
    151
    152
    153
    154
    155
    156
    157
    158
    Private mvarNomFichier As String
    Private mvarNomDir As String
    Private mvarChemDocComplet As String
    Private mobjDocImpression As Object
     
    Private WithEvents PDFCreator1 As PDFCreator.clsPDFCreator
    Attribute PDFCreator1.VB_VarHelpID = -1
     
    Private pErr As clsPDFCreatorError
    Private opt As clsPDFCreatorOptions
     
    Private noStart As Boolean
     
    '=========================================================================================
    '=========================================================================================
    Public Property Let ChemDocComplet(ByVal vData As String)
     
      mvarChemDocComplet = vData
     
    End Property
     
    '=========================================================================================
    Public Property Get ChemDocComplet() As String
    '=========================================================================================
     
      ChemDocComplet = mvarChemDocComplet
     
    End Property
     
    '=========================================================================================
    Public Property Let DocImpression(ByVal vData As Object)
    '=========================================================================================
     
      Set mobjDocImpression = vData
     
    End Property
     
    '=========================================================================================
    Public Property Get DocImpression() As Object
    '=========================================================================================
     
      Set DocImpression = mobjDocImpression
     
    End Property
     
    '=========================================================================================
    Public Property Let NomDir(ByVal vData As String)
    '=========================================================================================
     
      mvarNomDir = vData
     
    End Property
     
    '=========================================================================================
    Public Property Get NomDir() As String
    '=========================================================================================
     
      NomDir = mvarNomDir
     
    End Property
     
    '=========================================================================================
    Public Property Let NomFichier(ByVal vData As String)
    '=========================================================================================
     
      mvarNomFichier = vData
     
    End Property
     
    '=========================================================================================
    Public Property Get NomFichier() As String
    '=========================================================================================
     
        NomFichier = mvarNomFichier
     
    End Property
     
    '=========================================================================================
    Private Sub Class_Initialize()
    '=========================================================================================
     
      Set PDFCreator1 = New clsPDFCreator
      Set pErr = New clsPDFCreatorError
      noStart = True
     
      With PDFCreator1
        .cVisible = True
        If .cStart("/NoProcessingAtStartup") = False Then
           If .cStart("/NoProcessingAtStartup", True) = False Then
               Exit Sub
           End If
           .cVisible = True
        End If
        Set opt = .cOptions
        .cClearCache
      End With
     
      noStart = False
     
    End Sub
     
    '=========================================================================================
    Public Sub ConversionPDF()
    '=========================================================================================
     
      With opt
        .AutosaveDirectory = NomDir
        .AutosaveFilename = NomFichier
        .UseAutosave = 1
        .UseAutosaveDirectory = 1
        .AutosaveFormat = 0
      End With
     
      Set PDFCreator1.cOptions = opt
     
      mobjDocImpression.PrintOut , , 1, , "PDFCreator"
     
      PDFCreator1.cPrinterStop = False
     
      While PDFCreator1.cPrinterStop = False
          DoEvents
      Wend
     
    End Sub
     
    '=========================================================================================
    Private Sub PDFCreator1_eReady()
    '=========================================================================================
     
      PDFCreator1.cPrinterStop = True
     
    End Sub
     
    '=========================================================================================
    Private Sub PDFCreator1_eError()
    '=========================================================================================
     
      Set pErr = PDFCreator1.cError
      MsgBox "Error[" & pErr.Number & "]: " & pErr.Description
     
    End Sub
     
    '=========================================================================================
    Private Sub Class_Terminate()
    '=========================================================================================
     
      If noStart = False Then
          DoEvents
          PDFCreator1.cClose
      End If
     
      DoEvents
     
      Set PDFCreator1 = Nothing
      Set pErr = Nothing
      Set opt = Nothing
     
    End Sub
    et un extrait de la procédure d'appel :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     Set clExp = New ExportPDF
      With clExp
        .NomDir = xrTmp
        .NomFichier = nmPdf
        .DocImpression = xwj.Worksheets("DC")
        .ConversionPDF
      End With
      Set clExp = Nothing
    Merci de votre aide ...

  4. #4
    Membre éclairé
    Profil pro
    Inscrit en
    Mai 2006
    Messages
    730
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2006
    Messages : 730
    Points : 876
    Points
    876
    Par défaut
    Houla !

    Il y a mélange des genres ici. Tu ne te sers pas de la fonction d'export du composant ici cPrintFile mais tu imprimes ton objet mobjDocImpression (Excel ou autre) avec sa méthode propre en choisissant l'imprimante virtuelle de sortie (PDFCreator).
    Pourquoi ne passes-tu pas par la méthode d'impression de l'objet PDFCreator ?

  5. #5
    Membre du Club
    Homme Profil pro
    Inscrit en
    Juin 2007
    Messages
    56
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Juin 2007
    Messages : 56
    Points : 64
    Points
    64
    Par défaut
    Bonjour,
    Parce que je ne dois pas imprimer tout le classeur mais seulement 1 ou 2 feuilles (non contigus) selon le traitement.
    Comme je n'ai pas trouvé de documentation sur la méthode .cprintFile je ne savais pas si elle pouvait le faire.
    A bientôt

  6. #6
    Membre éclairé
    Profil pro
    Inscrit en
    Mai 2006
    Messages
    730
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2006
    Messages : 730
    Points : 876
    Points
    876
    Par défaut
    Ton erreur vient de là à mon avis. Tu ouvres une instance du composant PDFCreator et avant de la fermer, tu lances une impression via un autre objet qui va lui-même créer une nouvelle instance du composant alors qu'il est occupé...

  7. #7
    Membre du Club
    Homme Profil pro
    Inscrit en
    Juin 2007
    Messages
    56
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Juin 2007
    Messages : 56
    Points : 64
    Points
    64
    Par défaut
    Hello,

    Je pense avoir résolu mes problèmes avec les modifs suivantes dans mon code :

    - suppression du byval pour le parametre object document à imprimer.
    - destruction (nothing) de la variable objet document des l'impression.

    Depuis, l'application tourne sans aucun blocage constaté

    A+

    Je confirme, plus aucun blocage après une journée de fonctionnement ...
    04/07 : J'ai parlé trop vite les problèmes sont revenus et presque à chaque impression ... je n'arrive pas à comprendre pourquoi et surtout ce qui a pu changer depuis hier !!!!!!

  8. #8
    Membre du Club
    Homme Profil pro
    Inscrit en
    Juin 2007
    Messages
    56
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Juin 2007
    Messages : 56
    Points : 64
    Points
    64
    Par défaut
    Bonjour,

    Tout est résolu, j'ai déplacé l'ouverture et la fermeture du printer PDF en début et en fin de la macro, et non à chaque impression de fichier comme c'était le cas précédemment.

    Depuis plus un seul blocage OLE et des temps d'exécution rapide des impressions. Cela m'a permis de généraliser le génération de fichier PDF.

    Encore merci à l'auteur du code ...

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

Discussions similaires

  1. [WD11] Problème de blocage de fichier
    Par slick42 dans le forum WinDev
    Réponses: 18
    Dernier message: 18/02/2019, 14h17
  2. problème de l OLE
    Par ALKA101 dans le forum Access
    Réponses: 7
    Dernier message: 15/05/2012, 11h42
  3. [PdfCreator] probléme pour détection fin d'impresion
    Par kevinou55 dans le forum VB 6 et antérieur
    Réponses: 20
    Dernier message: 14/01/2009, 14h24
  4. problème de champs OLE et paradox
    Par QAYS dans le forum Bases de données
    Réponses: 4
    Dernier message: 09/05/2007, 08h24
  5. [Thread] probléme de blocage.
    Par airod dans le forum Tkinter
    Réponses: 6
    Dernier message: 07/11/2006, 14h21

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