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.
 

Pièces jointes

  • données sources.xls
    29.5 KB · Affichages: 247
  • Convov2 suite à AJ avec rdv ateliers.docx
    152 KB · Affichages: 230
  • Convov2 suite à AI avec rdv ateliers.docx
    154.9 KB · Affichages: 171
  • Convov2 suite à AJ avec rdv ateliers.docx
    152 KB · Affichages: 225
  • Convov2 suite à AI avec rdv ateliers.docx
    154.9 KB · Affichages: 179
  • Convov2 suite à AJ avec rdv ateliers.docx
    152 KB · Affichages: 225
  • Convov2 suite à AI avec rdv ateliers.docx
    154.9 KB · Affichages: 179

loulouange

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

Bonjour Martial,

Merci infiniment !!!

Comme tu dis "c'est compliqué". Mais je fais de mon mieux pour tenter de comprendre.

J'ai regardé mon code et le tien, c'est donc le fait d'avoir mis en début de ligne

with oword
wito odoc

que lorsque je faisais la fusion les éléments se recopiaient sur lui même et non dans le fichier de destination ?

ou bien c'est justement par rapport au "." que j'avais omis de mettre comme ci-dessous :

With oXls.Sheets(1)
.[C5] = ListBox1.Column(1)
.[C6] = ListBox1.Column(2)


D'ailleurs, dans ton code du coup tu n'as pas mis "with oXls" et donc pas de "."

Donc si par exemple je devais renvoyer les données dans la feuille2 du classeur de destination j'aurais été obligée dans ce cas ci de mettre "With oXls.Sheets(2)" ?

Désolée si je te poses encore toutes ces questions, j'espère ne pas trop abuser de ta patience et de ton précieux temps.

Encore merci pour ton aide.

A bientot

Loulou
 

Yaloo

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

Bonsoir Loulou,

Pas de problème pour les questions, le mieux est que tu comprennes pour pouvoir faire toute seule.

Je ne mets pas With ..... .[C5] = ... car comme nous travaillons sur le classeur actif et la feuille active, il n'y a pas de raison de préciser où copier.
Si tu veux copier dans la Feuille 2, tu peux écrire With Feuil2 .[C5] = ... ou With Sheets(2) .[C5] = ...
Si tu veux écrire dans un classeur qui n'est pas actif, il faut mettre le nom du fichier ET le nom de la feuille, donc

With Workbooks("Ton fichier").Sheets(2)
.[C5] = ...


ou

With oXls.Sheets(2)
.[C5] = ...


ou alors

With Workbooks("Ton fichier")
.Sheets(2).[C5] = ...


Avec cette seconde solution tu peux écrire dans plusieurs feuilles :
With Workbooks("Ton fichier")
.Sheets(1).[B5] = ...
.Sheets(2).[C5] = ...


En espérant d'aiguiller et non te noyer ;) dans les exemples

A+

Martial
 

loulouange

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

Bonjour Martial,

C'est vraiment très sympa de ta part de prendre de ton temps pour bien m'expliquer les choses, j'apprécie beaucoup o)

C'est très clair, même s'il y a beaucoup d'info à assimiler, d'autant plus que l'on peut présenter les formules de plusieurs manières.

Quand tu parles du classeur actif, c'est le fichier de destination donc ?

Dans mon cas, dans le code on demande d'ouvrir le document au préalable donc c'est pour cela que l'on ne met pas "With"

Avec cette ligne :
With Workbooks("Ton fichier").Sheets(2)
.[C5] = ...

Je peux transférer les données sans être obligée d'ouvrer le fichier destination c'est bien ça ?

Je pense avoir bien saisi... enfin j'espère !

Est ce que peux me permettre d'abuser encore un peu de ton temps, je cherche en mettre dans mes feuilles les code de formules excel. Tu m'avais montré déja comment faire pour calculer une échance à partir d'une date comme ci-dessous :

Code:
 If Cells(i, 10) <> "" Then
          Cells(i, 11) = Application.WorksheetFunction.EoMonth(Cells(i, 10), -1)
        Else
          Cells(i, 11) = ""
      End If
            End If
  End With
End If
Application.DisplayAlerts = -1: Application.EnableEvents = -1
End Sub

J'essaye d'après ton exemple de trouver le code pour calculer l'age d'une personne d'après sa date de naissance, j'ai cherché sur le net, mais ce qu je trouve ne semble pas adapté car dans mon on travaille avec un ID.

