- Ce sujet est vide.
-
Sujet
-
Bonjour,
Je dispose d’une macro, récupérée sur le net, qui me permet d’incrémenter les données d’un tableau Excel dans un formulaire PDF type. Mon soucis vient du fait que, pour une raison que je n’arrive pas à trouver, la macro ouvre parfois mon formulaire PDF au premier plan avant de le renseigner, et parfois, j’ai l’impression que cela se fait sans qu’il soit ouvert. Le problème vient que j’incrémente une valeur contenue dans une liste déroulante (qui déclenche des scripts etc…) mais que l’ensemble des valeurs de cette liste s’initialise à l’ouverture du formulaire. Vous l’aurez donc compris, si j’ai été clair :jerisjaune:, que cela ne fonctionne pas lorsque le formulaire n’est pas ouvert. Résultat : j’ai bien la valeur demandée qui s’affiche, mais les scripts qui en découlent ne fonctionnent pas.
Auriez-vous une idée du dysfonctionnement ? Cela est très aléatoire : cela fonctionne de temps en temps, parfois pas du tout, parfois sur quelques lignes du fichier Excel seulement. Cela se répète quelque soit l’ordinateur (PC).
Code:‘Déclaration des variables publiques’Public j As Long ‘ligne’
Public LastLig As Long ‘Dernière ligne’
Sub Création_PDF()‘Dernière ligne’
LastLig = Feuil1.Range(“E” & Rows.Count).End(xlUp).Row
If MsgBox(“Attention, les fiches existantes dans le dossier seront remplacées !” & vbCrLf & “Continuer ?”, vbYesNo, “ATTENTION !!!”) = vbYes Then
For j = 4 To LastLig
‘Temporisation de 2 secondes pour laisser le temps à Windows de fermer le processus’
Application.Wait Time + TimeSerial(0, 0, 2)
‘Lancement de l’application’
Ecriture_ChampsFormulaire_Excel
Next j
End If‘Lancement de l’application’
ListeFichierEnd Sub
Private Sub Ecriture_ChampsFormulaire_Excel()
Application.ScreenUpdating = False
Dim AVDoc As Object
Dim sChemin As String
Dim PDDoc As Object
Dim JSO As Object
Dim X As Object
Dim i As Long ‘colonne’
Dim LastCol As Long
Dim LastLig As Long
LastLig = Feuil1.Range(“E” & Rows.Count).End(xlUp).Row
LastCol = Feuil1.Cells(1, Cells.Columns.Count).End(xlToLeft).Column
Set AVDoc = CreateObject(“AcroExch.AVDoc”)
sChemin = ThisWorkbook.Path & “” & “Formulaire.pdf” ‘Fichier modèle’If AVDoc.Open(sChemin, “”) Then
Set PDDoc = AVDoc.GetPDDoc
Set JSO = PDDoc.GetJSObject‘Parcours les colonnes et renseigne le PDF’
For i = 3 To 10
Set X = JSO.getField(CStr(Feuil1.Range((Chr(64 + i)) & 1)))
X.Value = CStr(Feuil1.Range((Chr(64 + i)) & j))
Next i‘Sauvegarde du PDF’
PDDoc.Save 1, ThisWorkbook.Path & “” & Feuil1.Range((Chr(64 + 2)) & j).Value & “.pdf”
PDDoc.Close‘Initialisation des variables’
Set X = Nothing
Set JSO = Nothing
Set PDDoc = Nothing
End IfFeuil1.Range(“A1”).Select
Set AVDoc = Nothing‘Lancement de l’application’
KillAcrobatEnd Sub
Private Sub KillAcrobat()
Dim Rep As Variant
‘Arret du processus’
Rep = Shell(“Taskkill /im Acrobat.exe /f”, 0)End Sub
Private Sub ListeFichier()
Const ctePourLecture = 1
Const ctePourEcrire = 2
Const ctePourAjouter = 8Dim objFSO, objDossier, objFichier, objResultat
Dim Repertoire, NomFichierOn Error Resume Next
Repertoire = ThisWorkbook.Path & “”
NomFichier = “Resultat.xls”
Set objFSO = CreateObject(“Scripting.FileSystemObject”)
Set objDossier = objFSO.GetFolder(Repertoire)
Set objResultat = objFSO.CreateTextFile((Repertoire & “” & NomFichier), ctePourEcrire)If (objDossier.Files.Count > 0) Then
For Each objFichier In objDossier.Files
If (InStr(1, objFichier.Name, “.pdf”, 1) > 0) Then
objResultat.WriteLine objFichier.Name
End If
Next
End IfobjResultat.Close
Set objResultat = Nothing
Set objDossier = Nothing
Set objFSO = NothingEnd Sub
- Vous devez être connecté pour répondre à ce sujet.