Bonjour
Je souhaiterais exporter des données enregistrées dans des textbox lors du fonctionnement d'un programme vb vers une page word préétablie ou des espaces seraient complétés par les données des textbox
Bonjour
Je souhaiterais exporter des données enregistrées dans des textbox lors du fonctionnement d'un programme vb vers une page word préétablie ou des espaces seraient complétés par les données des textbox
salut !
Tu insères des signets dans ton document word et tu les remplis via VB avec la valeur de tes textbox
Si tu veux un peit exemple dis-le moi
Kikoo Khany
Je suis partant pour un petit exemple, j'ai pas encore testé l'interaction VB/WORD et ça peu toujours servir.
Enfin si t'as un petit moment à consacrer, à un petit newbee des outils microsoft^^
Salut !
Moi aussi je suis intéressé par un exemple ...
salut !
Voilà la partie VB qui remplit des signets dans un doc Word. N'oubliez pas de mettre les signets avant de faire un test
Voilà, j'espère que cela vous a aidé
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34 Dim MyWord As Word.Application Dim MonControle As String Set MyWord = New Word.Application With MyWord .Documents.Open (PathDocu & ChoixDocu) .Visible = True 'dans ce cas, word s'ouvre et le document est affiché pour d'autres modif éventuelles .ActiveDocument.Bookmarks("NomPers1").Range.Text = Rs!nom .ActiveDocument.Bookmarks("PrenomPers1").Range.Text = Rs!prenom .ActiveDocument.Bookmarks("NomPers2").Range.Text = Rs!nom .ActiveDocument.Bookmarks("PrenomPers2").Range.Text = Rs!prenom For k = 1 To 11 MonControle = "Mat" & Trim(Str(k)) .ActiveDocument.Bookmarks(MonControle).Range.Text = TbMat(k - 1) MonControle = "Matt" & Trim(Str(k)) .ActiveDocument.Bookmarks(MonControle).Range.Text = TbMat(k - 1) Next k ' .ActiveDocument.Bookmarks("Statut").Range.Text = RsDonneeProf!TypeFct .ActiveDocument.Bookmarks("DateSignature").Range.Text = DateJour End With DoEvents Set MyWord = Nothing ---> dans ce cas, le document est piloté dans le word pour imprimer, modifier des infos, sauver si on veut, ....... .ActiveDocument.PrintOut .ActiveDocument.Close wdDoNotSaveChanges -----> dans ce cas (pas mettre document.visible = True), le document est rempli, imprimé et fermé sans sauvegarde des modif et sans qu'il soit visible à l'utilisateur
Merci pour ton exemple, dès que j'ai fini ce maudit programme de teste de saisie je vais me tester ça tout de sutie^^
encore merci^^
Salut Khany,
Premièrement, Merci beaucoup pour cette partie du code pour l'impression sous Word...
Mais j'aurais une question concernant le code que tu donnes :
MonControle = "Mat" & Trim(Str(k))
MonControle = "Matt" & Trim(Str(k))
Veux-tu me dire qu'est-ce que "Mat" et "Matt" représentent ??
Est-ce des valeurs fixées d'avance, ou quoi ?
Merci de l'éclaircissement !!
Salut !
Non, ce sont des signets dans mon doc Word
si tu préfères j'ai nommé mes signets "Mat1" jusqu'à "Mat11" (idem avec Matt) pour faire une boucle dans mon prog vb simplement
donc quand je suis à l'élément 5 de ma boucle, je remplis "Mat5" dans Word
Juste pour simplifier le code dans vb sinon, j'aurais 11 fois la même instruction avec un nom de signet différent, comme ca, j'ai une boucle, c tout
bonjour,
je voudrais avoir quelques complements d'informations sur le code de Khany car je cherche à faire éxactement la même chose mais ya des petits trucs que je comprend pas..
Je voudrais savoir a quoi correspond "NomPers1" et "Rs!nom" dans
Merci..
Code : Sélectionner tout - Visualiser dans une fenêtre à part .ActiveDocument.Bookmarks("NomPers1").Range.Text = Rs!nom
NomPers1 = le signet qui se trouve dans mon doc word
Rs!Nom = le champ "Nom" du recordset "Rs" dont je désires mettre la valeur dans le signet
Comment faire si on ne sait pas à l'avance combien de ligne va être affiché sur le doc word, je m'explique, par exemple dans mon app, l'utilisateur choisit des articles selon les besoins du client mais évidemment chaque en fonction des ses besoins, alors voilà comme on ne sait pas combien d'articles va prendre tel client ou tel client je ne peux mettre des signets "fixes" sur mon doc word, comment faire alors ?
merci
Dans ce cas, tu dois utiliser une autre méthode.
Tu sauves tes données dans une BD et tu fais un document de Fusion/publipostage dans Word.
Tu enregistres les instructions de fusion/publipostage dans une macro que tu lances via VB avec un DoCmd.
Dans ce cas, tu peux avoir un nombre de données aléatoire et elles seront placées où tu as inséré tes champs de fusion
je viens à l'instant d'apprendre à utiliser le concept fusion/publipostage, ça fonctionne avec un enregistrement (une ligne) mais je vois toujours pas comment je puisse faire pour insérer plusieurs "ligne" qui ont les même nom des champs de fusion
Je crois qu'il y a une solution simple à ton problème d'articles multiples.
J'imagine que c'est une espece de bon de commande que tu génères ?
Tu mets un tableau dans le document (style: Qté, Réf, Designation, PU, Prix Total) avec seulement une ligne pour les articles.
Tu poses un signet dans la première celllule (ex. quantité du 1er article).
Par code tu vas sur ce signet et tu mets le texte avec Selection.TypeText Text:="mon texte", ensuite tu passes à la cellule suivante avec Selection.MoveRight Unit:=wdCell.
Tu continues comme ça avec les détails de ton article dans chaque cellule.
Arrivé à la fin de la ligne, au prochain MoveRight Word va automatiquement ajouter une ligne au tableau.
Si tu declares la ligne d'en-tête du tableau "Repeter en haut de chaque page en tant qu'en-tête" il va même te remettre tes libellées de colonne sur la page suivante s'il y a beaucoup d'articles.
Bon courage
Clive
Voici quelques fonctions utiles pour gérer les signets
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11 Public Sub EnumSignets() ' Fonction pour générer la cartographique des signets ' Met le nom du signet dans chaque signet Dim I As Integer Dim RetVal As Boolean With ActiveDocument.Bookmarks For I = 1 To .Count RetVal = Fill_Bookmark(.Item(I).Name, "[" & .Item(I).Name & "]") Next I End With End Sub
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10 Public Sub ViderSignets() ' Vide tous les signets Dim I As Integer Dim RetVal As Boolean With ActiveDocument.Bookmarks For I = 1 To .Count RetVal = Fill_Bookmark(.Item(I).Name, " ") Next I End With End Sub
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16 Public Function Read_Bookmark(BM_Name As String) As String ' Va chercher le texte dans le signet BM_Name Dim msg As String If ActiveDocument.Bookmarks.Exists(BM_Name) Then 'Le signet existe With ActiveDocument.Bookmarks(BM_Name) .Select Read_Bookmark = .Range.Text End With Exit Function Else 'Le signet n'existe pas msg = "Erreur sur la feuille." & vbCr & "Le signet " & BM_Name & " n'est plus défini." MsgBox (msg) Read_Bookmark = "Not Found" End If End Function
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18 Public Function Fill_Bookmark(BM_Name As String, BM_Value As String) As Boolean ' Va mettre BM_Value dans le bookmark BM_Name. Retourne Vrai si succès Dim msg As String If ActiveDocument.Bookmarks.Exists(BM_Name) Then 'Le signet existe With ActiveDocument.Bookmarks(BM_Name) .Select Selection.Text = BM_Value ' On recrée le signet car on l'a detruit en mettant le texte ActiveDocument.Bookmarks.Add Name:=BM_Name, Range:=Selection.Range End With Fill_Bookmark = True Exit Function Else 'Le signet n'existe pas msg = "Erreur sur la feuille." & vbCr & "Le signet " & BM_Name & " n'est plus défini." & vbCr & "Merci de contacter le responsable." MsgBox (msg) Fill_Bookmark = False End If End FunctionEn esperant que cela soit utile
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41 Public Sub CopyInWmf(WmfFile As String, WMFPath as String) 'Pour mettre un logo ou image sur la page 'Cherche le fichier WmfFile dans WMFPath et l'insère dans le document au signet [Croquis] Dim TmpCroquis As InlineShape Dim FS Dim RetVal As Boolean 'Ajouter le chemin au nom de fichier wmf If Right$(WMFPath, 1) = "\" Then WmfFile = WMFPath & WmfFile Else WmfFile = WMFPath & "\" & WmfFile End If ' Va mettre fichier wmf dans le bookmark Croquis 'Créer un objet pour puvoir ensuite le bookmarker car l'insertion 'de l'image detruit le signet d'origine - ne me demandez pas pourquoi, 'les voies de Billou sont impénétrables. Set FS = CreateObject("Scripting.FileSystemObject") If FS.fileexists(WmfFile) Then 'On a trouvé le fichier If ActiveDocument.Bookmarks.Exists("Croquis") Then 'On a trouvé le signet With ActiveDocument.Bookmarks("Croquis") .Select 'Inserer l'image Set TmpCroquis = Selection.InlineShapes.AddPicture(WmfFile, False, True) TmpCroquis.Select ' On recrée le signet car on l'a detruit en mettant le texte ActiveDocument.Bookmarks.Add Name:="Croquis", Range:=Selection.Range End With Set FS = Nothing 'Important - détruire les objets crées sinon refus de fermeture de Word Exit Sub Else 'pas de signet MsgBox "Le Signet 'Croquis' n'existe pas! Arrêt." End If Else 'Fichier croquis pas trouvé 'Affiche le plan quand même MsgBox ("Le croquis n'a pas été trouvé. Merci d'imprimer la feuille et de la transmettre au responsable") RetVal = Fill_Bookmark("Croquis", "Croquis " & WmfFile & " pas trouvé") Set FS = Nothing End If End Sub
Clive
Oui cela va aller rejoindre la FAQ VBAEnvoyé par Clive
Merci
Salut !
merci pour les infos ! ça m'aide beaucoup mais j'ai un petit problème !
Voilà !
Je souhaite faire une fusion/publipostage, à partir d'un form, je souhaite mettre les dans ma lettre uniquement les données d'une personne (cad une seule ligne d'enregistrement).
lorsque je test mon bouton, il m'ouvre bien le document word que je lui ais demandé.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18 Private Sub btinscrit_Click() 'On Error GoTo testerreur 'je définis une nouvelle instance de word Dim MyWord As Word.Application Set MyWord = New Word.Application 'je rends l'application visible MyWord.Visible = True 'j'ouvre la lettre type Documents.Open ("C:\Gestion_des_Adhérents\vb\fiche_adhesion.doc") 'je définis le fichier de données Documents(App.Path & "\fiche_adhesion.doc").MailMerge.OpenDataSource (App.Path & "\tahitiens.mdb") 'je lance la fusion Documents(App.Path & "\fiche_adhesion.doc").MailMerge.Execute Exit Sub 'le gestionnaire d'erreur 'testerreur: 'MsgBox "Erreur lors de l'execution...Recommencez", vbCritical, "" End Sub
premier pb, il m'ouvre deux fois le document word avec les info de ma 1ère ligne de ma table (alors que j'ai demandé la 5ème ligne)
deuxième problème, lorsque je ferme les documents word et que je rappuie sur le bouton, il me met un message d'erreur :
Erreur d'execution 462
le serveur distant n'existe pas ou n'est pas disponible
voilà !
merci de votre aide !
Vous avez un bloqueur de publicités installé.
Le Club Developpez.com n'affiche que des publicités IT, discrètes et non intrusives.
Afin que nous puissions continuer à vous fournir gratuitement du contenu de qualité, merci de nous soutenir en désactivant votre bloqueur de publicités sur Developpez.com.
Partager