Générer des courriers types word à partir d'excel

loulouange

XLDnaute Occasionnel
Bonsoir,

Je me permets de faire appel à vos compétences en Excel afin de savoir s'il est possible de créer dans un tableau excel comprenant une liste de personnes avec coordonnées, un bouton ou autre permettant d'ouvrir un document spécifique dans Word reprenant des éléments dans le tableau excel.

Etant donné que se sont des lettres personnalisées, il n'y pas de possibilité de faire un publipostage.

Jusqu'ici je n'ai pu qu'améliorer les lettres types en appliquant des champs, (je n'y connaissais rien avant).

Je sais qu'Excel propose de grandes possibilités mais je crains que ce que je demande nécessite une très bonne maîtrise d'Excel.

Ceci dit, si vous pensez que ma demande est réalisable, et s'il existe un tuto pas à pas ou si vous pouviez m'expliquer au moins pour un exemple, je pourrais tenter de comprendre le fonctionnement des macros.

Pour vous permettre de mieux cerner ma demande, je vous mets en pièce jointe un tableau et deux exemples de lettres types, une pour absence injustifiée (AI) et l'autre pour absence justifiée (AJ).

Le tableau est exhaustif, d'autres lettres types et documents existent, le but étant de pouvoir en cliquant sur un bouton (dans chaque colonne sur chaque ligne ??) de générer le document et de reprendre l'adresse du destinataire.

Je vous remercie par avance pour vos suggestions et conseils qui me seront bien précieux.
 

Fichiers joints

Yaloo

XLDnaute Barbatruc
Re : Générer des courriers types word à partir d'excel

Bonsoir loulouange,

C'est possible, il faut toutefois définir dans votre fichier Excel quel type de courrier vous souhaitez envoyer.

A+

Martial
 

Denis132

XLDnaute Impliqué
Re : Générer des courriers types word à partir d'excel

Bonjour Loulouange, Yaloo,

Même si ce sont des lettres personnalisées, tu peux utiliser ta base Excel mais c'est plutôt avec les multiples fonctions de publipostage de Word que tu devrais travailler.

@+

Denis
 

loulouange

XLDnaute Occasionnel
Re : Générer des courriers types word à partir d'excel

Bonjour,

Merci d'avoir pris le temps de vous pencher sur mon probleme.

Yaloo : "quel type de courrier" les extensions ? les noms de tous les documents ?
je dois avoir en tout une dizaines de lettres types et 3 types de bilans.
j'aimerais déja savoir comment réaliser une macro basique, peut etre avec un bouton ? je n'ai pas trouvé de tuto assez simple pour moi pour démarrer.

Denis 132 : si word peut le faire , je pense que se serait plus simple non ? Mais comment faire pour chercher une nom en particulier dans un tableau et choisir les colonnes en fonction ?

Une autre question : je voulais savoir si on pouvait insérer une liste déroulante dans word à partir de données se trouvant dans une colonne d'un tableau excel. car jusqu'ici dans word il faut ajouter les noms des éléments un à un dans la boite liste déroulante. Or celle que j'ai dans excel est vraiment très longue, enfin ce n'est pas une liste déroulante, c'est une colonne avec pas moins de 1000 lignes. ou bien peut on dire à word d'aller chercher une référence dans le tableau et de mettre à un endroit dans word les données s'y rattachant.
 

loulouange

XLDnaute Occasionnel
Re : Générer des courriers types word à partir d'excel

Je me permets de relancer le sujet :

je recherche en priorité réponse à ma question deux à savoir

Une autre question : je voulais savoir si on pouvait insérer une liste déroulante dans word à partir de données se trouvant dans une colonne d'un tableau excel. car jusqu'ici dans word il faut ajouter les noms des éléments un à un dans la boite liste déroulante. Or celle que j'ai dans excel est vraiment très longue, enfin ce n'est pas une liste déroulante, c'est une colonne avec pas moins de 1000 lignes. ou bien peut on dire à word d'aller chercher une référence dans le tableau et de mettre à un endroit dans word les données s'y rattachant.

