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: 246
  • Convov2 suite à AI avec rdv ateliers.docx
    154.9 KB · Affichages: 178
  • Convov2 suite à AJ avec rdv ateliers.docx
    152 KB · Affichages: 224
  • 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: 171
  • Convov2 suite à AJ avec rdv ateliers.docx
    152 KB · Affichages: 230

Yaloo

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

Bonjour Loulou,

Pour l'erreur, le problème vient peut-être du fait que le fichier "Source" ne soit pas ouvert dans la même instance que celle du fichier "Suivi", donc pour VBA le fichier n'est pas ouvert, si cela recommence il faudrait que tu notes à quelle ligne se produit l'erreur.

Le lenteur d'affichage vient de tes Mises en Forme Conditionnelle, car à chaque fois que tu changes une cellule, la MFC est calculée.
Pour remédier à ça, en début de macro Activate de la feuille "Affectation", il faut mettre Application.Calculation = xlCalculationManual puis à la fin Application.Calculate.

De plus, j'ai regardé le reste de tes macros, dans les macros "Activate" il faut mettre :
i = [A65536].End(xlUp)(2).Row au lieu de i = [A65536].End(xlUp)(7).Row dans la feuille "Suivi"
i = [A65536].End(xlUp)(2).Row au lieu de i = [A65536].End(xlUp)(5).Row dans la feuille "Typo"

Vois le fichier

A+

Martial
 

Pièces jointes

  • suivi ateliers avec ID - 29-10 vierge (Martial).xlsm
    289.7 KB · Affichages: 51
  • suivi ateliers avec ID - 29-10 vierge (Martial).xlsm
    289.7 KB · Affichages: 61
  • suivi ateliers avec ID - 29-10 vierge (Martial).xlsm
    289.7 KB · Affichages: 54

Yaloo

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

Re,

Pour éviter l'erreur, si elle vient bien des instances d'Excel, tu peux aussi ouvrir le fichier en cliquant sur ton bouton. J'en ai profité pour réduire à une seule macro ton rapatriement de tes fichiers source1 et source2.

Voir dans le module2

A+

Martial
 

Pièces jointes

  • suivi ateliers avec ID - 29-10 vierge (Martial).xlsm
    292.1 KB · Affichages: 48
  • suivi ateliers avec ID - 29-10 vierge (Martial).xlsm
    292.1 KB · Affichages: 47
  • suivi ateliers avec ID - 29-10 vierge (Martial).xlsm
    292.1 KB · Affichages: 46

loulouange

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

Bonjour Loulou,

Pour l'erreur, le problème vient peut-être du fait que le fichier "Source" ne soit pas ouvert dans la même instance que celle du fichier "Suivi", donc pour VBA le fichier n'est pas ouvert, si cela recommence il faudrait que tu notes à quelle ligne se produit l'erreur.

En fait, l'étape est la suivante : les données sont insérées dans un premier temps dans les fichiers sources1 ou sources2, puis ensuite reportées dans le fichier "suivi atelier" d'où l'idée d'avoir mis en place ces bouton pour recopier au fur et à mesure la dernière ligne dans le fichier destinataire. Donc en principe les fichiers sources sont toujours ouverts avant.
C'est pourquoi je voulais régler le problème lors d'oubli de cette manipulation : donc de pouvoir rajouter la dernière ligne manuellement dans le fichier "suivi atelier" sans avoir le problème de tri. Le problème est à présent réglé.

Donc je ne pense pas que le problème venait de là.

Le lenteur d'affichage vient de tes Mises en Forme Conditionnelle, car à chaque fois que tu changes une cellule, la MFC est calculée.
Pour remédier à ça, en début de macro Activate de la feuille "Affectation", il faut mettre Application.Calculation = xlCalculationManual puis à la fin Application.Calculate.
.

Merci pour cette astuce, c'est bien plus rapide à présent :)

De plus, j'ai regardé le reste de tes macros, dans les macros "Activate" il faut mettre :
i = [A65536].End(xlUp)(2).Row au lieu de i = [A65536].End(xlUp)(7).Row dans la feuille "Suivi"
i = [A65536].End(xlUp)(2).Row au lieu de i = [A65536].End(xlUp)(5).Row dans la feuille "Typo"

