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.NET Discussion :

Remplacement de mot dans un richtextbox [Débutant]


Sujet :

VB.NET

  1. #1
    Membre éprouvé Avatar de thierry007
    Homme Profil pro
    Autodidacte
    Inscrit en
    Août 2006
    Messages
    876
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Autodidacte
    Secteur : Industrie

    Informations forums :
    Inscription : Août 2006
    Messages : 876
    Par défaut Remplacement de mot dans un richtextbox
    Bonjour à tout le monde et très heureuse année 2015 pour commencer

    Dans mon petit projet je souhaite pouvoir édité du courrier avec des données venant du programme
    Ma première idée était les signets avec Ms Word, mais là je suis confronté a des personnes qui n'on pas office et qui ne souhaite pas l'acheter pour différentes raisons.
    Je me suis alors tourner vers un module mini traitement de texte ( personnel et simplifié) avec un Richtextbox , qui me permet donc de pouvoir enrichir le texte (gras, souligné,.... )
    Lorsque je place une variable dans mon texte (ex: @MaVariableNom ) et que je fais une recherche pour la remplacer par le contenu du programme avec :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
      NameFieds = "@MaVariableNom"
                      RtxMainTexte.Select(RtxMainTexte.Find(NameFieds), Len(NameFieds))
                      RtxMainTexte.SelectedText = "Mon texte de remplacement"
    Il exécute très bien la tache, mais si j'ai plusieurs fois la même variable, là il ne remplace rien qu'une fois
    il faut alors que je parcoure une deuxième fois mon RtxMainTexte.

    Y aurais t'il une autre solution.
    J'ai bien pensé a Replace mais in fonctionne uniquement sur du textbox

  2. #2
    Membre Expert Avatar de mactwist69
    Homme Profil pro
    Développement VB.NET
    Inscrit en
    Janvier 2007
    Messages
    1 707
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Saône et Loire (Bourgogne)

    Informations professionnelles :
    Activité : Développement VB.NET
    Secteur : Industrie

    Informations forums :
    Inscription : Janvier 2007
    Messages : 1 707
    Par défaut
    Bonjour,

    Effectivement c'est normal, car le Select va sélectionné la première itération du mot recherché... Et ne va donc pas tous les sélectionner d'un coup.
    Je pense donc qu'il faille boucler...

  3. #3
    Membre éprouvé Avatar de thierry007
    Homme Profil pro
    Autodidacte
    Inscrit en
    Août 2006
    Messages
    876
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Autodidacte
    Secteur : Industrie

    Informations forums :
    Inscription : Août 2006
    Messages : 876
    Par défaut
    J'avais regardé a cela aussi, mais alors si j'ai plusieurs fois la même variable et que le document en comporte 20, tu imagines le temps de bouclage

  4. #4
    Membre Expert Avatar de mactwist69
    Homme Profil pro
    Développement VB.NET
    Inscrit en
    Janvier 2007
    Messages
    1 707
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Saône et Loire (Bourgogne)

    Informations professionnelles :
    Activité : Développement VB.NET
    Secteur : Industrie

    Informations forums :
    Inscription : Janvier 2007
    Messages : 1 707
    Par défaut
    De nos jours, avec un processeur à 2 GHz... Ça doit prendre quelques millisecondes.... lol
    C'est surement acceptable.

  5. #5
    Membre confirmé
    Homme Profil pro
    Retraité
    Inscrit en
    Septembre 2005
    Messages
    28
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Saône et Loire (Bourgogne)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Septembre 2005
    Messages : 28
    Par défaut
    Bonjour,
    Je pense que Replace serait la meilleure solution, et cela marche avec un Richtextbox.
    Exemple :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     Dim a As String
            a = Richtextbox1.Text
            Dim a2 As String
            a2 = a.Replace("a", "i") REM remplace les a par des i
            Richtextbox1.Text = a2

  6. #6
    Membre éprouvé Avatar de thierry007
    Homme Profil pro
    Autodidacte
    Inscrit en
    Août 2006
    Messages
    876
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Autodidacte
    Secteur : Industrie

    Informations forums :
    Inscription : Août 2006
    Messages : 876
    Par défaut
    Bonjour tovin

    Dans ta méthode tu transfert ton richtexbox dans un string et en suite tu fais le remplacement dans le string et en fin du replace ton string dans richtextbox.
    Mais de cette façon tu pers toute la mise en forme du texte
    Si je ne me trompe pas

  7. #7
    Membre Expert Avatar de mactwist69
    Homme Profil pro
    Développement VB.NET
    Inscrit en
    Janvier 2007
    Messages
    1 707
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Saône et Loire (Bourgogne)

    Informations professionnelles :
    Activité : Développement VB.NET
    Secteur : Industrie

    Informations forums :
    Inscription : Janvier 2007
    Messages : 1 707
    Par défaut
    C'est pour cela que ne l'avais pas proposé...

    Je pense que la boucle sur le Select est la solution la plus rapide pour ta situation.
    Fait le test, avec 20 mots clés, je suis sur que tu trouveras cela rapide... ou alors c'est peut être qu'il y a un souci dans le code qui fait perdre du temps.

  8. #8
    Membre chevronné
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Juillet 2013
    Messages
    235
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Juillet 2013
    Messages : 235
    Par défaut
    Bonjour,

    Je ne voulais pas prendre partie de cette discussion, car il existe de nombreux tutos à ce propos, mais...
    J'ai bien pensé a Replace mais in fonctionne uniquement sur du textbox
    Pourquoi ça?
    Regarde ce que j'ai trouvé:
    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
     
                RichTextBox1.Text = "je me suis alors tourner vers un module mini traitement de texte (personnel et simplifié) avec un Richtextbox , qui me permet donc de pouvoir enrichir le texte (gras, souligné,.... )Lorsque je place une variable dans mon texte (ex: @MaVariableNom ) et que je fais une recherche pour la remplacer par le contenu du programme avec"
     
                'Remplacement de toutes les chaines dans un un texte:
                RichTextBox1.Text = RichTextBox1.Text.Replace("je", "<<JE>>")
     
                Dim Word As String
                Dim Couleur As Color
     
                'Changement de Couleurs ou autres :
                'Les mots "<<JE>>" en bleu:
                Word = "<<JE>>"
                Couleur = Color.Blue
                Dim len As Integer = RichTextBox1.TextLength
     
                Dim lastindex = RichTextBox1.Text.LastIndexOf(word)
                Dim index As Integer = 0
                While index < lastindex
                    RichTextBox1.Find(word, index, len, RichTextBoxFinds.None)
                    RichTextBox1.SelectionColor = Couleur
                    index = RichTextBox1.Text.IndexOf(word, index) + 1
                End While
     
                'Les mots "text" en rouge:
                Word = "text"
                Couleur = Color.Red
                len = RichTextBox1.TextLength
     
                lastindex = RichTextBox1.Text.LastIndexOf(Word)
                index = 0
                While index < lastindex
                    RichTextBox1.Find(Word, index, len, RichTextBoxFinds.None)
                    RichTextBox1.SelectionColor = Couleur
                    index = RichTextBox1.Text.IndexOf(Word, index) + 1
                End While
    Tiens... j'ai de suite vu une application pratique dans ce cas spécifique:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
                RichTextBox1.Text = "je me suis alors tourner vers un module mini traitement de texte (personnel et simplifié) avec un Richtextbox , qui me permet donc de pouvoir enrichir le texte (gras, souligné,.... )Lorsque je place une variable dans mon texte (ex: @MaVariableNom ) et que je fais une recherche pour la remplacer par le contenu du programme avec"
                RichTextBox1.Text = RichTextBox1.Text.Replace("je me suis alors tourner", "je me suis alors tourner tourné")
     
                RichTextBox1.SelectionStart = RichTextBox1.Find("tourné", RichTextBoxFinds.WholeWord)
                RichTextBox1.SelectionLength = "tourné".Length
                RichTextBox1.SelectionBackColor = Color.Pink
     
                RichTextBox1.SelectionStart = RichTextBox1.Find("tourner", RichTextBoxFinds.WholeWord)
                RichTextBox1.SelectionLength = "tourner".Length
                Dim f As New System.Drawing.Font("Arial", 8, FontStyle.Strikeout)
                RichTextBox1.SelectionFont = f

  9. #9
    Membre éprouvé Avatar de thierry007
    Homme Profil pro
    Autodidacte
    Inscrit en
    Août 2006
    Messages
    876
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Autodidacte
    Secteur : Industrie

    Informations forums :
    Inscription : Août 2006
    Messages : 876
    Par défaut
    Merci bien de votre aide et suivit
    je suis l'initiative de MacTwist69 une boucle "Do Loop" avec ceci qui fonctionne très bien:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
     Do
                      If InStr(TxtMainTexte.Text, NameFieds) > 0 Then
                                TxtMainTexte.Select(TxtMainTexte.Find(MaVariable), Len(MaVariable))
                                TxtMainTexte.SelectedText = "Ce que je mets a la place"
                      else
                                 exit Do
                      End if
     Loop
    et cette façon, j'ai eu plus de liberté, soit :

    - J'imprime mon Richtextbox directement

    - Je le sauve dans un fichier temp pour l'ouvrir avec WordPad ( Gratuit )
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    TxtMainTexte.SaveFile(MonFichier.tmp)
    Process.Start("winword.exe", MonFichier.tmp)
    - Je peux aussi le coller dans Word
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    ... Création object Word et Doc...
    TxtMainTexte.SelectAll()
    TxtMainTexte.Copy()
    oWord.Selection.Paste()
    Bien merci de votre participation
    Th

    PS: par contre je dois encore voir avec le Word , car lorsque je copie le contenu dans un nouveau document, et que je ferme l'appli Word , il me demande pour sauvegarder le .dotm

  10. #10
    Membre chevronné
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Juillet 2013
    Messages
    235
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Juillet 2013
    Messages : 235
    Par défaut
    Oui,
    C'est bien ce que je je vois, une boucle pour faire quelque chose de très simple
    ceci:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    TxtMainTexte.Select(TxtMainTexte.Find(MaVariable), Len(MaVariable))
              TxtMainTexte.SelectedText = "Ce que je mets a la place"
    Se traduit par:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
     TxtMainTexte.Text = TxtMainTexte.Text.Replace(MaVariable, "Ce que je mets a la place")
    Ceci:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    If InStr(TxtMainTexte.Text, NameFieds) > 0 Then
    Se traduit par:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    If TxtMainTexte.Text.Contains(NameFieds) Then
    D'ailleurs "InStr" c'est du VB6 pas du VB.Net

  11. #11
    Membre éprouvé Avatar de thierry007
    Homme Profil pro
    Autodidacte
    Inscrit en
    Août 2006
    Messages
    876
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Autodidacte
    Secteur : Industrie

    Informations forums :
    Inscription : Août 2006
    Messages : 876
    Par défaut
    Citation Envoyé par ACIVE_CS Voir le message


    D'ailleurs "InStr" c'est du VB6 pas du VB.Net
    Peut être, mais très fonctionnel

    Merci de ta remarque -> constructive

  12. #12
    Inactif  

    Homme Profil pro
    Développeur .NET
    Inscrit en
    Janvier 2012
    Messages
    4 903
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 68
    Localisation : Canada

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : Finance

    Informations forums :
    Inscription : Janvier 2012
    Messages : 4 903
    Billets dans le blog
    36
    Par défaut
    Bonjour,

    C'est un peu en dehors de la question, mais il y a docx, un contrôle .net qui permet de jouer avec des documents Word, dans des applications Visual Studio. Il faut le Framework 4 et VS2010:

    http://docx.codeplex.com/

    Il y a des liens vers des exemples au bas de la page. Je ne suis pas allé vers les exemples, mais je ne sais pas si le monsieur en a fait en VB.net. Il a programmé sa dll en Caiguisé.

  13. #13
    Membre éprouvé Avatar de thierry007
    Homme Profil pro
    Autodidacte
    Inscrit en
    Août 2006
    Messages
    876
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Autodidacte
    Secteur : Industrie

    Informations forums :
    Inscription : Août 2006
    Messages : 876
    Par défaut
    bonjour clementmarcotte

    Effectivement , ce n'est pas vraiment ce que je recherche, mais me semble être très utile dans le cadre d'un petit projet a venir
    Je vais en faire le tour ce soir

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 9
    Dernier message: 23/12/2013, 16h40
  2. [VB 2005]Selectionner un mot dans une RichTextBox
    Par D4rkTiger dans le forum Windows Forms
    Réponses: 2
    Dernier message: 29/07/2006, 22h27
  3. Réponses: 10
    Dernier message: 29/04/2006, 10h40
  4. [RegEx] motif pour remplacer un mot dans du code HTML ...
    Par r-zo dans le forum Langage
    Réponses: 6
    Dernier message: 31/03/2006, 13h31

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