Autres Dans Excel, à partir d'un UserForm, copier l'adresse sélectionnée dans enveloppe de publipostage Word et ouvrir la fenêtre "aperçu avant impression"

Chatron

XLDnaute Junior
Bonjour
c'est encore moi qui ai besoin d'aide
Après de multiples recherches sur le forum, j'ai bien réussi à ouvrir Word à partir d'un fichier Excell, mais je n'ai pas réussi à aller plus loin !!!
Je voudrai qu'on puisse envoyer un rappel aux lecteurs qui n'ont pas rendu les livres empruntés et donc, j'ai une routine pour imprimer la liste de livres non rendus (ça marche ),
mais je voudrai compléter en imprimant automatiquement l'enveloppe à partir d'une sélection effectuée avec un Userform : CbB1 = nom du lecteur, TxB1 = adresse de rue, TxB2 = code postal, TxB3 = ville ou commune
Donc j'arrive bien à ouvrir l'application Word, mais pas l'enveloppe et je ne sais pas comment la remplir et mettre aussi l'adresse de l'expéditeur
Je précise que je suis toujours sous Excel 97_2000 qui me convient très bien
Voici l'ébauche de mon code
VB:
Private Sub CmB5_Click()
If CbB1.Value = "" Or TxB2.Value = "" Then Exit Sub
Call EcrireDansWord(CbB1.Value, TxB1.Value, TxB2.Value, TxB3.Value)
        'Copier, à partir d'un UserForm, l'adresse sélectionnée dans enveloppe de publipostage Word et ouvrir la fenetre "aperçu avant impression"
        'CbB1 = Nom,  TxB1 = adresse rue,  TxB2 = Code Postal,  TxB3 = Ville ou commune
    Unload UserForm8
    Sheets("saisie").Select
    Application.ScreenUpdating = True
    Range("A1").Select

End Sub
Je ne sais pas si c'est possible, mais ça me plairait bien
Merci à tous les spécialistes qui se penchent sur mes problèmes
 

Chatron

XLDnaute Junior
c'est encore moi
J'ai réussi à ouvrir l'enveloppe avec l'adresse de l'expéditeur
J'ai contourné le problème en créant un fichier Word contenant l'enveloppe avec l'adresse expéditeur qu'il me suffit d'ouvrir avec le chemin
VB:
ThisWorkbook.FollowHyperlink "F:\Bibliothèque\essai\envel_lecteur.doc"
mais je ne sais pas aller plus loin
 

Zon

XLDnaute Impliqué
Salut,

Tu aurais pu mettre la procédure écriredansWord pour voir...

XL 97 -2000 cette procédure que j'ai retrouvé dans les archives fonctionnant sous XL97 Word 97 que j'avais faite en 2003 pour l'ancien XLD.
Forum.jpg


Avant de mettre cette procédure dans ton userform, pour tester colles ce code dans un module standard.
(Pour faire des enveloppes , ça devrait suffire..)
Si les test sont bons

. tu pourras ensuite l'appeler comme suit depuis ton userform.

ImprimerDansword Array(CbB1.Value, TxB1.Value, TxB2.Value, TxB3.Value) ' Là il faut pas de guillemet...



VB:
Sub Test()

ImprimerDansword Array("MOn est prénom est ZOn", "J'habite une super region", "47 La ville du Pruneau")


End Sub

Sub ImprimerDansword(T)
 Dim App As Object, Plage As Object
 Dim I As Byte
  If IsArray(T) Then
   On Error Resume Next
'On regarde si 'il yb a une instance
    Set App = GetObject(, "Word.Application")
  'Si il y en a pas on en crée une
  If Err <> 0 Then Set App = CreateObject("Word.Application")
  With App
    .Visible = True 'mettre à false pour cacher l'instance une fois les tests finis
    .Activate
    .documents.Add
    With .Selection
      For I = LBound(T) To UBound(T)
        .TypeText Text:=T(I)
        .TypeParagraph
      Next I
    End With
    
      Set Plage = .activedocument.Range(0, .Selection.End)
      Plage.Font.Size = 40
      .activedocument.PageSetup.Orientation = 1 'Paysage
    
    '""Partie pour imprimer""""""""""""""""""
    'Voici ce que cela donnerait chez moi
    
    'un bidouillage pour ouvrir le menu imprimer
    '^p c'est le raccourci Ctrl+P
    '%n me permet d'être dans liste des imprimantes ALT+n
    'admettons que mon imprimante soit en 2 eme position de la liste
    'je descends avec {DOWN} une fois
    'je valide par entrée ~
    'apres avec %o je vais dans les options avec alt+o
    'je change le bac par défaut avec %b
    'ensuite même proicédure avec {DOWN} pour selectionner celui qui t'intéresse
    'et il me faut 3 tabulations pour aller sur OK
    'je valide par entrée
'    Application.SendKeys "^p%n{DOWN}~%o%b{DOWN}~{TAB}{TAB}{TAB}~", True
  'Pour le test j'ouvre juste la boit de dialogue imprimer
    Application.SendKeys "^p", True
 
  'Une fois imprimer on fermera word sans sauvegarder les modifications du document créé
 ' .activedocument.Close False
  End With
  Set Plage = Nothing
  Set App = Nothing
  Else: MsgBox "Valeur Non trouvée", vbInformation, "Erreur"
  End If
End Sub


Si tu as des champs nommés sur Word dans ton fichier envel_lecteur, il faudra adapter le code .ou avoir une autre stratégie.




A+++
 

Chatron

