[Catégorie modifiée VB6 -> VBA] Publipostage Excel/Word création d'un fichier wo
jeanlucr
Messages postés2Date d'inscriptionmercredi 27 octobre 2010StatutMembreDernière intervention27 octobre 2010
-
27 oct. 2010 à 14:16
jeanlucr
Messages postés2Date d'inscriptionmercredi 27 octobre 2010StatutMembreDernière intervention27 octobre 2010
-
27 oct. 2010 à 17:44
Bonjour,
J'ai besoin d'éditer un grand nombre de courriers.
J'ai une base excel avec les renseignements nécessaires et un courrier type sous word.
J’ai une macro qui crée un fichier par ligne excel, mais je souhaiterai variabiliser le nom du fichier avec le contenu de certaines cellules. Je m’explique : le nom du fichier alimenté par la ligne i sera constitué de la valeur de la cellue W de la ligne i.
Je souhaiterai également savoir comment alimenter directement la variable nbredoc avec le nombre de ligne du classeur excel
Merci d'avance
Voici ma macro
Sub Generation_Fiches_traitements()
'
' Generation_Fiches_traitements Macro
' Macro enregistrée le 10/10/2010 par JLR
'
' Variables :
' Nombre de documents a generer
nbredoc = 4
' Prefixe utilise pour la generation du nom des doc
modeldoc = "AMA_PRD_appli_"
' repertoire ou les documents generes sont sauvegardes
dirdoc = "C:\Users\JLR\Documents\ARSOE\Generation de fiches - wrk\Livraison"
directoryimage = "C:\Documents and Settings\Jean-Luc RIVET\Mes documents\ARSOE\Generation de fiches - wrk\Fiches Chaines\Images Chaines"
For i = 1 To nbredoc
'creation du document
With ActiveDocument.MailMerge
.Destination = wdSendToNewDocument
.MailAsAttachment = False
.MailAddressFieldName = ""
.MailSubject = ""
.SuppressBlankLines = True
With .DataSource
.FirstRecord = i
.LastRecord = i
End With
.Execute Pause:=True
'definition du format du numero du traitement
End With
If i < 10 Then
i = "00000" & i
Else
If i < 100 Then
i = "0000" & i
Else
If i < 1000 Then
i = "000" & i
Else
If i < 10000 Then
i = "00" & i
Else
i = "0" & i
End If
End If
End If
End If
' definition du nom du document cree
file_name = modeldoc & i & ".doc"
' on cree le document dans le repertoire designe par dirdoc
ChangeFileOpenDirectory dirdoc
' Ajout de liens Hyperlink par recuperation du nom dans le doc
Selection.MoveDown Unit:=wdLine, Count:=6
Selection.MoveRight Unit:=wdCell
chaine_name = Selection.Text
chaine_adress = Selection.Text & ".doc"
ActiveDocument.Hyperlinks.Add Anchor:=Selection.Range, Address:= _
chaine_adress, SubAddress:="", ScreenTip:="", TextToDisplay:= _
chaine_name
' Sauvegarde du document actif
ActiveDocument.SaveAs FileName:=file_name, FileFormat:= _
wdFormatDocument, LockComments:=False, Password:="", AddToRecentFiles:= _
True, WritePassword:="", ReadOnlyRecommended:=False, EmbedTrueTypeFonts:= _
False, SaveNativePictureFormat:=False, SaveFormsData:=False, _
SaveAsAOCELetter:=False
' fermeture du document actif
ActiveWindow.Close
'passage au suivant
Next i
End Sub
A voir également:
[Catégorie modifiée VB6 -> VBA] Publipostage Excel/Word création d'un fichier wo
cs_Jack
Messages postés14006Date d'inscriptionsamedi 29 décembre 2001StatutModérateurDernière intervention28 août 201579 27 oct. 2010 à 14:53
Salut et bienvenu
Observe bien la catégorie des questions liées à VBA. Merci.
Quand tu colles du code, utilise la coloration syntaxique = 3ème icone à droite. La lecture sera facilité, surtout quand il y a des If ou des With
Première chose que me saute aux yeux :
Ta gestion du format sur 7 digits est lourde.
Remplace tous ces If par cette simple ligne :
i = Format(i, "0000000")
Méfiance aussi aux variables qui changent de type à tout de bras. 'i' est tantôt une chaine, tantôt un chiffre : quand tu feras i = i + x, pas sûr qu'il fasse une addition, mais risque de coller le contenu de 'x' à ton 'i'.
--> Voir le dimensionnement des variables et la définition de leurs types
" j'ai une base Excel "
Oui, mais ton programme tourne sur Excel ou sur Word ?
Apparemment, c'est sous Word.
Tout ce que tu cherches doit dans ton DataSource, je pense.
Regarde dans l'aide s'il a une propriété .Count ou .RecordCount qui te renverrai le nombre d'enregistrements.
Pour ce qui est du contenu de la cellule de la colonne W, tu ne pourras y avoir accès que si elle est dans le DataSource
--> Voir l'aide sur l'objet MailMergeDataSource et ses propriétés comme .Field permettant de désigner le nom de la colonne
Vala
Jack, =fr MVP VB
NB : Je ne répondrai pas aux messages privés
Le savoir est la seule matière qui s'accroit quand on la partage (Socrate)
jeanlucr
Messages postés2Date d'inscriptionmercredi 27 octobre 2010StatutMembreDernière intervention27 octobre 2010 27 oct. 2010 à 17:44
Merci beaucoup pour ces conseils.
ça marche nickel
voici le source
Sub Generation_Fiches_traitements()
'
' Generation_Fiches_traitements Macro
' Macro enregistrée le 10/10/2010 par JLR
'
' Variables :
' repertoire ou les documents generes sont sauvegardes
dirdoc = "C:\Users\JLR\Documents\ARSOE\Generation de fiches - wrk\Livraison"
directoryimage = "C:\Documents and Settings\Jean-Luc RIVET\Mes documents\ARSOE\Generation de fiches - wrk\Fiches Chaines\Images Chaines"
' Nombre de documents a generer
With ActiveDocument.MailMerge
With .DataSource
nbredoc = .RecordCount - 1
End With
End With
For i = 1 To nbredoc
'creation du document
With ActiveDocument.MailMerge
.Destination = wdSendToNewDocument
.MailAsAttachment = False
.MailAddressFieldName = ""
.MailSubject = ""
.SuppressBlankLines = True
With .DataSource
.FirstRecord = i
.LastRecord = i
End With
.DataSource.ActiveRecord = i
nom_fiche = .DataSource.DataFields(23)
.Execute Pause:=True
End With
' definition du nom du document cree
file_name = nom_fiche & ".doc"
' on cree le document dans le repertoire designe par dirdoc
ChangeFileOpenDirectory dirdoc
' Ajout de liens Hyperlink par recuperation du nom dans le doc
Selection.MoveDown Unit:=wdLine, Count:=7
Selection.MoveRight Unit:=wdCell
chaine_name = Selection.Text
chaine_adress = Selection.Text & ".doc"
ActiveDocument.Hyperlinks.Add Anchor:=Selection.Range, Address:= _
chaine_adress, SubAddress:="", ScreenTip:="", TextToDisplay:= _
chaine_name
Selection.MoveDown Unit:=wdLine, Count:=8
Selection.MoveRight Unit:=wdCell
chaine_name = Selection.Text
chaine_adress = Selection.Text & ".doc"
ActiveDocument.Hyperlinks.Add Anchor:=Selection.Range, Address:= _
chaine_adress, SubAddress:="", ScreenTip:="", TextToDisplay:= _
chaine_name
' Sauvegarde du document actif
ActiveDocument.SaveAs FileName:=file_name, FileFormat:= _
wdFormatDocument, LockComments:=False, Password:="", AddToRecentFiles:= _
True, WritePassword:="", ReadOnlyRecommended:=False, EmbedTrueTypeFonts:= _
False, SaveNativePictureFormat:=False, SaveFormsData:=False, _
SaveAsAOCELetter:=False
' fermeture du document actif
ActiveWindow.Close
'passage au suivant
Next i