Merci d'avance pour votre aide.
je dois générer des fichiers Word, les sauvegarder dans un répertoire avec un nom distinct.
Les fichiers Word servant au publipostage et le fichier Excel permettant de lancer la macro sont bien dans le même répertoire.
Je n'ai pas d'erreur renvoyée.
Mon code fait pour l'instant :
Aller récupérer un nom de fichier Word Modele.docx (car je ne peux pas le mettre en dur dans le code) => OK
Choisir un répertoire de sauvegarde des fichiers récupéré => OK
Construire le nom du fichier Excel => OK
Faire le publipostage
Faire une sélection de données fonction d'une contrainte => OK
Boucler sur la sélection => OK
Transmettre les données au document => KO
Récupérer sur l'enregistrement courant dans la boucle une donnée servant à construire le nom du fichier .docx => OK
Enregistrer le fichier dans le répertoire choisi à l'étape 2 avec le bon nom => OK
Je vous mets en pièce jointe : les fichiers Word et Excel et la copie de mes références (au cas où cela pourrait venir de là mais je pense que ma macro m'aurait hurlé).
Encore merci si vous pouvez me dire ce qui ne va pas.
C'est bon j'ai réussi mais reste une question si vous le pouvez, comment faire pour fermer le document original qui set de modèle via la macro.
Merci d'avance.
=>Excel6689
[Suggestions en passant]
Usuellement quand un "demandeur" résouds sa question par ses propres moyens, il revient dans sa discussion partager sa solution pour le bénéfice de la communauté des XLDiens
(et pour le partage des connaisssances)
=>Excel6689
[Suggestions en passant]
Usuellement quand un "demandeur" résouds sa question par ses propres moyens, il revient dans sa discussion partager sa solution pour le bénéfice de la communauté des XLDiens
(et pour le partage des connaisssances)
Bonsoir Staple 1600,
oui mais je ne comprends pas moi même .
Promis car je suis complètement sous l'eau je reviens pour donner des explications si j'y arrive.
Par contre pour fermer le document il faut changer la fin du code de cette façon :
VB:
'partie modifiée
With WordApp.ActiveDocument
.SaveAs NewRepFicWord
WordApp.ActiveDocument.Close True 'Fermeture du document de fusion
End With
Next i
End If
End If
WordApp.ActiveDocument.Close False
WordApp.Quit
End If
End Sub
Oui , tu peux aussi écrire
WordApp.ActiveDocument.Close 0
Par contre, méfiance avec
WordApp.Quit
(car si tu ouvres d'autres documents Word ouverts, ils seront fermés sans enregistrement des modifications.
A tester pour confirmer ou infirmer)
PS: Je parlais de publier le code VBA complet qui fonctionne
(ou ton Web.zip mis à jour avec ton code VBA fonctionnel)
Bonjour,
Pour Staple 1600 je n'ai fait qu'une macro il y a 2 ans... après je fais des heures de fouilles
je fais évoluer le code, dès que cela sera plus propre je reposte
j'ai un souci, peut-être que ce n'est pas possible, dans mon code initiale Sub Action j'ai écris une requête SQL
VB:
With WordDoc.MailMerge
.OpenDataSource Name:=NomExcelPub, _
Connection:="Driver={Microsoft Excel Driver (*.xlsx)};" & _
"DBQ=" & NomExcelPub & "; ReadOnly=True;", SQLStatement:="SELECT * FROM [Base$] Where ToDo ='OUI'"
fin = .DataSource.RecordCount
End With
J'aurais aimé savoir si on peut créer un Statement SQL en limitant le nombre de lignes, en utilisant la commande TOP, car cela n'est pas passé. Il ne retrouve pas la Base.
Code:
With WordDoc.MailMerge
.OpenDataSource Name:=NomExcelPub, _
Connection:="Driver={Microsoft Excel Driver (*.xlsx)};" & _
"DBQ=" & NomExcelPub & "; ReadOnly=True;", SQLStatement:="SELECT TOP 4 * FROM [Base$] ORDER BY ASC"
End With
Et là internet ne m'a été d'aucune utilité
Par avance merci
Bonsoir, J'avais un code qui fonctionnait très bien jusqu'à présent. Il permet à partir d'une base de données de rédiger des lettres types (rien de très original). et horreur depuis hier lorsque je lance le publipostage : Blocage, il semble y avoir un problème de chemin... Quelqu'un a...
Merci Staple 1600 pour ta réponse,
j'avais déjà vu ce fil avec LUMBARDO et j'ai le même souci que cette personne si j'utilise le STATEMENT avec TOP sinon il fonctionne et comme je ne peux lister touts les colonnes - les utilisateurs finaux pourront en ajouter - je suis vraiment obligé d'utiliser le * dans la requête.
Enfin me direz-vous voici le code final... pour la première partie, si je trouve le temps de continuer -
Avant de vous dire ce que fait ce code, un grand merci encore à Staple 1600 et pour être honnête je n'ai jamais étudié le VBA - , fait un peu de code il y a bien des années mais une seule MACRO avant, donc il doit y avoir des erreurs grossières dans ce code - je ne maîtrise pas le monde Excel-VBA, des choses qui auraient pu être simplifiées... cela a juste le mérite de fonctionner.
Il y a un check sur les données des colonnes A à H, le nom du fichier de publipostage.
le nom du fichier de publipostage est de type String_AAAA.docx avec AAAA une année
Le publipostage accepte les accents pour les noms et prénoms et génère un nom de fichier sans accents avec la date de publipostage, type Courrier_Titre_NOM_Prenom_DatePub.docx
La liste des colonnes et donc des données qui participent au publipostage peut-être augmentée sans changer le code - mais pensez à changer le fichier WORD qui sert de modèle.
Mon code ne permet pas d'ajout de colonnes entre les colonnes [ A - H ], ces colonnes sont à remplir par vos données.
Mon code ne permet pas d'ajout de colonnes entre les colonnes [ L - O ], ces colonnes sont updatées par le code, s'il y a des données elles seront écrasées.
Le code sinon fait un tri sur les données fonction de la colonne ToDo - les données à envoyer au publipostage - ce qui permet de limiter la requête pour aller chercher les données du publipostage et les boucles. Cela devrait me servir pour la suite si j'ai le temps de le faire...
J'ai modulé au maximum le code, repris des fonctions intéressantes du site Excel Malin (comme NumeroDeColonne et NomDeColonne).
J'ai fait des fonctions qui permettent en fonction du nom mis dans le header retourne
la lettre de l'adresse Excel de la colonne, les A, B, C...