imprimer un publipostage depuis excel

Le
canthor Hors ligne
Bonjour,
J'ai crée un fichier excel avec des cellules que je remplies chaque fois que j'ai une commande d'un client, une ligne par commande, ça me permet de réaliser mon suivi de commandes par la suite.

Pour chaque nouvelle commande j'imprime un reçu pour mes clients, j'ai donc fait un document word avec un publipostage.

J'aimerais dans mon fichier excel ajouter un bouton à chaque fin de ligne, qui me permette pour chaque nouvelle commande d'imprimer le reçu directement depuis excel. Je pense qu'il faut faire une macro qui ouvre word, sélectionne la dernière commande, imprime et referme word.
Seulement je ne sais pas si c'est possible et je n'y connais rien en macros.

Si vous avez d'autres solutions peut-être moins lourde que de faire un bouton par ligne à me proposer je suis preneur aussi. Le but étant de saisir mes informations sur la commande et d'imprimer un reçu depuis le même écrans, sans à avoir 3 tonnes de manip à faire et de conserver mes infos de commande pour le suivi.
Vidéos High-Tech et Jeu Vidéo
Téléchargements
Vos réponses
Gagnez chaque mois un abonnement Premium avec GNT : Inscrivez-vous !
Trier par : date / pertinence
HD
Le #24094401
Seulement je ne sais pas si c'est possible et je n'y
connais rien en macros.


C'est bien sûr possible... Excel combiné à son VBA peut faire beaucoup de
chose.

Si vous avez d'autres solutions peut-être moins lourde
que de faire un bouton par ligne


Il y'a la solution de proposer l'impression du reçu lorsque l'on double-clic
sur la ligne en question.

@+
HD
canthor Hors ligne
Le #24099481
HD a écrit le 21/12/2011 à 09h17 :
Seulement je ne sais pas si c'est possible et je n'y
connais rien en macros.



C'est bien sûr possible... Excel combiné à son VBA peut
faire beaucoup de
chose.

Si vous avez d'autres solutions peut-être moins lourde
que de faire un bouton par ligne



Il y'a la solution de proposer l'impression du reçu lorsque l'on
double-clic
sur la ligne en question.

@+
HD


Et concrètement, je fait comment?
HD
Le #24121311
Et concrètement, je fait comment?


concrétement ça risque de prendre un peu de temps en développement... je
pense qu'il y'aurait plus court de faire un publipostage en ouvrant word en
mettant en lien le document word avec une base de donnée de publipostage sur
le fichier Excel.

Perso, j'ai déjà fait un telle macro pour un client mais tout se fait à
partir d'Excel. Une fois imprimé, une copie est archivée en lecture-seule
protégée afin que personne ne modifie le numéro de facture et l'on attaque
alors à la facture suivante. Juridiquement parlant, une facture imprimée ne
doit plus être modifiée et la facture suivante doit correspondre au numéro
de la facture précédente + 1 (pour éviter les fausses factures). Dans le cas
contraire, en cas de contrôle, c'est au risque et péril...

@+
HD
MichD
Le #24121671
Bonjour,

Voici un exemple de code que tu peux utiliser et adapter à ton environnement.
Si la chose peut t'aider...

Tu dois ajouter à ton projetVBA d'Excel, la référence "Microsoft Word Objects xx library"
dans la fenêtre de l'éditeur de code / outils / références...


La macro crée un tableau dans un nouveau document comme base
de données pour un publipostage et ensuite crée un document principal pour
le publipostage. Fais un test si cela te convient et adapte. La liaison DDE
est une liaison tardive.
'-------------------------------------------------------
Sub Publipostage()
Dim AppWord As Object
Dim I As Integer
Dim FE As Worksheet
Dim PlageTitre As Excel.Range

Set FE = Worksheets("Feuil1")
Set AppWord = CreateObject("Word.Application")

CreerListe AppWord, FE

