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

Yaloo

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

Bonjour Loulou,

Pour les décalages entre la Base et les autres feuilles, aussi bien avec Change qu'avec Avtivate, il n'y a pas de problème si seulement certaines lignes ou colonnes sont recopiées, il faut juste renvoyer les données que l'on veut sauvegarder dans Base ou récupérer dans les feuilles. Les données sont réaffectées avec l'Id.

Pour la commande Application.WorksheetFunction. il suffit de mettre dans une cellule la formule que tu souhaites utliser en enregistrant une macro, ensuite tu ajoutes dans ta "vrai" macro, le résultat de ta macro (formule) après Application.WorksheetFunction., cela peut donner c = Application.WorksheetFunction.SUM(R[-3]C:R[-1]C)

A+
Martial
 

loulouange

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

Bonjour Martial, Le forum,

Désolée pour cette longue absence, j'ai eu de grosses galères avec mon pc, toujours cette histoire de curseur incontrôlable qui est toujours là par moment, mais je devrais changer de clavier d'ici peu (en espérant que cela soit bien l'origine du problème).

Je te remercie pour tes explications, j'ai cherché à comprendre et je dois être vraiment nulle :eek:( et vraiment désolée car je sais que tu passes du temps à m'expliquer les choses.

[Quote/] Il suffit de mettre dans une cellule la formule que tu souhaites utiliser en enregistrant une macro,[Quote/] [Quote/]

Tu veux dire quand je rentre une formule dans une cellule comme ici :

Code:
SI(ESTVIDE(P7e);"";FIN.nMOIS(P7;-1))
mais je ne comprends pas "en enregistrant une macro" ?

et lorsque tu parles de "vrai macro" c'est la ligne qui est rajoutée dans le code de la feuille ?

Sinon, je me permets de te demander encore de l'aide si tu veux bien.

Je me suis rendue compte que lorsque je mettais un format dans une cellule, par exemple dans la feuille Affectation si je mets un commentaire « info bulle » , un changement de couleur de la cellule ou de la police, lorsque je rafraichis la feuille cela disparait. Y a til un moyen pour conserver le format ?

Je te remercie d'avance pour l'aide que tu pourras m'apporter.

A te relire.

Loulou
 

Yaloo

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

Bonjour Loulou,

Ça faisait longtemps ;), j'avais eu un problème de ce type là, mon curseur se mettait dans un angle de l'écran, le problème a été réglé en changeant la souris.

Je voulais dire que pour savoir comment écrire une formule dans VBA, tu lances l'enregistreur de macro puis tu écris ta formule dans une cellule, tu arrêtes l'enregistreur de macro et tu analyses ta macro. Il y a souvent (même à chaque fois) à modifier derrière mais ça donne la base.

Pour le commentaire et les couleurs, il est normal que ceux-ci soient supprimés car toutes les données sont supprimées avec l'activation de la feuille, puis recréées en fonction de la feuille Base.

Par contre, pour les couleurs tu peux peut-être mettre des Mise en Forme Conditionnelle ?

A+
 

loulouange

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

Bonjour Martial,

Je croise les doigts pour l'instant pas de bug depuis ce matin alors qu'hier j'aurais bien balancer mon pc par la fenêtre.

Ok je comprends mieux pour la macro enregistrée, je l'avais testée pour le tri alphabétique au tout début mais quand on connait mieux le vba ça raccourcit drolement les lignes :eek:

Alors pour l'histoire des commentaires, couleurs etc... j'en profite pour revenir à ce que tu m'avais répondu dans ton précédent post.

Pour les décalages entre la Base et les autres feuilles, aussi bien avec Change qu'avec Avtivate, il n'y a pas de problème si seulement certaines lignes ou colonnes sont recopiées, il faut juste renvoyer les données que l'on veut sauvegarder dans Base ou récupérer dans les feuilles. Les données sont réaffectées avec l'Id.
Par exemple dans ma feuille "suivi" les colonnes de A à E sont récupérées à partir de la base, donc j'ai fait un activate et un change à ce niveau.

