Donnez vie à vos documents numériques !
 

Macro import données Excel vers PDF capricieuse

abracadabraPDF Forums PDF – Général Macro import données Excel vers PDF capricieuse

  • Ce sujet est vide.
  • Créateur
    Sujet
  • #45721
    micka92
    Membre

    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’
        ListeFichier

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

    Feuil1.Range(“A1”).Select
    Set AVDoc = Nothing

    ‘Lancement de l’application’
    KillAcrobat

    End 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 = 8

      Dim objFSO, objDossier, objFichier, objResultat
      Dim Repertoire, NomFichier

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

      objResultat.Close
      Set objResultat = Nothing
      Set objDossier = Nothing
      Set objFSO = Nothing

    End Sub

Affichage de 2 réponses de 1 à 2 (sur un total de 2)
  • Auteur
    Réponses
  • #62885
    Merlin
    Maître des clés

    Bonjour.

    Tu devrais poser la question sur un forum consacré à Excel car je ne suis pas certain qu’on trouve beaucoup de spécialistes de ses macros dans ce forum.
    :joker:

    #62886
    micka92
    Membre

    Bonsoir,

    J’ai fait tester avec un collègue qui maîtrise bien les macros VBA et pour lui, cela ne vient pas de là. En effet, ça me donne l’impression qu’il y a un processus d’Abode Acrobat qui ne s’exécute pas correctement par moment. Je demandais au cas où un problème similaire serait déjà survenu à quelqu’un.

Affichage de 2 réponses de 1 à 2 (sur un total de 2)
  • Vous devez être connecté pour répondre à ce sujet.