IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Macros et VBA Excel Discussion :

Tester si chaque signet exist


Sujet :

Macros et VBA Excel

  1. #1
    Membre actif
    Homme Profil pro
    secrétaire
    Inscrit en
    Décembre 2014
    Messages
    49
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : secrétaire

    Informations forums :
    Inscription : Décembre 2014
    Messages : 49
    Par défaut Tester si chaque signet exist
    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

  2. #2
    Expert éminent
    Avatar de Marc-L
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Avril 2013
    Messages
    9 468
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2013
    Messages : 9 468
    Par défaut




    Bonjour,

    mauvais forum car c'est une problématique Word …



    __________________________________________________________________________________________________
    Je suis Charlie - Je suis Bardo

  3. #3
    Membre actif
    Homme Profil pro
    secrétaire
    Inscrit en
    Décembre 2014
    Messages
    49
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : secrétaire

    Informations forums :
    Inscription : Décembre 2014
    Messages : 49
    Par défaut
    Bonjour,
    De mon point de vue, c'est plutot une problématique excel. C'est comment tester sous ma macro excel que les signets exists pour y inclure les données de mon tableau excel.

    Enfin, de toute facon, word, excel, la syntaxe VBA est la même non?

  4. #4
    Expert confirmé
    Avatar de kiki29
    Homme Profil pro
    ex Observeur CGG / Analyste prog.
    Inscrit en
    Juin 2006
    Messages
    6 132
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Finistère (Bretagne)

    Informations professionnelles :
    Activité : ex Observeur CGG / Analyste prog.

    Informations forums :
    Inscription : Juin 2006
    Messages : 6 132
    Par défaut
    Salut, voir ici ou

  5. #5
    Membre actif
    Homme Profil pro
    secrétaire
    Inscrit en
    Décembre 2014
    Messages
    49
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : secrétaire

    Informations forums :
    Inscription : Décembre 2014
    Messages : 49
    Par défaut
    Oué, donc pas franchement de solution que de tester l'existence du signet avec une condition avant de le traiter....
    Bon, ben, c'est parti pour ajouter une trentaine de conditions !
    Merci.

Discussions similaires

  1. Tester qu'une valeur existe dans une "liste"
    Par Oluha dans le forum Langage
    Réponses: 12
    Dernier message: 04/08/2005, 23h01
  2. Réponses: 2
    Dernier message: 20/05/2005, 10h18
  3. MDI => Tester si une fenêtre existe déjà ?
    Par MaTHieU_ dans le forum C++Builder
    Réponses: 4
    Dernier message: 17/04/2005, 21h41
  4. Tester qu'une date existe
    Par Oluha dans le forum Général JavaScript
    Réponses: 2
    Dernier message: 17/03/2005, 10h37
  5. [langage] tester si un fichier existe
    Par schnecke dans le forum Langage
    Réponses: 3
    Dernier message: 02/03/2004, 11h24

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo