Publipostage avec select case

Bonjour à toutes et à tous,

Tout d'abord je cherche à faire une sorte de publipostage de excel vers word avec la fonction "remplacer". Mes signets avec le "%" sont les éléments à faire basculer dans le word. Pour un cas sans condition, ma macro fonctionne toutefois je dois ajuster le courrier selon plusieurs conditions. J'ai donc utilisé select case pour pouvoir réaliser cela mais je n'arrive pas à le faire.

Dans mon exemple 1 du fichier excel, il devrait prendre toutes les informations dont j'ai besoin sauf du signet "%age% car il ne repond pas à la condition.

Dans l'exemple 2, il devrait prendre tous les signets.

Pour le moment, uniquement 2 critères sont retenues pour le select case, le A et le B.

En vous remerciant par avance.

9test-copie.docx (23.51 Ko)

Salut,

Tu écris :

J'ai donc utilisé select case pour pouvoir réaliser cela mais je n'arrive pas à le faire.

Cette information est assez imprécise ! J'ai essayé moi-même de lancer ta macro et ça bloque au passage ci-dessous :

image

Si c'est bien de ce problème dont tu parles, ce n'est en fait pas un problème de Next sans For (Excel est parfois dépassé et ne parvient pas à trouver l'erreur réelle) et il faut selon moi supprimer la ligne mise en commentaire ci-dessous, avant le passage Case Is = "2" :

image

Un conseil :

En décalant chaque inscription comme je l'ai fait dans la macro-exemple ci-dessous, tu remarques plus facilement si tu as bien un Next qui correspond à un For, un End If qui correspond à un If, un End With à un With, etc.

image

C'est en réorganisant un peu ta macro dans cet esprit-là - selon le fichier ci-joint - que j'ai découvert ton Select Case A orphelin (sans End Select) et inutile.

Mais bien entendu que ta macro pourrait être beaucoup mieux réorganisée

A te relire

Salut,

Merci beaucoup pour ton retour.

Effectivement le "next sans for" était une partie de mon problème. Est-ce possible de faire avec le select case d'utiliser un elseif au lieu de faire à chaque fois if... end if?

Exemple:

    A = Cells(i, 17).Value
                Select Case A
                    Case Is = 5

                                      'Edition des COURRIERS - Chargement des variable
                                       strReplace1 = Cells(i, 7).Value 'Genre
                                       strReplace2 = Cells(i, 3).Value 'Nom
                                       strReplace3 = Cells(i, 14).Value 'CongésAPrendre
                                       strReplace4 = Cells(i, 9).Value 'adresse1
                                       strReplace5 = Cells(i, 10).Value 'adresse2
                                       strReplace6 = Cells(i, 11).Value 'ville

                            '================================
                            'Création du courrier congé
                            '================================
                        'On déclare, et affiche Word :
                            Set wordApp = New Word.Application
                            wordApp.Visible = True
                            'wordApp.Documents.Open filenameDoc1, wordApp
                                If WordOpen(filenameDoc1, wordApp, wordDoc) Then

                                    'Remplissage du courrier :
                                    wordDoc.Content.Find.Execute FindText:=tagToReplace1, _
                                                                 ReplaceWith:=strReplace1, Replace:=wdReplaceAll
                                    wordDoc.Content.Find.Execute FindText:=tagToReplace2, _
                                                                 ReplaceWith:=strReplace2, Replace:=wdReplaceAll
                                    wordDoc.Content.Find.Execute FindText:=tagToReplace3, _
                                                                 ReplaceWith:=strReplace3, Replace:=wdReplaceAll
                                    wordDoc.Content.Find.Execute FindText:=tagToReplace4, _
                                                                 ReplaceWith:=strReplace4, Replace:=wdReplaceAll
                                    wordDoc.Content.Find.Execute FindText:=tagToReplace5, _
                                                                 ReplaceWith:=strReplace5, Replace:=wdReplaceAll
                                    wordDoc.Content.Find.Execute FindText:=tagToReplace6, _
                                                                 ReplaceWith:=strReplace6, Replace:=wdReplaceAll

                                 ElseIf WordOpen(filenameDoc2, wordApp, wordDoc) Then

                         '''''''''''''''''''''''''''''''''''''''''''''''''''
                          'Si dans la colonne P la valeur est 2 il faut prendre en compte pour le publipostage %congésaaprendre% et %age%

''''''''''''''''''''''''Select Case A
                Select Case A
                    Case Is = 2

                                      'Edition des COURRIERS - Chargement des variable
                                       strReplace1 = Cells(i, 7).Value 'Genre
                                       strReplace2 = Cells(i, 3).Value 'Nom
                                       strReplace3 = Cells(i, 14).Value 'CongésAPrendre
                                       strReplace4 = Cells(i, 9).Value 'adresse1
                                       strReplace5 = Cells(i, 10).Value 'adresse2
                                       strReplace6 = Cells(i, 11).Value 'ville
                                       strReplace7 = Cells(i, 15).Value 'age
                                      ' strReplace8 = Cells(i, 16).Value 'age2
                            '================================
                            'Création du courrier congé
                            '================================

                                    'Remplissage du courrier :
                                    wordDoc.Content.Find.Execute FindText:=tagToReplace1, _
                                                                 ReplaceWith:=strReplace1, Replace:=wdReplaceAll
                                    wordDoc.Content.Find.Execute FindText:=tagToReplace2, _
                                                                 ReplaceWith:=strReplace2, Replace:=wdReplaceAll
                                    wordDoc.Content.Find.Execute FindText:=tagToReplace3, _
                                                                 ReplaceWith:=strReplace3, Replace:=wdReplaceAll
                                    wordDoc.Content.Find.Execute FindText:=tagToReplace4, _
                                                                 ReplaceWith:=strReplace4, Replace:=wdReplaceAll
                                    wordDoc.Content.Find.Execute FindText:=tagToReplace5, _
                                                                 ReplaceWith:=strReplace5, Replace:=wdReplaceAll
                                    wordDoc.Content.Find.Execute FindText:=tagToReplace6, _
                                                                 ReplaceWith:=strReplace6, Replace:=wdReplaceAll
                                    wordDoc.Content.Find.Execute FindText:=tagToReplace7, _
                                                                 ReplaceWith:=strReplace7, Replace:=wdReplaceAll
                                    'wordDoc.Content.Find.Execute FindText:=tagToReplace8, _
                                                                 ReplaceWith:=strReplace8, Replace:=wdReplaceAll

                                   'Chemin du dossier

                                    Chemin = "C:\Users
                                    NomFichier = " " & strReplace1 & " " & strReplace2 & ".docx"

                                     Application.DisplayAlerts = True
                                        'Impression avenant
                                        wordApp.ActiveDocument.PrintOut
                                        'Enregistrement
                                        wordApp.ActiveDocument.SaveAs Filename:=Chemin & NomFichier
                                        'wordApp.Close SaveChanges:=wdDoNotSaveChanges
                                        wordApp.Quit
                                        Set wordApp = Nothing
                                    Application.DisplayAlerts = False

                                 End If

                           '''''''''''''''''''''''''''''''''''''''''''''''''''
                                'End If
                    Case Else

                End Select
            Next i
        End With

End Sub

Merci pour tes conseils, je vais essayer d'être plus rigoureux dans mes macros afin d'y voir plus clair.

Re,

Est-ce possible de faire avec le select case d'utiliser un elseif au lieu de faire à chaque fois if... end if?

Ta demande ci-dessus est très peu claire et ton (immense) bout de macro sans fichier est presque inutilisable.

Afin de présenter plus clairement ta demande, tu devrais créer un petit bout de macro montrant que les passages concernés et non pas noyé dans une masse d'instructions inutiles à cette démo. Ou alors commenter mieux ton code - dans ton fichier Excel - afin de préciser quels passages ont été modifiés pour la macro.

Sans être face-à-face, ça me semble toutefois ardu et je ne sais pas si je ne vais pas craquer au bout d'un moment

bonsoir,

en haut du module on a le chemin et le nom de fichier Word. Au moment du lancement de la macro, ce fichier n'est pas ouvert.

@Yvouille En me relisant j'ai moi même eu du mal à savoir ce que voulais concrètement mais @BsAlv a su résoudre parfaitement mon problème.

Encore merci à vous deux pour votre aide.

Bonne fin de journée,

Tom

Rechercher des sujets similaires à "publipostage select case"