Merci d'avance pour votre aide.
 

Yaloo

XLDnaute Barbatruc
Re : Générer des courriers types word à partir d'excel

Bonjour,

Dans ta base, il faut que tu indiques dans une colonne quel type de courrier tu veux utiliser pour la ligne. Car si j'ai bien compris, en fonction des valeurs renseignées dans cette ligne, il faut envoyer un certain type de courrier.

Ou alors, il faut choisir le type de courrier en fonction des valeurs rentrées dans la ligne ????

A+

Martial
 

loulouange

XLDnaute Occasionnel
Re : Générer des courriers types word à partir d'excel

Bonsoir Yaloo

En fait les valeurs qui m'interressent pour faire ces fusions ne changent pas : nom, prenom, adresse cp et ville, ç'est à partir de ces données que je suis amenée à faire des courriers types ou bilans; donc je voulais si on pouvait fusionner ces données en cliquant sur le courrier en question.

il y a trois courriers par exemple , relance 1 relance 2 et relance 3, est il possible de faire un bouton pour chaque qui va ouvrir le courrier type en mettant l'adresse de la personne ?
 

Yaloo

XLDnaute Barbatruc
Re : Générer des courriers types word à partir d'excel

Bonsoir loulouange,

Si j'ai bien compris, vois les fichiers ci-joints à mettre dans le même répertoire.

Dans le fichier Excel, il y a un bouton en haut à droite. Il ouvre un UserForm, il faut sélectionner un nom puis cliquer sur le document à remplir puis ouvrir.

A te relire

Martial
 

Fichiers joints

loulouange

XLDnaute Occasionnel
Re : Générer des courriers types word à partir d'excel

C'est génial Martial ce que tu as fait !!c'est exactement ce que je voudrais obtenir.

Il faudrait à présent que je comprenne comment refaire la meme chose pour rajouter mes autres modèles.

Pourrais tu m'indiquer la marche à suivre si ce n'est pas trop long et compliqué, je débute tout juste.

Encore merci pour ta disponibilité et pour ton aide précieuse.

Au plaisir de te lire.
 

Yaloo

XLDnaute Barbatruc
Re : Générer des courriers types word à partir d'excel

Bonjour loulouange,

Voici le fichier avec des explications dans l'UserForm1.

Pour les fichiers Word, je n'ai fait que rajouter les signets de 1 à 6.

Dans l'UserForm1, j'ai mis 2 exemples pour AI et AJ, si tu as plusieurs lettres avec ces données identiques mais juste avec le corps de la lettre qui change, on ne peut faire qu'une seule macro avec une variable du nom du fichier.

A te relire

Martial
 

Fichiers joints

loulouange

XLDnaute Occasionnel
Re : Générer des courriers types word à partir d'excel

Bonsoir Martial,

Je te remercie pour ta réponse et pour ton fichier explicatif, je vais l'étudier attentivement, je reviendrais te dire si j'ai pu assimiler la procédure.

Bonne soirée.
 

loulouange

XLDnaute Occasionnel
Re : Générer des courriers types word à partir d'excel

Bonjour Yaloo, bonjour le forum,

J'ai étudié ton fichier avec tes explications, qui sont très claires d'ailleurs, mais je n'ai pas vu dans le contenu comment les champs d'excel des colonnes 1 à 6 donc A à F se mettaient automatiquement au bon emplacement dans word. Je suis allée dans le document word pour voir les signets en faisant alt+f9 mais à l'endroit de l'adresse du destinataire je ne vois rien. Comment as tu indiqué l'endroit exact ?

D'autre part, est il possible du coup de remplacer ma liste déroulante "civilité" du document word par un champ excel et qui me permettrait par la suite de garder les fonctions que j'ai mis en place concernant le renvoi du champ dans le corps de la lettre et aussi les accords avec les verbes et adjectifs? si c'est possible il faudrait que je rajoute la colonne civilité dans excel d'ailleurs.

