IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

VB 6 et antérieur Discussion :

[VB6]Transférer un RichTextBox vers Word


Sujet :

VB 6 et antérieur

  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Octobre 2005
    Messages
    34
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2005
    Messages : 34
    Par défaut [VB6]Transférer un RichTextBox vers Word
    Bonjour,

    J'ai fait une petite application en VB 6.0 qui utilise un RichTextBoxpuis lorsque l'on clique "Imprimer", les informations sont envoyées par VB dans un objet Word qui imprime diverses informations.

    Mon problème est que j'ignore comment appliquer la mise en forme (bold, italic, underline, font, etc) de mon contrôle RTF dans mon objet Word. J'ai pensé utiliser la propriété TextRTF du RichTextBox mais l'objet Word se contente d'imprimer les tags plutôt que de les interpréter.


    Pardon si j'ai oublié de mentionner une information importante, et merci de votre aide.

  2. #2
    Expert confirmé
    Avatar de ThierryAIM
    Homme Profil pro
    Inscrit en
    Septembre 2002
    Messages
    3 673
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 62
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Secteur : Industrie

    Informations forums :
    Inscription : Septembre 2002
    Messages : 3 673
    Par défaut Re: [VB6]Transférer un RichTextBox vers Word
    Citation Envoyé par Chess0
    Pardon si j'ai oublié de mentionner une information importante
    oui, ton code !

  3. #3
    Membre averti
    Profil pro
    Inscrit en
    Octobre 2005
    Messages
    34
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2005
    Messages : 34
    Par défaut
    Code pour imprimer:

    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
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    Private Sub cmdImprimer_Click()
    On Error GoTo GestionErreur
        If lstClients.SelCount > 0 Then
            Dim MyWord As Word.Application, doc As Word.Document
            Dim signet As String, i As Long
            '
            Dim iRangeBoldStart As Integer
            Dim iRangeBoldEnd As Integer
            Dim iRangeIndentStart As Integer
            Dim iRangeIndentEnd As Integer
            '
            Dim RangeBold As Word.Range
            Dim RangeIndent As Word.Range
            Set MyWord = New Word.Application
     
            With MyWord
                Set doc = .Documents.Open(App.Path & "\docs\mydoc.doc")
                Dim myRange As Word.Range
                Dim rsClients As New ADODB.Recordset
                Dim rsContacts As New ADODB.Recordset
                Dim rsNotes As New ADODB.Recordset
                Dim iClient As Integer
                Dim iContact As Integer
                Dim iNote As Integer
     
                Set myRange = doc.Content
                myRange.Delete
     
                For iClient = 0 To lstClients.SelCount - 1
                    If lstClients.Selected(iClient) Then
                        rsClients.Open "select clients.*, villes.ville from clients inner join villes on villes.id = clients.villes_id where clients.id = '" & lstClients_hid.List(iClient) & "';", frmVentesClients.connMyConn, 1, 3
                        Set myRange = doc.Content
                        myRange.Font.Name = "Verdana"
                        myRange.Font.Size = 8
     
                        With myRange
                            .Collapse wdCollapseEnd
                            ' **************** CLIENT ****************
                            iRangeBoldStart = Len(doc.Content) - 1
                            .InsertAfter UCase(rsClients.Fields("entreprise"))
     
                            iRangeBoldEnd = Len(doc.Content) - 1
                            Set RangeBold = doc.Range(iRangeBoldStart, iRangeBoldEnd)
                            RangeBold.Font.Bold = True
                            RangeBold.Font.Size = 10
     
                            .InsertAfter vbCrLf
                            If Len(Trim(rsClients.Fields("adresse"))) > 0 Then
                                .InsertAfter rsClients.Fields("adresse")
                            End If
                            If Len(Trim(rsClients.Fields("ville"))) > 0 Then
                                .InsertAfter ", " & rsClients.Fields("ville")
                            End If
     
     
    etc...
    Je ne prends pas la peine de mettre le code au complet vu que le reste est très redondant, mais avec des informations différentes.


    Le reste du code est très simple, on ajoute le contenu du RichTextBox dans la base de données.


    Soit dit en passant, je ne vois pas l'utilité du code source étant donné qu'il ne s'agit pas d'une question à propos d'une erreur de programmation, mais si tu crois que ça peut t'aider à m'aider..

  4. #4
    Inactif  
    Avatar de ouskel'n'or
    Profil pro
    Inscrit en
    Février 2005
    Messages
    12 464
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2005
    Messages : 12 464
    Par défaut
    Je ne comprends pas bien comment tu récupères le style de ton RichTextBox mais voici toujours la syntaxe, dans Word, pour modifier le style de ta selection
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
        Selection.Font.Bold = wdToggle
        Selection.Font.Size = 10
    Si tu veux appliquer le style à tout le document, tu fais au préalable
    A tout hasard

  5. #5
    Membre averti
    Profil pro
    Inscrit en
    Octobre 2005
    Messages
    34
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2005
    Messages : 34
    Par défaut
    Je récupère le style de mon RichTextBox avec la propriété TextRTF du RichTextBox (j'enregistre le tout dans une BD). Ensuite, quand je clique sur Imprimer, je vais chercher l'information dans la BD pour l'insérer dans un document Word et l'imprimer.


    J'arrive déjà à mettre en gras, italique, etc dans Word:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
                            iRangeBoldStart = Len(doc.Content) - 1 
                            .InsertAfter UCase(rsClients.Fields("entreprise")) 
                            iRangeBoldEnd = Len(doc.Content) - 1 
                            Set RangeBold = doc.Range(iRangeBoldStart, iRangeBoldEnd) 
                            RangeBold.Font.Bold = True 
                            RangeBold.Font.Size = 10
    Mais ce que je voulais savoir, c'est s'il existe une façon simple de faire passer la valeur TextRTF de mon RichTextBox (enregistré dans la BD..) au document Word tout en conservant la mise en forme.

    Bien sûr, je peux essayer en faisant des tas de conditions.. Mais je me dit qu'un objet puissant comme Word doit inclure une façon plus pratique de faire la même chose que je souhaite.

    Exemple de valeur dans TextRTF :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    {\rtf1\ansi\ansicpg1252\deff0{\fonttbl{\f0\fnil\fcharset0 MS Sans Serif;}}
    \viewkind4\uc1\pard\lang1033\f0\fs17 Un exemple de texte. Un exemple de texte. Un exemple de texte. \i Un exemple de texte. Un exemple de texte.\i0  Un exemple de texte.
    \par 
    \par \b Un exemple de texte. Un exemple de texte.\b0  Un exemple de texte. Un exemple de texte. Un exemple de texte. Un exemple de texte. Un exemple de texte. \ul Un exemple de texte.\ulnone  Un exemple de texte. Un exemple de texte. Un exemple de texte. Un exemple de texte.
    \par }

  6. #6
    Inactif  
    Avatar de ouskel'n'or
    Profil pro
    Inscrit en
    Février 2005
    Messages
    12 464
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2005
    Messages : 12 464
    Par défaut
    Avec un module de classe, tu devrais pouvoir t'en sortir. Il y une bonne adresse pour ça : http://xo.developpez.com/tutoriel/vb6/poo_vb6/
    Au départ, tu séries les différents formats que tu as dans rtf et tu passes au format défini dans le module de classe.

    Tu peux aussi faire ça en passant par des fonction dans lesquelles tu passes l'index du format RTF que tu as sérié et ton text en paramètres...

    Un peu l'usine à gaz mais plus simple que de formater au fur et à mesure.

    Juste pour l'idée

    A+

    NB - Une petite remarque : Je n'aimerais pas avoir à le faire

  7. #7
    Expert confirmé
    Avatar de ThierryAIM
    Homme Profil pro
    Inscrit en
    Septembre 2002
    Messages
    3 673
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 62
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Secteur : Industrie

    Informations forums :
    Inscription : Septembre 2002
    Messages : 3 673
    Par défaut
    Mais pourquoi diable, enregister tout le rtf dans la BDD, et non pas un lien sur un fichier.rtf, enregistré sur le disque

    ca serait quand même plus simple, et allègerait la BDD, non ?

  8. #8
    Membre averti
    Profil pro
    Inscrit en
    Octobre 2005
    Messages
    34
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2005
    Messages : 34
    Par défaut
    Ouskel'n'or : C'est effectivement ce à quoi j'avais pensé, mais j'espèrais ne pas en arriver là.. hehe Mais bon, je vais me résigner, je crois.

    ThierryAIM : Ça allègerait effectivement la BDD mais pas suffisamment pour que ça fasse une différence considérable, vu la puissance du serveur. De plus, il s'agit d'informations importantes, qui doivent être archivées, pas seulement imprimées. D'où la raison de la BDD.

  9. #9
    Expert confirmé
    Avatar de ThierryAIM
    Homme Profil pro
    Inscrit en
    Septembre 2002
    Messages
    3 673
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 62
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Secteur : Industrie

    Informations forums :
    Inscription : Septembre 2002
    Messages : 3 673
    Par défaut
    Citation Envoyé par Chess0
    ThierryAIM : Ça allègerait effectivement la BDD mais pas suffisamment pour que ça fasse une différence considérable, vu la puissance du serveur. De plus, il s'agit d'informations importantes, qui doivent être archivées, pas seulement imprimées. D'où la raison de la BDD.
    Parce que enregistrer sur disque, ce n'est pas archiver ???

    A toi de concevoir l'archivage, sous forme de zip, ou autre ....

  10. #10
    Membre averti
    Profil pro
    Inscrit en
    Octobre 2005
    Messages
    34
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2005
    Messages : 34
    Par défaut
    C'est archiver... Mais pas facile de s'y retrouver par la suite. Les possibilités de récupération sont quand même plus nombreuses avec la BDD, non?

    Et puis, pour naviguer d'un enregistrement à l'autre, ça ne prend qu'un 1/4 de seconde avec la BDD. Avec les fichiers textes, il faudra ouvrir/charger/fermer le fichier entre chaque navigation. Je doute que ce soit aussi rapide, d'autant qu'ils ne se situeraient pas sur une machine locale. Ça permet également d'éviter que les informations soient éparpillées, puisque la base de données est utilisées pour tout le reste. Et le backup inclut la base de données, pas les autres fichiers. Ça se modifie, j'en conviens mais le backup est déjà en place, et fonctionnel. Donc, utiliser n'importe quel autre moyen d'archivage autre qu'une BDD rajouterait des étapes et du temps d'éxécution sans compter la modification du système de backup.

Discussions similaires

  1. [XL-2010] Transférer un tableau vers word
    Par Matrixmax dans le forum Macros et VBA Excel
    Réponses: 0
    Dernier message: 22/03/2013, 15h25
  2. exporter ver word a partir de access
    Par saad_info dans le forum Access
    Réponses: 2
    Dernier message: 21/09/2005, 11h53
  3. [CR XI] export vers word d'un crystal de type tableau
    Par kikidrome dans le forum SAP Crystal Reports
    Réponses: 3
    Dernier message: 26/07/2005, 22h52
  4. [VB6] exporter des données de Vb vers word
    Par ptitjean80 dans le forum VB 6 et antérieur
    Réponses: 18
    Dernier message: 29/05/2004, 02h50
  5. [VB6] Modification objet OLE dans Word sous VB
    Par zworg dans le forum VB 6 et antérieur
    Réponses: 2
    Dernier message: 23/02/2004, 08h20

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo