ReadOnly et Adobe

Bonsoir les codeurs,

J'ai un soucis avec un code, il ouvre un PDF, demande de signer et vérifie si la signature numérique du PDF est faite ou pas sinon il boucle. Le problème est qu'il ne ferme pas forcément adobe à la fin et le fichier signé reste en lecture seule, de plus si la personne ferme adobe avant d'appuyer sur le OK du MsgBox, le fichier est aussi verrouillé en lecture seule. J'avoue que je sèche un peu, j'ai trouvé une solution que je ne comprends pas trop qui consiste à mettre deux AVDoc.Close (True) à la suite mais elle ne fonctionne pas à 100%. J'utilisais un Kill avant mais mes collègues ont pesté car cela fermait tout leurs PDF ouverts, ce sont des adeptes du fichier ouvert toute la journée sans jamais rien fermer.

Y-a-t'il un soucis dans mon code ? Y-a-t'il une solution pour tester si le fichier PDF est ouvert afin de lancer l'AVDoc si nécessaire ? J'ai essayé ReadOnly mais ne fonctionne pas.

Signature:

    AVDoc.Open Document1, ""
    Set PDDoc1 = AVDoc.GetPDDoc
    MsgBox "Veuillez signer numériquement la revue de contrat simplifiée puis cliquer sur OK.", vbMsgBoxSetForeground
    PDDoc1.Open (Document1)
    Set JSO = PDDoc1.GetJSObject
    Set x = JSO.getField("Signature1")
    z = x.signatureValidate
    If z = 0 Then MsgBox "La revue de contrat simplifiée n'as pas été signée.", vbMsgBoxSetForeground + vbExclamation, "Erreur": GoTo Signature

    PDDoc1.Close
    AVDoc.Close (True)

Cordialement.

Bonjour Heelflip,

Tu ne peux/dois pas faire une boucle avec ton open dedans

De plus, nous n'avons pas le code complet et j'ai l'impression que tu ouvres 2 fois le documents (avant la boucle)

' Ici
 AVDoc.Open Document1, ""
' Et ici
PDDoc1.Open (Document1)

Le code est à revoir, je ne sais pas faire

A+

Salut Bruno,

La boucle avec le Open c'est au cas ou le collègue a fermé le PDF, il le ré-ouvre pour vérifier si la signature est présente. C'est pour cela que je cherche à savoir si on peut faire un check de l'ouverture du fichier PDF, ça éviterai de forcer la réouverture en plaçant un If open Then.

Sinon le code est complet, avant j'ai juste une parti fusion et une partie remplacement de PDF mais avec des PDDoc que je Close et ou je réinitialise les variables donc pas de soucis de ce côté. Cela fonctionnait bien jusqu’à ce que j'implante la partie que j'ai postée.

Re,

Faire un check de l'ouverture du fichier le fichier est bien ouvert par VBA, donc à quoi ça servirait ?

Sinon, je verrais un truc plutôt du style

Sub Test()
  AVDoc.Open Document1, ""
  Set PDDoc1 = AVDoc.GetPDDoc
  MsgBox "Veuillez signer numériquement la revue de contrat simplifiée puis cliquer sur OK.", vbMsgBoxSetForeground
  PDDoc1.Open (Document1)
  Set JSO = PDDoc1.GetJSObject
  Set x = JSO.getField("Signature1")

Signature:
  Z = x.signatureValidate
  If Z = 0 Then
    MsgBox "La revue de contrat simplifiée n'as pas été signée.", 8
    vbMsgBoxSetForeground vbExclamation, "Erreur"
    ' Attendre 30 s
    Application.Wait Now + TimeValue("00:00:30")
    GoTo Signature
  End If

  PDDoc1.Close
  AVDoc.Close (True)
End Sub

A+

Bruno,

Si l'utilisateur ferme le fichier, je ne peux pas vérifier que la signature soit effectuée. Donc je rouvre pour vérifier ;) C'est juste une précaution comme par exemple un check des entrée dans un userform avant fermeture

Salut Bruno, après pas mal de temps de recherche, j'ai enfin trouvé ce que je voulais et cela fonctionne bien mieux ainsi. J'ai réussi à tester l'ouverture du fichier PDF avec ce code -> "If AVDoc.Open(Document1, "") = False" Du coup s'il est ouvert je ne fais rien et s'il est fermé je l'ouvre à nouveau ce qui les force à signer. A la fin je refais un check pour savoir si je dois fermer PDDoc et AVDoc. C'est un peu plus chiant à tester mais au final beaucoup plus propre et rapide en exécution. Voici mon code final espérant aider d'autres personnes sur le sujet.

Signature:

    MsgBox "Veuillez signer numériquement la revue de contrat simplifiée puis cliquer sur OK.", vbMsgBoxSetForeground

    If AVDoc.Open(Document1, "") = False Then 'Si PDF Ouvert
        Set x = JSO.getField("Signature1")
        z = x.signatureValidate
        If z = 0 Then
            MsgBox "La revue de contrat simplifiée n'as pas été signée.", vbMsgBoxSetForeground + vbExclamation, "Erreur"
            If AVDoc.Open(Document1, "") = False Then
                GoTo Signature
            Else
                Set AVDoc = CreateObject("AcroExch.AVDoc")
                AVDoc.Open Document1, ""
                Set PDDoc1 = AVDoc.GetPDDoc
                Set JSO = PDDoc1.GetJSObject
                GoTo Signature
            End If
        Else
            GoTo Fin
        End If

    Else

Signature2:

        Set AVDoc = CreateObject("AcroExch.AVDoc")
        AVDoc.Open Document1, ""
        Set PDDoc1 = AVDoc.GetPDDoc
        Set JSO = PDDoc1.GetJSObject
        Set x = JSO.getField("Signature1")
        z = x.signatureValidate
        If z = 0 Then
            MsgBox "La revue de contrat simplifiée n'as pas été signée.", vbMsgBoxSetForeground + vbExclamation, "Erreur"
            If AVDoc.Open(Document1, "") = False Then
                GoTo Signature
            Else
                Set AVDoc = CreateObject("AcroExch.AVDoc")
                AVDoc.Open Document1, ""
                Set PDDoc1 = AVDoc.GetPDDoc
                Set JSO = PDDoc1.GetJSObject
                GoTo Signature
            End If
        Else
            GoTo Fin
        End If
    End If

Fin:

    If AVDoc.Open(Document1, "") = False Then
        PDDoc1.Close
        AVDoc.Close (True)
    End If

    'Réinitialisation des objets
    Set x = Nothing
    Set JSO = Nothing
    Set PDDoc1 = Nothing
    Set AVDoc = Nothing

    MsgBox "La revue de contrat a été générée avec succès.", vbMsgBoxSetForeground + vbInformation, "Fin"
Rechercher des sujets similaires à "readonly adobe"