With AppWord
.Documents.Add
With .Selection
.ParagraphFormat.Alignment = 1
With .Font
.Name = "Arial"
.Bold = True
.Size = 16
End With
.TypeText "Circulaire"
.TypeParagraph
.TypeParagraph
.ParagraphFormat.Alignment = 0
With .Font
.Name = "Times New Roman"
.Bold = False
.Size = 10
End With
End With

Set PlageTitre = FE.Range(FE.[A2], FE.[IV2].End(xlToLeft))

With .Documents(1)
With .MailMerge
.MainDocumentType = 3 'wdCatalog
.OpenDataSource Name:=ThisWorkbook.Path & "ListeNoms.doc"
Set PlageTitre = FE.Range(FE.[B1], FE.[IV1].End(xlToLeft))
With .Fields
.Add AppWord.Selection.Range, PlageTitre(1)
AppWord.Selection.TypeText " "
.Add AppWord.Selection.Range, PlageTitre(2)
AppWord.Selection.TypeParagraph
.Add AppWord.Selection.Range, PlageTitre(3)
AppWord.Selection.TypeText " "
.Add AppWord.Selection.Range, PlageTitre(4)
AppWord.Selection.TypeParagraph
.Add AppWord.Selection.Range, PlageTitre(5)
AppWord.Selection.TypeText " "
.Add AppWord.Selection.Range, PlageTitre(6)
End With
End With
End With

With .Selection
.TypeParagraph
.TypeParagraph
.TypeText "Ici ton texte..."
End With
.Visible = True
End With

Set AppWord = Nothing
Set FE = Nothing
Set PlageTitre = Nothing

End Sub
'-------------------------------------------------------
Sub CreerListe(AppWord As Object, _
FE As Worksheet)
Dim Doc As Object
Dim TableWd As Object
Dim Ligne As Object
Dim CelWD As Object

Dim Plage As Excel.Range
Dim CelXL As Excel.Range
Dim I As Integer
Dim NbCol As Integer
Dim NbLgn As Integer

Set Plage = FE.Range(FE.[B1], FE.[B65536].End(xlUp))

On Error Resume Next
Kill ThisWorkbook.Path & "ListeNoms.doc"
On Error GoTo 0

With Application.WorksheetFunction
NbCol = .CountIf(FE.Rows(1), "*")
NbLgn = .CountIf(FE.Columns(1), "*")
End With

With AppWord
Set Doc = .Documents.Add
With Doc
Set TableWd = .Tables.Add(.Range, NbLgn, NbCol - 1, 1, 1)
With TableWd
For Each CelXL In Plage
If CelXL <> "" Then
I = I + 1
.Cell(I, 1).Range.Text = Trim(CelXL.Text)
.Cell(I, 2).Range.Text = Trim(CelXL.Offset(0, 1).Text)
.Cell(I, 3).Range.Text = Trim(CelXL.Offset(0, 2).Text)
.Cell(I, 4).Range.Text = Trim(CelXL.Offset(0, 3).Text)
.Cell(I, 5).Range.Text = Trim(CelXL.Offset(0, 4).Text)
.Cell(I, 6).Range.Text = Trim(CelXL.Offset(0, 5).Text)
End If
Next CelXL
.Rows(1).Range.Bold = True
End With
.SaveAs ThisWorkbook.Path & "ListeNoms.doc"
.Close
End With
End With

Set Doc = Nothing
Set TableWd = Nothing
Set Ligne = Nothing
Set CelWD = Nothing
Set Plage = Nothing
Set CelXL = Nothing

End Sub
'-------------------------------------------------------



MichD
------------------------------------------
"canthor" a écrit dans le message de groupe de discussion :

HD a écrit le 21/12/2011 à 09h17 :
Seulement je ne sais pas si c'est possible et je n'y
connais rien en macros.



C'est bien sûr possible... Excel combiné à son VBA peut
faire beaucoup de
chose.

Si vous avez d'autres solutions peut-être moins lourde
que de faire un bouton par ligne



Il y'a la solution de proposer l'impression du reçu lorsque l'on
double-clic
sur la ligne en question.

@+
HD


Et concrètement, je fait comment?
Publicité
Poster une réponse
Anonyme