J'espère que j'ai été assez claire dans ma demande.

Encore merci pour ton aide.

Bon dimanche.
 

Yaloo

XLDnaute Barbatruc
Re : Générer des courriers types word à partir d'excel

Bonjour loulouange, le forum,

Dans les fichiers Word, j'ai mis des signets qui commencent toujours par "signet" puis un N°, ce numéro correspond à la colonne moins 1 de la ListBox1 (puisque la ListBox1 commence à 0) et donc du fichier Excel.

Donc quand on écrit :
For i = 1 To 6
.Bookmarks("Signet" & i).Range = ListBox1.Column(i - 1)
Next
Pour chaque colonne prenant la valeur de i, le signet i prends la valeur de la ListBox1 colonne i-1 (puisque ça commence à 0).

Pas évident d'expliquer tout ça par écrit :eek:

Pour la civilité, tu peux faire la même chose. C'est le même principe, le mieux est de bien définir ce que tu vas avoir dans tes fichiers Word et ensuite faire les macros en conséquence.

Dans le fichier ci-dessous, il n'y a qu'une seule macro (envoi) avec la variable du nom de fichier. Le but est de n'avoir qu'une seule macro, si tu veux changer un truc, tu ne le fais qu'une seule fois. Le nom du fichier est inclus dans les macros des boutons.

A te relire

Martial
 

Fichiers joints

loulouange

XLDnaute Occasionnel
Re : Générer des courriers types word à partir d'excel

Bonsoir Yaloo,

Je te remercies pour ta réponse, je suis en train de faire des essais, je reviendrais donner des nouvelles.

Bonne soirée.
 

loulouange

XLDnaute Occasionnel
Re : Générer des courriers types word à partir d'excel

bonjour,

Je n'ai pas abandonné mon projet mais j'ai pas eu beaucoup de temps ces derniers temps.

Toutefois, j'y ai travaillé mais il faut que je comprenne mieux le fonctionnement de la création des boutons car j'ai fait des bêtises. Là mon bouton "GO" ne fonctionne plus, et comme j'ai fait des modification sur la présentation du tableau je ne voudrais pas tout perdre. Est il possible de remettre la formule concernant le bouton ? j'ai gardé le fichier d'origine intact.

Par contre, pour ce qui concerne l'accord avec les adjectifs et verbes, il faut faire la formule dans excel au préalable ou dans word ?

Encore merci
 

Yaloo

XLDnaute Barbatruc
Re : Générer des courriers types word à partir d'excel

Bonjour Loulouange,

Si tu as fait des modifications de présentation dans ton tableau, il faut sûrement modifier des lignes de code dans la macro.

Pourrais-tu remettre le fichier modifié ? Au moins la base.

Concernant les accords je ne vois pas trop où il y a des accords à faire dans tes fichiers Word.

A te relire

Martial
 

loulouange

XLDnaute Occasionnel
Re : Générer des courriers types word à partir d'excel

merci Martial d'etre encore là pour m'aider.

je remets ici le répertoire avec les lettres types et la base de données sources que j'ai modifiée.

j'ai rajouter des macros de tri alphabétique, j'ai réussi à faire en sorte que les données de la feuille "genéral" soit reproduite sur la feuille2. J'ai voulu par la suite faire trois feuilles pour chaque conseiller "cb" "el" "em" mais je n'ai pas trouvé la formule permettant de dire que par exemple

dans la feuille général si je choisis dans la liste déroulante "CB" dans la colonne "CT"
la ligne se recopie dans la feuille "CB", idem pour les autres conseillers.

Je ne sais pas si je suis bien claire.
Au sujet de la liste déroulante est il possible de mettre les noms de couleurs différentes ?

Pour en revenir au bouton, j'ai voulu formuler les noms comme "AI" ou "AJ" du coup j'ai du réajuster les bordures et là j'ai fait un peu n'importe quoi désolée.

