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
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 SubA+
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"