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.
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 :
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" :
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.
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