Ah et j'oubliais pour l'histoire des accords, j'ai bien compris comment tu avais fait pour mettre les signet dans la lettre word au niveau de l'adresse, j'ai d'ailleurs rajouter la civilité qui manquait;

Mais si peux voir mes lettres d'origines en début de post, tu peux voir dans word que j'ai mis des champs avec des conditions par rapport à la liste de contrôle civilité que j'avais mise auparavant et qui à présent n'existe plus.

Donc à présent je ne sais pas comment recopier la civilité en début et dans la formule de politesse; ainsi que faire les accord "é" et "ée".

Voila ou j'en suis j'ai encore du boulot, mais j'y arriverais....
 

Fichiers joints

Yaloo

XLDnaute Barbatruc
Re : Générer des courriers types word à partir d'excel

Bonjour loulouange,

Pour l'envoi des données dans les feuilles CB, EL et EM. Tu veux envoyer uniquement ce qui concerne CB ou ce qui concerne EL et enfin ce qui concerne EM dans les feuilles concernées ? C'est bien ça ? Car actuellement, tu envoies toutes les lignes dans la même feuille.

Pour la couleur, avoir de la couleur dans la liste déroulante, il ne me semble pas que ce soit possible, pour mettre par contre de la couleur dans la cellule ou sur toute la ligne, il faut faire une mise en forme conditionnelle. Dis-moi ce que tu souhaites exactement.

Pour le moment je n'ai pas trop réfléchit aux accords mais il doit être possible de créer un signet et si dans la colonne B il est inscrit Madame on met un e au signet. A voir ....

Réponds à mes premières questions, et je te réponds demain dans la journée.

A te relire

Martial
 

loulouange

XLDnaute Occasionnel
Re : Générer des courriers types word à partir d'excel

Bonjour Martial,

Oui c'est bien ça, j'aimerais avoir une feuille par conseiller "CB" "EL" et "EM" où l'on trouverait leur bénéficiaire respectifs.

Pour les couleurs, c'est vrai que j'aurais préféré que se soit la couleur de la police qui change. mais bon si ce n'est pas possible à la limite juste la cellule, mais ça risque de charger un peu trop car je suis amenée à coloriser des lignes entière avec couleur différentes selon le stade de l'accompagnement.

Ca serait super s'il était possible de faire un signet pour les accords, et aussi pour répéter le signet 1 celui de civilité, car j'ai voulu le faire et donc dans word je l'avais mis aux endroits souhaités mais ça ne le prend qu'une fois. A moins de dire que la colonne civilité est égale à un autre signet que le 1 ?

Sinon lorsque je vais dans "visualiser le code" je m'y perd un peu et je n'arrive plus à trouver le code que tu avais fait avec tes explications, je l'avais copier coller dans un format word pour le retrouver rapidement :


Option Explicit