Les colonnes qui suivent sont remplies manuellement dans la feuille "suivi" puis renvoyées dans la feuille "Base".

Par contre si je ne fais pas le renvoie inverse, c'est à dire de "Base" vers "Suivi" pour ces colonnes, tout ce que j'ai saisi dans la feuille "Suivi" disparaît.

S'il n'était pas utile de renvoyer dans base pour ces colonnes, peut être que ça résoudrait le problème pour mes info bulles dans les cellules.

Autrement y a t'il un autre moyen pour conserver la mise en forme.

Pour les couleurs, je pourrais passer par le menu mise en forme conditionnelle mais ça va etre fastidieux car tous les jours je dois appliquer une couleur différences selon la situation de la personne par exemple.

1 : lorsqu'une personne est absente à un atelier, j'inscrit dans la correspondante au jour "AI"

2 : j'informe le conseiller de l'absence par mail et je mets ensuite "AI" en rouge pour que l'on sache que le conseiller a été averti.

3 : dès retour du conseiller pour savoir quoi faire : j'applique une couleur verte ou jaune dans la cellule selon si une relance a été envoyée ou pas.

Cela à l'air un peu compliqué (nous sommes deux à gérer les dossiers) mais pour l'instant je n'ai trouvé que ce système.

Voila si tu as une idée, j'espère que j'ai été assez claire.

A te relire.

Loulou
 
Dernière édition:

Yaloo

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

Re,

Si tu as mis une MFC dans ta colonne et lorsque tu inscris AI tu mets du rouge, si tu veux mettre du vert tu changes de texte AE par exemple. ?????

A+
 

Yaloo

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

Pour les commentaires, il faut peut-être faire un copier/coller avec les cellules, il me semble que le commentaire est conservé, le problème est que la couleur sera également conservé et il me semble que lorsque l'on trie les valeurs sont déplacées mais pas les couleurs.

A+
 
Dernière édition:

loulouange

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

re,
en effet ta proposition de une une mfc en changeant les termes "texte" dans les cellules pourraient être la solution. Mais comment mettre cette mfc sur toute la feuille ?

pour l'histoire des commentaires, je parle de ceux que j'insère quand je fait un clic droit souris, à l'activation de la feuille, ces derniers se décalent deux lignes plus bas, donc là je ne sais pas ce qui pourrait corriger cela.


désolée pour les fautes je ne peux pas revenir en arrière.

A+
 
Dernière édition:

loulouange

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

Bonjour Martial, le forum,

Enfin j'ai mon nouveau clavier et tout fonctionne à présent !!

Je ne sais pas si tu as pu te pencher sur mon problème, mais bon si ce n'est pas possible je vais essayer de trouver de faire autrement.

Sinon j'ai un soucis avec une formule , je voudrais qu'une croix s'affiche dans la cellule si les colonnes de C à F par exemple ne sont pas remplies (texte).

J'ai bien ma croix quand c'est le cas mais si une donnée est insérée j'ai dans ma cellule "FAUX", or normalement dans formule je demande de ne rien mettre non ?

voici ma formule :

Code:
 =SI(ESTVIDE(C5);SI(ESTVIDE(D5);SI(ESTVIDE(E5);SI(ESTVIDE(F5);"X";""))))
A te relire.

Loulou
 

Yaloo

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

Bonsoir Loulou,

J'avoue que je ne me suis pas trop penché sur ton problème, je vais y regarder.

Pour la formule, fais un test avec celle-ci :
=SI(ET(ESTVIDE(C5);ESTVIDE(D5);ESTVIDE(E5);ESTVIDE(F5));"X";"")
A+

Martial
 

Yaloo

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

En fait, dans ta formule, tu ne mettais le "" que sur ta dernière condition.
Si tu ne remplissais que ta cellule F5 tu ne dois rien avoir en G5, par contre si tu remplies une autre de tes cellules ça doit mettre FAUX.
 

loulouange

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

merci Martial pour ton explication, et j'ai bien compris mon erreur.

j'avance sur mon fichier et je pense qu'il sera bientôt totalement fonctionnel.

