Bonjour,
Voila, j'ai une macro sous excel qui rempli les signets d'un contrat sous word.

Afin de ne pas faire planter ma macro, j'aimerais que si quelqu'un touche à ma trame de contrat, tester si le signet exist avant de le remplir.

J'ai bien ce code la qui fonctionne :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
 If Doc.Bookmarks.exists("signet_identite_" & i) Then
            .Bookmarks("signet_identite_" & i).Range.InsertAfter mon_genre & " " & Worksheets("navette").Range("B7") & " " & Worksheets("navette").Range("B9")
            End If
Mais, si je dois faire une condition pour chaque signet, c'est un peu barbant...

Y a t il autre solution? (je suis plutot novice en VBA donc désolé, d'avance si mon code est bien pourri).

Voici mon code complet avec tout mes signets à compléter :

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
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
 Set AppWord = CreateObject("Word.Application")
 
    With AppWord
 
        .Visible = True
 
        'ouvre un document, ATTENTION de mettre l'extension ".doc"
        Set Doc = .Documents.Open(Sheets("constantes").Range("D8") & "contrat_cdd_signets.doc")
 
        With Doc
        '************Bloc adresse
        For i = 1 To 2
        .Bookmarks("signet_nom_etablissement_" & i).Range.Text = Worksheets("constantes").Range("B3") 'nom établissement
        Next i
 
        If Worksheets("constantes").Range("B5") <> "" Then
            .Bookmarks("signet_rue_etablissement").Range.Text = Worksheets("constantes").Range("B4") & Chr(10) & Worksheets("constantes").Range("B5") 'rue établissement
            .Bookmarks("signet_adresse_etablissement").Range.Text = Worksheets("constantes").Range("B4") & ", " & Worksheets("constantes").Range("B5") & ", " & Worksheets("constantes").Range("B6") & " " & Worksheets("constantes").Range("B7") 'adresse complete
            Else: .Bookmarks("signet_rue_etablissement").Range.Text = Worksheets("constantes").Range("B4")
                    .Bookmarks("signet_adresse_etablissement").Range.Text = Worksheets("constantes").Range("B4") & ", " & Worksheets("constantes").Range("B6") & " " & Worksheets("constantes").Range("B7")  'adresse complete
        End If
 
            .Bookmarks("signet_cp_etablissement").Range.Text = Worksheets("constantes").Range("B6") 'CP établissement
            .Bookmarks("signet_ville_etablissement").Range.Text = Worksheets("constantes").Range("B7") 'VILLE établissement
            .Bookmarks("signet_tel_etablissement").Range.Text = Worksheets("constantes").Range("B8") 'tel établissement
            .Bookmarks("signet_fax_etablissement").Range.Text = Worksheets("constantes").Range("B9") 'fax établissement
 
            '***************** fin bloc adresse *****************************
 
            .Bookmarks("signet_president").Range.Text = Worksheets("constantes").Range("B12") 'président association
 
 
            ' insère dans le contrat tous les noms du salarié embauché
            mon_genre = "Monsieur"
            If UCase(Worksheets("navette").Range("B15")) = "F" Then
                mon_genre = "Madame"
            End If
 
            For i = 1 To 31
            'faire le choix dans les deux méthodes (ou les deux) :
 
            'insère le texte des cellules A1 et B1 après les signets
            If Doc.Bookmarks.exists("signet_identite_" & i) Then
            .Bookmarks("signet_identite_" & i).Range.InsertAfter mon_genre & " " & Worksheets("navette").Range("B7") & " " & Worksheets("navette").Range("B9")
            End If
           ' .Bookmarks("Monsignet2").Range.InsertAfter Range("B1")
 
            'remplace les signets par les textes des cellules A1 et B1
            '.Bookmarks("Monsignet").Range.Text = Range("A1")
            '.Bookmarks("Monsignet2").Range.Text = Range("B1")
            Next i
 
            'partie identité de la personne
            'remplace les signets par les textes des cellules A1 et B1
            .Bookmarks("signet_rue").Range.Text = Worksheets("navette").Range("B11") 'rue
            .Bookmarks("signet_ville").Range.Text = Worksheets("navette").Range("B12") & " " & Worksheets("navette").Range("B13") 'cp + ville
            .Bookmarks("signet_date_naiss").Range.Text = Worksheets("navette").Range("B16") 'date naissance
            .Bookmarks("signet_secu").Range.Text = Worksheets("navette").Range("B20") 'num secu
 
            'infos contrat
            .Bookmarks("signet_date_deb").Range.Text = Worksheets("navette").Range("B23") 'date debut contrat
            '.Bookmarks("signet_date_fin").Range.Text = worksheets("planning_1").Range("C6") 'date fin contrat
 
           ' heure début contrat
            heure_debut = Int(Worksheets("planning_1").Range("B11"))
            minutes_debut = 60 * (Range("B11") - Int(Range("B11")))
            If minutes_debut = 0 Then
                minutes_debut = "00"
            End If
            .Bookmarks("signet_heure_deb").Range.Text = heure_debut & "h" & minutes_debut
 
            'Insère dans le contrat la fonction du remplacant
            For i = 1 To 4
                .Bookmarks("signet_poste_" & i).Range.Text = test_voyelle(LCase(Worksheets("navette").Range("G8"))) 'fonction
            Next i
 
            .Bookmarks("signet_coef").Range.Text = Worksheets("navette").Range("H10") 'coeff
 
            If Worksheets("navette").Range("B29") = "OUI" Then
                .Bookmarks("signet_motif").Range.Text = "un surcroit d'activité temporaire" 'surcroit d'activité temporaire
                Else: .Bookmarks("signet_motif").Range.Text = "le remplacement de " & Worksheets("navette").Range("B32") & ", " & LCase(Worksheets("navette").Range("E32")) & ", " & LCase(Worksheets("navette").Range("B33")) ' personne remplace, poste, motif
            End If
 
        '    .Bookmarks("signet_remplacant").Range.Text = worksheets("navette").Range("B32") 'personne remplacée
        '    .Bookmarks("signet_poste_remplacant").Range.Text = worksheets("navette").Range("E32") 'fonction personne remplacee
        '    .Bookmarks("signet_motif").Range.Text = worksheets("navette").Range("B33") 'motif
            .Bookmarks("signet_date_fin").Range.Text = Worksheets("navette").Range("B24") ' date fin de contrat
 
 
            'temps plein / temps partiel
            If Worksheets("navette").Range("F37") >= 1 Then
            .Bookmarks("signet_partiel").Range.Text = "plein"
            Else
            .Bookmarks("signet_partiel").Range.Text = "partiel"
            End If
 
            'temps de travail
            duree_contrat = Worksheets("navette").Range("C37") - Worksheets("navette").Range("B37") + 1
 
            If Worksheets("navette").Range("F37") >= 1 Then 'temps plein
                  .Bookmarks("signet_temps_travail").Range.Text = "à temps plein pour la période du " & Worksheets("navette").Range("B23") & " au " & Worksheets("navette").Range("B24")
                Else ' temps partiel
                    'If duree_contrat < 8 Then ' temps pariel
                        ma_repartition = ""
                        ma_repartition = ma_repartition & "à temps partiel. La répartition du temps de temps de travail s'effectuera de la manière suivante :" & Chr(10)
                        'ma_repartition = ma_repartition & " - Semaine du "
                        Total = 0
                        y = 1
                        tmp_date = Worksheets("navette").Range("B23")
                        date_fin_contrat = Worksheets("navette").Range("B24")
                        x = 11
                        debut_semaine = tmp_date
                        For date_debut = tmp_date To date_fin_contrat
                            Total = Total + Worksheets("planning_" & y).Range("J" & x)
                            date_test = Worksheets("planning_" & y).Range("A" & x)
                            If Weekday(date_test) = 1 Or Worksheets("planning_" & y).Range("A" & x) = date_fin_contrat Then
                                   ma_repartition = ma_repartition & " - Semaine du " & debut_semaine & " au " & Worksheets("planning_" & y).Range("A" & x) & " : " & Total & " heures." & Chr(10)
                                   Total = 0
                                   debut_semaine = date_debut + 1
                            End If
                            x = x + 1
                            If x = 42 Then
                                x = 11
                                y = y + 1
                            End If
                        Next
                        .Bookmarks("signet_temps_travail").Range.Text = ma_repartition
                        'For x = 11 To 41
                        '    If Worksheets("navette").Range("A" & x) <> "" Then
                        '        Total = Total + Worksheets("planning_" & y).Range("J" & x)
                        '        If Day(Worksheets("navette").Range("A" & x)) = 1 Then
                        '            ma_repartition = ma_repartition & " - Semaine du " & debut_semaine & " au " & Worksheets("navette").Range("A" & x) & " : " & Total & " heures." & Chr(10)
                        '            Total = 0
                        '        End If
                        '    End If
                        '
                        'Next
 
 
                        '.Bookmarks("signet_temps_travail").Range.Text = "à temps partiel. La répartition du temps de temps de travail s'effectuera de la manière suivante :" & Chr(10) & " - Semaine du " & Worksheets("navette").Range("B37") & " heures pour la période du " & Worksheets("navette").Range("B37") & " au " & Worksheets("navette").Range("C37") 'tps de travail contrat inférieur à la semaine
                        'Else
                        '.Bookmarks("signet_temps_travail").Range.Text = "de " & Round(35 * Worksheets("navette").Range("F37"), 1) & " heures hébdomadaire" 'tps de travail hebdo
                    'End If
            End If
 
            'liste de tache
            ma_liste_tache = ""
            For i = 1 To 15
                If Worksheets("profil_taches").Cells(2, i) = Feuil6.cb_liste_profil.Value Then
                    For y = 3 To 30
                        If Worksheets("profil_taches").Cells(y, i) <> "" Then
                        ma_liste_tache = ma_liste_tache & "- " & Worksheets("profil_taches").Cells(y, i) & Chr(10)
 
                        End If
                    Next
                End If
            Next
             .Bookmarks("signet_taches").Range.Text = ma_liste_tache 'signet liste de tache
 
            'salaire
            salaire = Round(Worksheets("navette").Range("H10") * Worksheets("navette").Range("H13"), 2)
            .Bookmarks("signet_salaire_chiffres").Range.Text = salaire ' salaire en chiffre pour un mois de travail coef x indice
            .Bookmarks("signet_salaire_lettres").Range.Text = chiffrelettre(salaire) ' salaire en lettres
 
            'periode essai :
            If Worksheets("navette").Range("B39") < 2 Then
            .Bookmarks("signet_periode_essai").Range.Text = Worksheets("navette").Range("B39") & " jour" ' periode essai
            Else: .Bookmarks("signet_periode_essai").Range.Text = Worksheets("navette").Range("B39") & " jours" ' periode essai
            End If
 
            'date du contrat :
            .Bookmarks("signet_date_contrat").Range.Text = Date
 
            'ville signature :
            .Bookmarks("signet_ville_signature").Range.Text = Worksheets("constantes").Range("B7") 'ville
 
            'Directeur
            For i = 1 To 2
            .Bookmarks("signet_directeur_" & i).Range.Text = Worksheets("constantes").Range("B11")
            Next
 
            'sauvegarde du fichier excel
            Call sauve_navette
 
 
            'Sauvegarde du fichier :
            ma_date = date_americaine(Day(Worksheets("navette").Range("B23")), Month(Worksheets("navette").Range("B23")), Year(Worksheets("navette").Range("B23")))
 
             nom_fichier = Worksheets("navette").Range("B7") & "_" & ma_date & ".doc" 'nom du fichier = nom salarié_date
             AppWord.ActiveDocument.SaveAs Sheets("constantes").Range("D4") & nom_fichier
             'Set Doc = AppWord.Documents(Sheets("constantes").Range("D8") & "contrat_cdd_signets.doc")
             Set Doc = Nothing
             'AppWord.Quit
    Set Doc = Nothing
    Set AppWord = Nothing
 
 
         End With
    End With
Merci à vous