Private Sub CommandButton1_Click()
Dim oWord As Object
Dim oDoc As Object
Dim i&
'Si aucune ligne de la ListBox1 n'est sélectionnée alors on a un message puis on sort
If ListBox1.ListIndex = -1 Then MsgBox "Il faut sélectionner une personne": Exit Sub
'On ferme l'UserForm1
Unload Me
'Détermine l'Objet oWord qui sera l'application
Set oWord = CreateObject("Word.Application")
'Détermine l'Objet oDoc qui sera le document Word de l'application oWord
'On en profite pour l'ouvrir en même temps
'Il faut mettre le chemin d'accès et le nom du fichier avec son extension
'Le chemin d'accès, dans ce cas-là, est le même que celui de ce fichier Excel
Set oDoc = oWord.Documents.Open(ThisWorkbook.Path & "\Convov2 suite à AJ avec rdv ateliers.docx")
'Avec ce document
With oDoc
'Pour i de 1 à 6, puisque nous avons 6 signets dans le document Word
'et 6 colonnes dans le fichier Excel
For i = 1 To 6
'Le signet prend la valeur de la colonne, on fonction de i
.Bookmarks("Signet" & i).Range = ListBox1.Column(i - 1)
Next
End With
'On rend Word visible
oWord.Visible = True
End Sub
'Idem que la macro ci-dessus, on change juste le nom du fichier
Private Sub CommandButton2_Click()
Dim oWord As Object
Dim oDoc As Object
Dim i&
If ListBox1.ListIndex = -1 Then MsgBox "Il faut sélectionner une personne": Exit Sub
Unload Me
Set oWord = CreateObject("Word.Application")
Set oDoc = oWord.Documents.Open(ThisWorkbook.Path & "\Convov2 suite à AI avec rdv ateliers.docx")
With oDoc
For i = 1 To 6
.Bookmarks("Signet" & i).Range = ListBox1.Column(i - 1)
Next
End With
oWord.Visible = True
End Sub
Private Sub UserForm_Initialize()
Dim i&, j&, DerL&, Plage
'Cherche la dernière ligne de la colonne A
'Comme la feuille n'est pas précisée, il s'agit de la feuille active
DerL = [A65536].End(xlUp).Row
'Détermine les données à mettre dans la ListBox1
'Colonne de A à F, et ligne de 3 à la dernière ligne
Plage = Range("A3:F" & [A65536].End(xlUp).Row)
'Remplis la ListBox1 avec les valeurs de Plage
ListBox1.List = Plage
''''On pourrait aussi écrire en une seule ligne, mais moins facile à comprendre
'ListBox1.List = Range("A3:F" & [A65536].End(xlUp).Row).Value
End Sub

Private Sub Worksheet_Change(ByVal Target As Range)
If Not Intersect(Target, Range("E2:E65536")) Is Nothing Then
If Target.Value = "Ready for upload" Then
With Sheets("Commande traitée")
LigVide = .Range("B65536").End(xlUp).Row + 1
.Cells(LigVide, 2) = Target.Offset(0, -4).Value
.Cells(LigVide, 3) = Target.Offset(0, -3).Value
.Cells(LigVide, 4) = Target.Offset(0, -2).Value
.Cells(LigVide, 10) = Target.Offset(0, -1).Value
End With
End If
End If
End Sub

Entre temps je l'avais modifié car j'ai rajouté le signet pour civilité, mais là je le vois plu dans excel, je m'y perds un peu avec l'arborescence de la liste.

Dans l'attente de te lire.

Je te souhaite une bonne journée.
 

Yaloo

XLDnaute Barbatruc
Re : Générer des courriers types word à partir d'excel

Re,

Pour le moment je me penche plutôt sur l'envoi des données dans les feuilles respectives.

Dans ce que tu as fait, tu envoies toutes les données de la feuille "Général" colonnes de B à G dans les feuilles "Conseiller", le problème est si tu as déjà des données dans les feuilles "Conseiller" notamment dans les colonnes de H à X, que fait-on ? Car les lignes risquent de ne pas être copiées dans le même ordre.

Comme tu as construit ta macro avec un Private Sub Worksheet_Change(ByVal Target As Range) je suppose que dès que l'on change une donnée dans l'onglet "Général", on copie toutes les données dans les feuilles "Conseiller".

Sinon, nous avons la possibilité de copier uniquement la ligne qui comprend des modifications. C'est-à-dire que l'on modifie une ligne existante ou que l'on créer une nouvelle ligne lorsque la ligne dans la feuille "Conseiller" n'existe pas.

Un autre problème risque d'arriver si tu modifies le Nom (par exemple, parce que tu as fait une faute d'orthographe) cela va créer une nouvelle ligne.

De même, si tu décides de changer le conseillé, car erreur de saisie, la ligne sera copiée une première fois dans la feuille d'un conseiller puis du nouveau.

Il me semble qu'il serait plus judicieux de mettre un N° d'Identifiant, en colonne A, il suffit de mettre Id, et les chiffres de 1 à .....

A toi de me dire :)

Martial
 

Discussions similaires


Haut Bas