Désolée, je m'embrouille les pinceaux. J'ai pourtant repris tes explications dans un de tes précédents posts car justement j'avais un problème dans l'une de ces deux feuilles qui contenait au départ les lignes ci dessus mais je ne sais pourquoi les données ne se recopiées pas sur la bonne ligne, donc j'avais modifié dans le code, et là cela a fonctionné.
Bon à présent tout semble etre rentré dans l'ordre.

J'ai regardé ton deuxième fichier dans lequel tu as regroupé les deux boutons dans un seul module, bien qu'il n'ai besoin de vérifier si les fichiers sources soient ouverts puisqu'au départ je les utilise, j'ai voulu toutefois tenter de le mettre en pratique mas là je sèche et ce n'est aps faute d'avoir essayer toutes les possibilités.

Je te joins le fichier afin que tu puisses me dire où sont mes erreurs.

A te relire.

Loulou
 

Pièces jointes

  • suivi ateliers avec ID - 29-10 vierge (Martial) ESSAI.xlsm
    281.8 KB · Affichages: 49

Yaloo

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

Bonjour Loulou,

J'ai regardé ton deuxième fichier dans lequel tu as regroupé les deux boutons dans un seul module, bien qu'il n'ai besoin de vérifier si les fichiers sources soient ouverts puisqu'au départ je les utilise, j'ai voulu toutefois tenter de le mettre en pratique mas là je sèche et ce n'est aps faute d'avoir essayer toutes les possibilités.

Je te joins le fichier afin que tu puisses me dire où sont mes erreurs.

Tes boutons sont rattachés à une macro (chacun à sa macro : MTP ou Pignan), dans chaque macro, on indique le nom de la macro Coller suivi du nom du fichier à ouvrir ainsi que du N° de la colonne pour le X.

Ce qui donne :
VB:
Sub MTP()
'Macro + Fichier + N° colonne
Coller "sources1.xlsm", 22
'On pourrait aussi écrire :
Coller("sources1.xlsm", 22)
End Sub


Sub Pignan()
Coller "sources2.xlsm", 23
End Sub

VB:
'Macro(Nom du fichier, N° colonne)
Sub Coller(Fichier As String, c&) 'Fichier étant le nom du fichier, c étant le N° colonne pour le X

Nous récuperons le nom du classeur (Source1.xlsm ou Source2.xlsm) dans la variable Fichier, et le N° de colonne (22 ou 23) dans la variable c

Ensuite dans la macro par elle-même, lorsque l'on a besoin du nom du classeur, on utilise la variable Fichier et c pour le N° de colonne.

En espérant avoir répondu à tes questionnements.

A+

Martial
 

loulouange

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

Bonjour Martial,

Merci pour tes explications, c'est bien ce que je pensais avoir compris dans l'ensemble, mais c'est au niveau de la façon demander à excel d'ouvri soit l'un ou l'autre fichier sources, j'ai tenté plusieurs possibilité mais rien n'y fait.

Mais le plus gros problème que je rencontre actuellement est un gros bug avec mon pc.
Mon curseur est incontrôlable, et je me demande si cela ne vient pas d’excel et plus particulièrement de la macro qui se trouve dans mon fichier.

En effet, j’ai ce problème depuis deux semaines environ, cela arrive d’un coup et cela persiste quelques temps meme après démarrage du pc et puis disparaît. Un jour j’ai cru que cela venait d’excel car c’était apparu suite à son utilisation mais je n’étais pas sure.

Dès que cela se produit, que se soit dans excel ou dans n’importe quel programme ou navigateur de mon pc, je ne peux plus rien faire tout défile trop vite. j’ai essayé de voir si c’était un problème matériel ou autre mais je n’ai rien trouvé. Et au démarrage du pc j’ai une série de BIP.

Après une pause de quelques jours, hier après midi j’ai voulu retravailler sur mon fichier excel pour arriver à comprendre la macro avec le module2, et lorsque j’ai cliqué sur le bouton « MAJ MTP » tout s’est affolé, et au lieu de la soucre1 c’est la source2 qui s’est ouverte (je sais que ma formule est totalement erronée) et là de nouveau mon curseur défile à une vitesse dans les cellules, en général de gauche à droite, je me retrouve toujours en fin de ligne ou de cellule.