XLDnaute Junior
Merci pour ta réponse
Je n'ai pas encore eu le temps de trop y travailler
Néanmoins j'ai fait un essai
Le test n'a pas marché
par contre "imprimerdansword"m'ouvre bien un fichier Word, mais il me met l'adresse du lecteur à la place de l'expéditeur
Dés que je pourrai y travailler un peu mieux, j'essayerai de lui faire ouvrir un fichier pré-enregistré, mais je ne sais pas trop comment lui faire mettre l'adresse au bon endroit
Peut être avec un champ nommé "adresse" ?
D'autre part le code postal (TbX2) et le nom de la commune (TbX3) sont sur 2 lignes différentes alors qu'ils doivent être sur la même ligne

En tout cas merci de t’intéresser à mon problème
 
Dernière édition:

Zon

XLDnaute Impliqué
Salut

Je ne comprends pas , tu dis "
le test n'a pas marché
par contre "imprimerdansword"m'ouvre bien un fichier Word, mais il me met l'adresse du lecteur à la place de l'expéditeur

Si cela ouvre word, ça écrit quelque chose dedans , ça ouvre le boite imprimer=> cela veut dire que cela fonctionne.
Maintenant c'est du détail , mais sans ton fichier Word difficile d'avancer.

Pour mettre de chaines de caractères l'une aprés l'autre tu peux écrire: TxB2.Value & " " & TxB3.Value

A+++
 

Chatron

XLDnaute Junior
Bonsoir
Ce qui n'a pas marché :
VB:
Sub Test()

ImprimerDansword Array("MOn est prénom est ZOn", "J'habite une super region", "47 La ville du Pruneau")


End Sub
J'avais résolu pour mettre sur la même ligne le CP et la ville
pour le reste, je voudrais qu'il ouvre un fichier .doc (Rappel_de_livres.doc)
ce fichier comporte une lettre type avec son enveloppe qui a déjà l'adresse de l'expéditeur
Ci joint fichier doc
pour l'instant il me met l'adresse destinataire à le place de l'expéditeur
Merci de ton aide
 

Pièces jointes

  • rappel_de_livres.doc
    17 KB · Affichages: 7

Zon

XLDnaute Impliqué
Re,

Super d'avoir mis le fichier Word, en fait tu veux écrire dans la zone de texte "Textbox 7" dans ton fichier Word.

Tu as bien compris qu'il y a des choses à, adapter par rapport à ton USF,

l'expéditeur lui est en textbox 6.

Attention Zonadresse est un chaine de caractère et non plus un Array.

Colles ceci dans module standard sous excel.

VB:
Sub Test()
Dim ZoneAdresse$
Dim Lefichier$

Lefichier = "C:\rappel_de_livresVZon.doc" ' à adpater

ZoneAdresse = "Mon pseudo est Zon " & vbCrLf & "333 rue de la soif" & vbCrLf & "47000 Agen"
'le Vbcrlf permet de sauter une ligne

ImprimerDanswordBoiteTexte Lefichier, "Text Box 7", ZoneAdresse
'
End Sub

Sub ImprimerDanswordBoiteTexte(CheminFichier$, NomBoite$, Ch$)
 Dim App As Object
 Dim I As Byte
  
   If FichierExiste(CheminFichier) Then 'on teste l'exsitence du fichier
On Error Resume Next
'On regarde si 'il yb a une instance
      Set App = GetObject(, "Word.Application")
  'Si il y en a pas on en crée une
      If Err <> 0 Then Set App = CreateObject("Word.Application")
      With App
         .Visible = True 'mettre à false pour cacher l'instance une fois les tests finis
         .Activate
         .documents.Open CheminFichier
         With .ActiveDocument.Shapes(NomBoite).TextFrame
            .TextRange.Text = Ch
            .AutoSize = True
         End With
    
    Application.SendKeys "^p", True 'ouvre la boite Imprimer
 
  'Une fois imprimer on fermera word sans sauvegarder les modifications du document créé si beosin
 ' .activedocument.Close False
      End With
  Set App = Nothing
  Else: MsgBox "Le Fichier " & CheminFichier & "n'a pas été trouvé", vbInformation, "Erreur"
  End If
End Sub

Function FichierExiste(NomFichier$) As Boolean
   FichierExiste = Len(Dir(NomFichier)) > 0
End Function



A+++
 

Chatron

XLDnaute Junior
Bonjour
Merci pour ta réponse rapide
Après avoir modifié le nom du fichier Word et le chemin d'accès, le Test fonctionne
Mais comme je ne suis vraiment pas doué, ça plante quand j'essaye de remplacer "Mon pseudo est Zon " par CbB1.Value et "333 rue de la soif" par TbX1.Value
j'ai essayé entre parenthèse, avec "," etc
Désolé de mon incompétence
Merci de ton aide
 

Chatron

XLDnaute Junior
RE
ça ne fonctionne pas
Peut être serait il nécessaire d'écrire une ligne pour recharger le fichier GdP_GdA et la feuille GdL ?
Je joins le Fichier GdP_GdA anonymisé et l'UserForm
 

Pièces jointes

  • GdP_GdA.xls
    17.5 KB · Affichages: 10
  • Gest_userform.xls
    42.5 KB · Affichages: 9

Chatron

XLDnaute Junior
Merci, ça marche super
Mais l'erreur est bien de ma faute ; voir le post plus haut lors de ma première interprétation
C'est un manque de rigueur de ma part : en effet travaillant mon appli à épisodes, avec des périodes d'absences, j'ai souvent appelé les TextBox TbX alors que cette fois je les ai nommés TxB
Il faudra que je sois un peu plus attentif
Je ne comprends pas tout dans cette routine et donc doublement merci de me permettre de faire fonctionner mon appli de gestion de la bibliothèque locale
Merci
Bonne soirée
 

Statistiques des forums

Discussions
315 093
Messages
2 116 126
Membres
112 666
dernier inscrit
Coco0505