Pour l'histoire des problèmes avec les commentaires, j'ai crée une feuille supplémentaire qui permettra de savoir les dates d'envoi et autres, évitant ainsi de mettre des infos bulles sur la feuille "affectation". Pour les couleurs je ne sais pas encore, cela concerne la feuille suivi présences ateliers, je pense peut etre mettre une MFC en tete de colonne pour chaque date du jour, ainsi dès que les absences du jour sont traitées je mets une croix qui colore toute la colonne.

Là je bosse sur les formulaires avec le boutons useform, j'essaye de le reprendre, je commence à comprendre le processus, mise en forme etc.. j'ai travaillé à partir de ton bouton que tu avais fait sur la feuille1 à la fin du tableau, et je voulais en fait recopier le bouton sur la feuille2 en en tete de la colonne G, avec les mes menus etc mais pas moyen, quand je clique dessus rien ne se passe. J'ai fait juste un copier coller du bouton qui était sur la feuille1 sur la feuille2, mais je ne sais pas comment savoir si l'useform est affecté ou pas.
De plus , j'ai voulu mettre un ascenseur car le formulaire est trop grand mais la barre est là mais pas moyen de descendre ou monter.

Je me permet de te joindre un exemple qui sera plus parlant.

Encore merci à toi.

A te relire.

Loulou
 

Fichiers joints

Yaloo

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

Re,

Pour le bouton, il faut également copier la macro de la feuille :
VB:
Private Sub CommandButton1_Click()
UserForm1.Show
End Sub
En s'assurant que le bouton a bien le même nom que celui-ci de la feuille 1.

Pour les Scroll de l'UserForm, il faut mettre des valeurs dans ScrollHeight pour la hauteur, et rajouter une macro _Activate pour se caler en haut de l'UserForm. (vois le fichier ci-joint)

A+

Martial
 

Fichiers joints

loulouange

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

Bonsoir Martial,

Merci infiniment pour ta rapide réponse et pour ton travail, je suis ravie d'en apprendre tous les jours davantage o)

J'ai donc fait des essais avec un des modèles de formulaire, mais hélas je rencontre encore des problèmes, j'ai tenté de comprendre avant de venir à nouveau t'ennuyer mais j'ai cherché je ne sais pas d'où vient le problème.

Tout d'abord mon formulaire est au format word avec prise en charge macros.

J'ai donc pris soins d'enlever dans la menu "REVISION" la protection du document.
Ensuite j'ai insérer les signets.

Mais lorsque je fais le lancement de la fusion via le menu de l'useform, j'ai soit un message d'erreur à la ligne suivante qui se met en jaune :

Code:
 .Bookmarks("Signet" & i).Range = ListBox1.Column(i - 1)
soit ça se bloque et je ne peux plus rien faire.

Il y a une chose que je ne comprends pas car le bouton useform dans la feuille "affectation" se base apparemment sur les colonnes de cette même feuille, or je voulais que cela soient celles de la feuille active "FO reçues", je pensais qu'en recopiant le bouton de la feuille active vers "affectation" cela reprenait exactement les mêmes données.

Je te remets ici le fichiers excel avec un modèle word dans lequel j'ai inséré les signets et mis en texte les numéros pour que tu puisses t'y retrouver.

Dans l'useform c'esT le premier bouton ADS Cevennes la Rébés


Dans l'attente de te lire.

Loulou
 

Fichiers joints

Yaloo

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

Bonsoir Loulou,

Il me semble qu'il nous manque le fichier Word, non :confused:
Sinon, pour prendre les données de la feuille "F.O. reçues" dans l'initialisation de l'UserForm il faut mettre :

VB:
Plage = Feuil1.Range("C3:U" & Feuil1.[A65536].End(xlUp).Row)
A+
 

loulouange

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

oups désolée je ne comprends pas je l'avais pourtant mis,le revoici

je vais tester ta ligne merci à toi.

bon je ne sais pas, c'est noté fichier invalide, c'est une extension docm. je vais le mettre en mode normal mais je vais perdre la macro.
 