sinon le code de cette macro est celui ci (cela concerne le fichier que j'ai mis en pièce jointe dans mon précédent post) :

Sub MTP()
Coller "sources1.xlsm", 22
End Sub
Sub Pignan()
Coller "sources2.xlsm", 23
End Sub

Sub Coller(Fichier As String, c&) 'Fichier étant le nom du fichier, c étant le N° colonne pour le X
Dim derlig&, i&, j&, Chemin$, Ouv As Boolean
Application.ScreenUpdating = 0: Application.EnableEvents = 0
Chemin = ThisWorkbook.Path & "\"

On Error Resume Next
'Job75 : https://www.excel-downloads.com/thr...vers-un-autre-fichier-de-maniere-auto.212488/
'---si le fichier source est fermé on l'ouvre---
If IsError(Workbooks(Fichier)) Then
Workbooks.Open "C:\Lou\sources1.xlsm"
Workbooks.Open "C:\Lou\sources2.xlsm"
Ouv = True
End If
On Error GoTo 0
'-----------------------------------------------
ThisWorkbook.Activate
Set Source = Workbooks("sources1.xlsm")
Set Source = Workbooks("sources2.xlsm")
Sheets(6).Activate
i = Range("A65536").End(xlUp)(2).Row
With Source.Sheets(3)
derlig = .[D65536].End(xlUp).Row
Cells(i, 4) = .Range("D" & derlig)
Cells(i, 5) = .Range("E" & derlig)
Cells(i, 11) = .Range("F" & derlig)
Cells(i, 8) = .Range("G" & derlig)
Cells(i, c) = "X"
End With
If i > 3 Then
Cells(i, 1) = Cells(i - 1, 1) + 1
Else
Cells(3, 1) = 1
End If
j = Sheets(1).[A65536].End(xlUp)(2).Row
Sheets(1).Cells(j, 1) = Cells(i, 1)

'---fermeture du fichier s'il a été ouvert---
If Ouv Then
Application.EnableEvents = False
Workbooks(Fichier).Close False
Application.EnableEvents = True
End If
'--------------------------------------------
Application.EnableEvents = -1
Sheets(1).Activate
Application.ScreenUpdating = -1

End Sub

Penses tu que cela puisse venir de l’éxecution de la macro ?un virus ?

Voila pour l’instant mon pc fonctionne, je n’ose plus utiliser ce fichier, les autres versions ne me posent pas de problème.

En espérant que tu puisses comprendre ce qui m’arrive.

Dans l’attente de te lire.

Loulou
 

Yaloo

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

Bonjour Loulou, le forum,

Je ne vois pas pourquoi cela viendrait du fichier car il n'y a pas d'action sur le curseur et cela n'interférait pas sur les autres applications.

Peut-être un virus, mais je ne peut pas t'en dire plus, je ne suis pas très fort là-dedans.

As-tu essayé le fichier sur un autre PC, car chez moi, je n'ai pas de soucis.

A+

Martial
 

loulouange

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

Merci Martial pour ta rapide réponse.

As tu essayé de lancer la macro via le bouton MTP ? je ne sais pas si tu avais gardé mon fichier sources1 ?

Mais je t'avoue que je ne comprends pas non plus, mais en tout cas hier cela s'est produit en lançant la macro, je pensais aussi à mon fichier sources2 ? mais bon je m'en suis toujours servi sans problème.

Sinon je n'ai pas essayé sur un autre pc, par crainte d'infecter ce dernier également si c'est un virus ou de déclencher ce bug.

Y a t'il moyen de vérifier si une macro ou un fichier excel contient un virus ?
 

Yaloo

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

Re,

J'ai essayé de lancer la macro aussi bien par le bouton que par VBE, il n'y a pas de problème de curseur.

Je viens de vérifier les fichiers "suivi ateliers avec ID - 29-10 vierge (Martial)" et "sources1" avec mon antivirus et sur www.virustotal.com qui est un site permettant de scanner des fichiers avec plusieurs antivirus, et il n'y a pas de virus dans ces 2 fichiers (enfin pas de virus connus :eek:).

S'il ne s'agit que d'un problème de souris qui bouge, n'y aurait-il pas un problème avec ton driver de souris, cela m'est déjà arrivé.

A+
 

loulouange

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

re Martial,

Sympa d'avoir pris le temps de vérifier mes fichiers. Je vais aller sur ton site pour scanner mon fichier sources2.

Je pensais que peut être c'était dû à la macro car je lui demande d'ouvrir les deux fichiers sources en même temps apparemment (ce qui n'est pas bon je suppose) et donc au final je me retrouve avec le fichier soucces2 ouvert, peut être que cela crée un conflit lors de l'ouverture des deux fichiers ?

Pour la question de problème matériel, j'ai essayé d'étudier cette piste, j'ai enlever le port usb de ma souris (sans fil) et toujours le même problème. J'ai tenté aussi désactiver mon clavier et là pareil.

J'ai fait un scan, antivirus, vérifier au niveau de la mémoire mais je n'ai rien trouvé.

Et là depuis ce matin, aucun problème.

Je vais donc vérifier mon fichier sources2, et retenter avec l'autre fichier "suivi ateliers" où les macros ne sont pas regroupées dans un seul module voir si cela se reporduit.

Encore merci de ta disponibilité et de ton aide.

A+

Loulou
 

loulouange

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

Bonjour Martial, le forum,

Depuis la dernière fois aucun problème de pc, je n'ai pas retenter le fichier avec la macro qui regroupe les deux boutons.

J'ai scanné via ton site mon fichier sources2 et aucun virus détecté.

Je préfère rester sur l'avant dernière version du fichier contenant les modules2 et modules4, qui fonctionne parfaitement.

Je vais encore t’embêter avec un autre soucis que je viens de constater.

J'ai dans ma feuille "Affectation" dans la colonne 'J' "Bilan date d'échéance" une formule permettant de calculer le mois suivant la date indiquée dans la colonne 'H'. je te mets la formule ci-dessous car quand la feuille se met à jour elle disparaît :

Code:
=SI(ESTVIDE(I3);"";FIN.MOIS(I3;-1))
A ce sujet : est il normal que je sois obligée de cliquer sur enregistrer pour voir le résultat, il ne se fait pas instantanément ?

Etant donné que la feuille "Base" renvoie les données dans la feuille "Affectation", la formule est remplacée par le résultat.

J'ai cherché sur le forum, je crois qu'il faut utiliser ceci " Shift:=xlDown" mais je ne sais pas trop comment l'adapter dans mon cas.

Je te joins le fichier.

Au plaisir de te lire.

A+

Loulou
 

Pièces jointes

  • suivi ateliers avec ID - 29-10 (Martial) (2).xlsm
    299.5 KB · Affichages: 44

loulouange

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

Bonjour Martial,

Je pense avoir trouvé la solution, peux tu me dire si cette méthode est fiable et ne risque pas d'occasionner un décalage au niveau de la cellule ?

J'ai supprimé la formule qui se trouvait dans le feuille "affectation" et je l'ai insérée dans la feuille "base" :

Code:
=SI(ESTVIDE(P7);"";FIN.MOIS(P7;-1))

Puis dans la macro, j'ai supprimé le renvoie des données de la colonne J de la feuille "affectation" vers la colonne AB de la feuille "Base".

Cela semble bien fonctionner, ci-joint fichier. Toutefois lorsque je rentre la date dans la colonne "I" de la feuille "affectation" le résultat dans la cellule "J" ne s'affiche pas tout de suite, il faut bien que je fasse au moins 2 rafraîchissements, je ne sais pas si c'est normal.


A+ pour te relire et bon week end.

Loulou
 

Pièces jointes

  • suivi ateliers avec ID - 29-10 (Martial) version 14-11-13.xlsm
    314.2 KB · Affichages: 42
  • suivi ateliers avec ID - 29-10 (Martial) version 14-11-13.xlsm
    314.2 KB · Affichages: 51
  • suivi ateliers avec ID - 29-10 (Martial) version 14-11-13.xlsm
    314.2 KB · Affichages: 51

Yaloo

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

Bonjour Loulou, le forum,

Vois les macros de la feuille Affectation, j'y ai inséré une condition si la date de fin est saisie ou non.

A+

Martial
 

Pièces jointes

  • suivi ateliers avec ID - 29-10 (Martial) version 14-11-13.xlsm
    309.2 KB · Affichages: 46
  • suivi ateliers avec ID - 29-10 (Martial) version 14-11-13.xlsm
    309.2 KB · Affichages: 52
  • suivi ateliers avec ID - 29-10 (Martial) version 14-11-13.xlsm
    309.2 KB · Affichages: 51

loulouange

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

Bonjour Martial,

Merci pour ton fichier avec les nouvelles macros que j'ai étudiées avec attention.

Etant donné que le résultat de la colonne "date d'échéance" de la feuilles "affectation" se fait via la macro, du coup la formule que j'avais insérées dans la feuille "Base" est inutile donc. Mais si je la supprime, la cellule restera vide.
puisque dans la macro on ne fait pas la copie de cette cellule de la feuille "affectation" vers "base" et vice versa :

voici les correspondances :

Code:
.Cells(j, 28) = Cells(i, 10)
et
Code:
Cells(i, 10) = .Cells(j, 28)

Le fait que le résultat ne se fasse pas dans la feuille "Base" ne pose pas de problème ?

Autrement, la méthode que j 'avais utilisée n'était pas fiable ?
Est il indispensable de renvoyer toutes les cellules d'une ligne se trouvant dans la feuille "Base" vers "Affectation" ?

A te relire.

Loulou
 
Dernière édition:

Yaloo

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

Bonjour Loulou, le forum,

Le fait que le résultat ne se fasse pas dans la feuille "Base" ne pose pas de problème ?

Non, pas de problème du tout.

Autrement, la méthode que j 'avais utilisée n'était pas fiable ?

La méthode que tu as utilisée était tout à fait correcte et fiable, mais avec les différentes macro Activate et Change les cellules ne se mettaient pas à jour de suite, c'est pourquoi j'ai préféré utiliser le calcul dans la macro.

Est il indispensable de renvoyer toutes les cellules d'une ligne se trouvant dans la feuille "Base" vers "Affectation" ?

Je ne sais pas c'est à toi de voir, ce qu'il est bon de copier dans la feuille Affectation, je t'en laisse seule juge ;), pour la technique tu sais comment faire maintenant :D.

A+

Martial
 

loulouange

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

Bonjour Martial, le forum,

Ca ne se voit pas trop mais j'arrive à comprendre certaines choses ;) et j'en apprends beaucoup, mais je dois aussi mal m'exprimer dans mes questions.

Pour la question de savoir si ma méthode était bonne c'est parce que je l'avais utilisée pour un autre fichier qui contenait plusieurs cellules avec différentes formules également. Donc pour ce fichier je vais laisser tel quel pour le moment, il faudrait que j'étudie les différentes possibilités avec Application.WorksheetFunction.

Pour mon autre question :

Est il indispensable de renvoyer toutes les cellules d'une ligne se trouvant dans la feuille "Base" vers "Affectation" ?

En fait je pensais que pour que les lignes et colonnes soient bien alignées donc éviter les décalages, il fallait impérativement faire un renvoie e de toutes les lignes avec toutes les colonnes de la feuille "active" vers la feuille "base" et vice versa.

J'ai bien saisi que la feuille "base" avec l'id permettait d'éviter les problèmes de décalage et aussi de pouvoir mettre à jour les tableaux des autres feuilles si une modification intervenait dans l'une d'elles.

Donc ce que j'en conclue c'est qu'il faut que toutes colonnes de chaque feuille soient renvoyées dans la feuille "Base".
avec la commande Worksheet_Change(ByVal Target As Range)

Par contre si je n'utilise pas la commande Worksheet_Activate() qui permet de renvoyer les données de la feuille "Base" vers les autres feuilles cela n'aura pas d'incidences si ce n'est que les modifications ne se feront pas sur toutes feuilles.

Ce qui m'a perturbée c'est que suite à la formule de calcul que tu as insérée dans la macro :

Etant donné que le résultat de la colonne "date d'échéance" de la feuilles "affectation" se fait via la macro, du coup la formule que j'avais insérées dans la feuille "Base" est inutile donc. Mais si je la supprime, la cellule restera vide.
puisque dans la macro on ne fait pas la copie de cette cellule de la feuille "affectation" vers "base" et vice versa :

voici les correspondances :

Code :
.Cells(j, 28) = Cells(i, 10)
et
Code :
Cells(i, 10) = .Cells(j, 28)

J'ai bien vu que dans la macro on indiquait le résultat dans la feuille "affectation" variable "i" si la cellule date était remplie mais on ne met pas le renvoie dans la feuille "Base" variable "j".

A te relire.

Loulou
 
Dernière édition:

Discussions similaires

Réponses
15
Affichages
665
Compte Supprimé 979
C

Statistiques des forums

Discussions
311 725
Messages
2 081 940
Membres
101 845
dernier inscrit
annesof