Existe t'il une documentation qui donne l'équivalence des formules classiques d'excel en VBA ?

Voici ce que j'ai testé :

Code:
 If Cells(i, 10) <> "" Then
       Cells(i, 11) = Application.WorksheetFunction.DATEDIF((i,10),TODAY(),"y")), -1)
        Else
          Cells(i, 11) = ""
   End With
End If
Application.DisplayAlerts = -1: Application.EnableEvents = -1
End Sub

Bien entendu ça ne fonctionne pas grrrr


Mille merci encore.


A+

Loulou
 

Yaloo

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

Bonsoir Loulou,

Comme tu viens d'ouvrir ton classeur celui-ci est actif, donc si tu ne précises rien dans ta macro, ça va copier tes données dans la feuille active du classeur actif.
Si tu n'ouvres pas ton classeur de destination, c'est faisable mais beaucoup plus compliqué.
Si tu ouvres ton fichier destination mais qu'avant de copier tes données dans ton fichier actif, tu décides d'activer le classuer source ou un autre classeur, dans ce cas-là il faut mettre With ...

Tu peux abuser tant que tu veux, tant que je peux répondre, je le ferai:D.
Pour ta différence de date, vois les lignes de code ci-dessous :
VB:
If Cells(i, 10) <> "" Then
        Cells(i, 11) = DateDiff("yyyy", Cells(i, 10), TODAY())
         Else
           Cells(i, 11) = ""
    End With
 End If
 Application.DisplayAlerts = -1: Application.EnableEvents = -1
 End Sub
Je n'ai pas testé, mais ça doit le faire ;) pour les informations vois Ce lien n'existe plus

A+

Martial
 

loulouange

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

Re

Lorsque tu écris :

Code:
Si tu veux écrire dans un classeur qui n'est pas actif, il faut mettre le nom du fichier ET le nom de la feuille, donc

With Workbooks("Ton fichier").Sheets(2)
.[C5] = ...

Je pensais que c'était lorsque tu envoyais les données dans un classeur fermé.
Donc il faudra mettre aussi une ligne pour l'ouvrir non ?

Je te remercie pour le code concernant le calcul de l'âge, je viens de le tester, j'avais un message d'erreur qui me renvoyait sur le mot "TODAY" dans le code.
J'ai essayé en mettant "NOW"' et ça fonctionne, je ne sais pas si c'est la bonne méthode.
Toutefois, le soucis c'est qu'il ne me calcule pas l'âge à l'instant T, je veux dire l'age révolu, y 'a t'il moyen d'être plus précis ?

A te relire.

Loulou
 

loulouange

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

c'est le code que tu m'avais mis plus haut, j'ai réessayé mais toujours le message d'erreur sur TODAY
Erreur de compilation :
Sub ou Function non définie

mais lorsque je l'ai remplacé par NOW ça fonctionne mais comme je te le disais le résultat ne correspond à l'age au moment T.

je précise que dans la cellule (i,10) ma date est rentrée comme ceci : 15/09/1969
 

loulouange

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

alors j'y comprends rien

oui j'a essayé avec cette ligne :

donc avec NOW comme je le disais ça fonctionne mais l'age n'était pas précis, tout à l'heure 45

Et là j'ai recommencé, toujours avec NOW, et cette fosi j'obtiens 44 !!
toujours avec mon exemple : 15/09/1969 : donc là le résultat est correct.

donc je fais un autre essai et je mets cette fois 10/01/1969 : je devrais avoir 45 là, et bien non toujours 44 et j'ai beau raffraichir j'ai meme relancer le classeur mais c'est pareil.
 

loulouange

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

j'ai encore une tite demande et après je t’embêterais plus.

je suis en train de faire plusieurs calcul mais là je pars mal, je n'arrive jamais à tomber sur un cas similaire au mien, j'ai trouvé des codes mais cela concerne le calcul de cellules qui se suivent, mais dans mon cas elles sont discontinues.

j'ai mis ce code , pourrais tu me dire mon erreur s'il te plait

Code:
 Cells(i, 22) = Application.WorksheetFunction.Sum((i,10)+(i,12)-1)

allez cette fois je te laisse tranquille.

encore un grand merci.

A+

Loulou
 

Discussions similaires

Statistiques des forums

Discussions
315 098
Messages
2 116 190
Membres
112 679
dernier inscrit
Yupanki