Dernière édition:

Yaloo

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

Re,

Alors 2 choses :
VB:
    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 24
        'Le signet prend la valeur de la colonne, on fonction de i
        .Bookmarks("Signet" & i).Range = ListBox1.Column(i - 1)
      Next
    End With
Avec cette macro, tu envoies les valeurs des colonnes de 0 à 23 (i de 1 à 24 - 1), alors que tu n'as que 6 colonnes, dans les signets du document Word, mais dans ton document tu n'as pas tous les signets, il manque les 8, 11, 14, 17 etc...

Une fois ces 2 petites broutilles modifiées ça devrait aller beaucoup mieux ;)

A+
 

loulouange

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

oui au départ c'était ta macro qui était basée sur 6 colonnes, donc j'ai remplacé par
i= 1 to 24 ce qui correspond pour moi aux colonnes de C à Y non ?

dans le document word j'ai inséré seulement les signets que j'avais besoin, et qui concerne les colonnes :

de C à O puis Q puis R et pour finir Z. je n'ai pas besoin des données des colonnes 14, 17 à 23.

je ne sais pas si ça possible problème s'il n'y pas de continuité dans les colonnes
 
Dernière édition:

Yaloo

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

Bonjour Loulou,

Si tu utilises une boucle, il faut qu'elle soit complète, donc dans ton cas il faudrait s'arrêter à une boucle de 13, puisque tu as 13 lettres de C à O, puis ensuite mettre tes 3 colonnes Q, R et Z séparément.
De plus, il faut que tu es au moins 13 colonnes dans ta ListBox (pour la boucle) puis 3 colonnes supplémentaires pour Q, R et Z (à moins de renvoyer des données des 13 premières colonnes).

Ça devrait donner quelque chose comme ça :
VB:
  Set oDoc = oWord.Documents.Open(ThisWorkbook.Path & "\Contrat Objectifs ADS Cévennes Las Rebes.docm")
    'Avec ce document
    With oDoc
      'Ta boucle te permettant de copier tes valeurs de la ListBox (colonne de C à O)
      'dans tes signets de 1 à 13
      For i = 1 To 13
        'Le signet prend la valeur de la colonne, on fonction de i
        .Bookmarks("Signet" & i).Range = ListBox1.Column(i - 1)
      Next
      'Puis tes données des colonnes Q, R et Z pour tes signets 14, 15 et 16
      .Bookmarks("Signet14").Range = ListBox1.Column(13)
      .Bookmarks("Signet15").Range = ListBox1.Column(14)
      .Bookmarks("Signet16").Range = ListBox1.Column(15)
    End With
A te relire

Martial
 

loulouange

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

Bonjour Martial, le forum,

Merci pour ta proposition de code, cela m'a bien aidée pour l'adapter à mon fichier. J'ai eu un peu de mal au début mais je suis contente d'y être parvenue !! et j'ai aussi pu corriger un problème de format de date, ce qui donne le code suivant :

VB:
  Set oDoc = oWord.Documents.Open(ThisWorkbook.Path & "\Contrat Objectifs ADS Cévennes Las Rebes.docm")
    'Avec ce document
   With oDoc
      'Ta boucle te permettant de copier tes valeurs de la ListBox (colonne de C à O)
     'dans tes signets de 1 à 13
     For i = 1 To 13
        'Le signet prend la valeur de la colonne, on fonction de i
       .Bookmarks("Signet" & i).Range = ListBox1.Column(i - 1)
      Next
      'Puis tes données des colonnes Q, R et Z pour tes signets 14, 15 et 16
    .Bookmarks("Signet14").Range = Format(DateValue(ListBox1.Column(14)), "dd/mm/yy")
      .Bookmarks("Signet15").Range = Format(DateValue(ListBox1.Column(15)), "dd/mm/yy")
      .Bookmarks("Signet16").Range = Format(DateValue(ListBox1.Column(23)), "dd/mm/yy")
      End With
'On rend Word visible
oWord.Visible = True
End Sub
Au début j'étais un peu perdue, mais j'ai compris que le numéro de la colonne du fichier source correspondait au numéro "-1" en réalité.

