Bonjour,

J'ai rédiger ce script (à l'aide du tuto en commentaire) qui me permets de compléter un fichier PDF (en 2 pages) automatiquement depuis un fichier CSV contenant potentiellement 500 lignes.

L'idée c'est d'ouvrir ce document PDF, de le remplir, de l'enregistrer en PDF puis de le fermer et de recommencer jusqu'à atteindre la fin du fichier CSV.

Comment être sûr que le document ouvert se positionne directement sur la première case de mon document PDF ? De manière plus fiable que par .

J'ai ensuite une erreur suite au remplissage de mon document. Une fois que la première page est remplie, au moment de passer à la deuxième page, le script m'efface la moitié des champs qu'il venait juste de remplir et il ne passe pas à la deuxième page de mon document, j'ai l'impression qu'il rempli de nouveau la première page.

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
Option Explicit
'Tuto https://www.youtube.com/watch?v=7pjJZNRpZc8&t
'Action pour ouvrir le fichier PDF à remplir
Private Sub CommandButtonStart_Click()
    Dim filePath As String
    filePath = "G:\Poubelle\Publipost.pdf"
 
    'On parcours le fichier excel à la recherche des données de chaque colonne
    Dim lastrow As Integer
    lastrow = Sheets(1).Range("b9999").End(xlUp).Row
 
    'Boucle de recherche des données de chaque ligne
    Dim line As Integer
 
    'On commence à la ligne 2 pour ne pas prendre en compte les entêtes pendant le remplissage du PDF
    For line = 2 To lastrow
        CreateObject("Shell.application").Open (filePath)
        'Délai d'attente avant de commencer à faire les TAB
        Application.Wait Now + 0.00003
 
        'Nombre de tabulations à faire avant d'arriver au premier champ remplissable du PDF lorsqu'on l'ouvre dans Google Chrome
        fieldTab 1
 
        'Pour afficher les vraies informations de la ligne du fichier excel et non pas SampleLastName ou SampleStreet comme dans l'exemple
        With Sheets(1)
			'SET ANNÉE SCOLAIRE DÉBUT
            setInfo "2022"
            'SET ANNÉE SCOLAIRE FIN
            setInfo "2023"
            'SET PHOTO D'IDENTITÉ
            Application.SendKeys "{TAB}", True
 
			' *** ÉLÈVE ***
                        'SET SEXE M ou F ?
                        'setInfo .Range("a" & line).Value
                        If UCase(.Range("a" & line).Value) = "M" Then
                            Application.SendKeys "x", True
                        ElseIf UCase(.Range("a" & line).Value) = "F" Then
                           Application.SendKeys "{RIGHT}", True
                           Application.SendKeys "x", True
                        End If
			'SET NOM DE FAMILLE
			setInfo .Range("b" & line).Value
			'SET PRÉNOM 1
			setInfo .Range("c" & line).Value
			'SET PRÉNOM 2
			setInfo .Range("d" & line).Value
			'SET PRÉNOM 3
			setInfo .Range("e" & line).Value
			'SET FORMATION MEF / SPECIALITE
            Application.SendKeys "{TAB}", True
			'SET CLASSE / DIVISION
            Application.SendKeys "{TAB}", True			
			'SET DATE DE NAISSANCE
			setInfo .Range("f" & line).Value
			'SET COMMUNE DE NAISSANCE
			setInfo .Range("g" & line).Value
			'SET NATIONALITE
			setInfo .Range("h" & line).Value
			'SET CODE DEPARTEMENT DE NAISSANCE
			setInfo .Range("i" & line).Value
			'SET PAYS DE NAISSANCE
			setInfo .Range("j" & line).Value
			' *** ÉLÈVE ***
 
 
            'On définit le répertoire d'enregistrement du fichier PDF final
            savePDF .Range("c" & line).Value & "_" & .Range("b" & line).Value, "C:\Poubelle\Export\"
        End With
    Next
 
End Sub
 
'Pour se positionner sur le premier champ remplissable à l'ouverture du fichier
Sub fieldTab(amount As Integer)
 
    Dim x As Integer
    For x = 1 To amount
        Application.SendKeys "{TAB}", True
    Next
End Sub
 
'Pour remplir automatiquement les champs du PDF
Sub setInfo(info As String)
    Application.SendKeys info, True
    Application.SendKeys "{TAB}", True
End Sub
 
'Pour sauvegarder le fichier PDF rempli
Sub savePDF(fileName, folder As String)
    'Raccourci pour ouvrir la boîte de dialogue IMPRIMER avec le raccourci ^(p)
    Application.SendKeys "^(p)", True
    'Délai d'attente pour que la fenêtre s'ouvre
    Application.Wait Now + 0.00003
    'Raccourci clavier pour valider l'imprimante (défini par défaut plutôt sur Microsoft PDF)
    Application.SendKeys "~", True
    'Délai d'attente pour que la fenêtre pour enregistrer le PDF s'ouvre
    Application.Wait Now + 0.00003
    'On place le curseur sur le champ nom de fichier avec le raccourci %(n)
    Application.SendKeys "%(n)", True
    'On inscris le nom du fichier que l'on souhaite pour enregistrer le fichier
    Application.SendKeys fileName, True
    'Délai d'attente pour que le nom du fichier soit bien renseigné
    Application.Wait Now + 0.00003
    'On valide l'enregistrement du fichier avec le raccourci %(e)
    Application.SendKeys "%(e)", True
    Application.Wait Now + 0.00003
    'Confirmation en cas de fichier déjà existant
    Application.SendKeys "%(o)"
    'On attends que la fenêtre se ferme
    Application.Wait Now + 0.00003
    'Fermeture de l'onglet sur le navigateur avec le raccourci ^(W)
    Application.SendKeys "^(W)", True
 
End Sub
Merci de votre aide à toutes et tous.
Bonne journée.