Je voulais savoir pourquoi on devait mettre cette ligne ?

Code:
.Bookmarks("Signet" & i).Range = ListBox1.Column(i - 1)
pourquoi "-1" ?

A présent mon fichier doc fonctionne très bien, après avoir compris qu'il fallait impérativement que tous les signets soient insérés dans le fichier word, pour mon cas : ceux qui sont cités en continuité de "de 1 à 13", (car le 11 n'était pas nécessaire mais je me suis débrouillée pour ne pas le voir dans word).

Je vais pouvoir continuer sur mes autres modèles à présent o)

Toutefois, j'ai un autre problème et oui encore désolée. Mais c'est pas faute d'avoir cherché et tester mais j'ai vraiment besoin que tu m'aides.

J'ai des formulaires mais au format Excel, et donc là je pense que se ne sont pas des Signets qui sont à insérer non ?

Par exemple je voudrais renvoyer l'info qui se trouve dans ma listebox "colonne2" c'est à dire le NOM vers le formulaire excel dans la cellule C5.


Une autre question mais là cela concerne l'apparence de l'useform, tu as mis un code pour que l'ascenseur soit toujours remonté vers le haut et c'est parfait. Mais je voulais savoir s'il était normal de devoir appuyer deux fois sur le bouton qui génère le fichier Word ?

je te mets ci-dessous des captures écrans pour mieux comprendre :

L'image 1 : j'ouvre l'useform uen
en cliquant sur le bouton "ADS Cevennes Las Rebes" une autre fenêtre s'ouvre (image 2).

L'image 2 : Ici je dois à nouveau cliquer sur ce même bouton "ADS Cevennes Las Rebes" pour voir le résultat de ma fusion dans le fichier Word.

Voila pour mes questions du jour.

Autrement, j'ai réussi à faire mes mises en forme conditionnelles avoir de texte et de cellules, j'avance et je progresse grâce à ce super forum et à ton aide précieuse, encore merci pour tout.


A te relire.

Loulou
 

Fichiers joints

Dernière édition:

Yaloo

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

Bonsoir Loulou,

Pourquoi le -1 ? Parce que certains Controls ou les Array commence à 0, c'est à dire que la première colonne est la colonne 0.
Ta boucle va de 1 à 13, tes signets vont de 1 à 13 mais ta ListBox va de de 0 à 12, d'où le décalage.
On pourrait aussi écrire :
VB:
  Set oDoc = oWord.Documents.Open(ThisWorkbook.Path & "\Contrat Objectifs ADS Cévennes Las Rebes.docm")
     'Avec ce document
   With oDoc
       'Ta boucle te permettant de copier tes valeurs de la ListBox (colonne de C à O)
     'dans tes signets de 0 à 12
     For i = 0 To 12
         'Le signet prend la valeur de la colonne, on fonction de i
       .Bookmarks("Signet" & i + 1).Range = ListBox1.Column(i)
       Next
       'Puis tes données des colonnes Q, R et Z pour tes signets 14, 15 et 16
    .Bookmarks("Signet14").Range = Format(DateValue(ListBox1.Column(14)), "dd/mm/yy")
       .Bookmarks("Signet15").Range = Format(DateValue(ListBox1.Column(15)), "dd/mm/yy")
       .Bookmarks("Signet16").Range = Format(DateValue(ListBox1.Column(23)), "dd/mm/yy")
       End With
'On rend Word visible
oWord.Visible = True
End Sub
Pour mettre une valeur de ListBox dans une cellule, il suffit d'écrire :
Range("C5") = ListBox1.Column(i)
ou
[C5] = ListBox1.Column(i)
ou
Cells(5, 3) = ListBox1.Column(i)
Pour le positionnement de l'UserForm, je ne comprends pas pourquoi en cliquant ça descend mais ça ne fait pas l'action demandée. J'y regarde, mais je suis en vacances demain, donc ce sera après.

Passe de bonnes fêtes

Martial
 

Haut Bas