Fonction remplacer textbox

Résolu
maxsecurite2 Messages postés 181 Date d'inscription vendredi 3 janvier 2003 Statut Membre Dernière intervention 9 avril 2010 - 18 août 2006 à 21:03
maxsecurite2 Messages postés 181 Date d'inscription vendredi 3 janvier 2003 Statut Membre Dernière intervention 9 avril 2010 - 22 août 2006 à 16:01
Bonjour,
Je vais essayer d'expliquer mon problème ; j'ai dans un textbox un text comme ça : "vie, manger, manger, manger herbe jardin" et j'aimerai remplacer chaque "manger" par un mot clef (toujours différent) au hasard pris dans une listbox ce qui pourrais donner "vie, fraise, pomme poire herbe jardin"

et quand je fais la fonction replace sa va transformer tout mes "manger" par le même mot clef
Text1.Text = Text1.Text + Replace(Text1.Text, "manger", Int(5250 * Rnd))

Pour la sélection dans ma textbox j'utilise sa :
dim fruits as string
fruits = Form5.List1.List("20" * Rnd + "1")

Comment faire pour que sa fonctionne (oui je sais je suis un débutant) ?

D'avance merci
Maxime

7 réponses

cedvinc Messages postés 19 Date d'inscription mercredi 28 juillet 2004 Statut Membre Dernière intervention 15 décembre 2007
19 août 2006 à 15:54
Je pense que tu pourrais t'aider des fonctions de selection de TextBox pour selectionner un mot et le remplacer.



A l'aide de la fonction InStr, fait instr(1,textbox1.text,"manger") qui retourne un entier spécifiant la position de
début de la première occurrence d'une chaîne à l'intérieur d'une autre.

Car tu connais la longueur du mot remplacer par Len qui retourne un entier contenant le nombre de caractères contenus dans une chaîne.
Si dans le code, on peut faire une séelction à partir du point de départ jusqu'au point d'arriver (départ + longueur du mot recherché), il suffirait de faire:
TextBox1.SelectedText = "Mot à Mettre"
3
cedvinc Messages postés 19 Date d'inscription mercredi 28 juillet 2004 Statut Membre Dernière intervention 15 décembre 2007
18 août 2006 à 22:00
D'abord initialise tes nombres aléatoires au lancement de ton application, pour éviter d'avoir tj la même suite de nombre généré par RND(), par:
Randomize()

Il va éviter de générer tj la même suite de nombres.

Première hypothèse: Il faut peut être réaliser une pause de 1 seconde car il se peut qu'il génère à la suite le même nombre aléatoire car tj le même temps.

Seconde hypothèse: La fonction Remplace contrôle tout le texte tout de suite donc il arrête ta boucle.

Voici l'aide que je peux t'apporter et d'aider à la vue de tes informations. J'espère de donner des pistes.

Bon courage
0
maxsecurite2 Messages postés 181 Date d'inscription vendredi 3 janvier 2003 Statut Membre Dernière intervention 9 avril 2010
18 août 2006 à 22:05
Tout d'abord merci de répondre à mon message merci pour l'aide apporté je vais essayer pour voir n'hésitez pas à trouver d'autre pistes ;)
0
PCPT Messages postés 13280 Date d'inscription lundi 13 décembre 2004 Statut Membre Dernière intervention 3 février 2018 49
19 août 2006 à 00:24
salut,
c'est la solution 2 soumise par cedvinc.
en effet replace remplace toutes les occurences d'une chaîne par une autre.

il te faut donc soit supprimer toutes ces occurences en tableau (instruction split) puis reconcaténer avec ta suite aléatoire en boucle de 1 à ubound(Tableau), soit une boucle en utilisant instr left right mid.
dans les 2 cas il faut en effet initialiser ton aléa avec radomize

Option Explicit 
'
Private Sub Form_Load() 
    Randomize 
    Dim sMess As String 

    Dim aAleat() As Variant 
    aAleat =   Array ("vie", "fraise", "pomme", "poire", "herbe", "jardin") 

    Dim sChaine1 As String 
    sChaine1  = "vie, manger, manger, manger, herbe, jardin" 
    sMess =  sChaine1 & vbCrLf 

    If  InStr (1, sChaine1, "manger") > 0 Then 
        Dim i As Integer 
        Dim aChaine() As String 
        Dim sChaine2 As String 

        aChaine  = Split(sChaine1, "manger") 
        sChaine2 =  aChaine(0) 
        For i = 1 To  UBound (aChaine) 
            sChaine2  = sChaine2 & aAleat(Int(Rnd * 6)) & aChaine(i) 
        Next i 

        MsgBox sMess & sChaine2 
    Else 
        MsgBox "'manger' n'est pas contenu dans la chaîne" 
    End If 
    Unload Me 
End Sub

<small> Coloration
syntaxique automatique [AFCK]</small>
       

PCPT  [AFCK]

<hr size="2" width="100%" />Prenez un instant pour répondre à ce sondage svp
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
maxsecurite2 Messages postés 181 Date d'inscription vendredi 3 janvier 2003 Statut Membre Dernière intervention 9 avril 2010
19 août 2006 à 15:23
Merci de votre aide j'ai l'impression que je vois le bout du problème malheuresement je ne vois pas comment appliquer sa à une chaine de caractère dans un textbox sachant que le texte est le contenu d'un fichier mais encore merci car j'essai de l'appliquer à mon projet et je vois la fin s'annoncer !!
0
maxsecurite2 Messages postés 181 Date d'inscription vendredi 3 janvier 2003 Statut Membre Dernière intervention 9 avril 2010
19 août 2006 à 16:09
En fait le fonctionnement du programme va être simple un fichier txt pour les mots clef à remplacer par rapport au contenu d'une textbox quand le programme rencontre dans la textbox le mot "manger" il va chercher dans le fichier texte (donc avec une listbox) comme sa :

randomize
Form1.List1.List("100" * Rnd + "1")

une phrase au hasard dans la listbox qui auparavant aura été chargée avec le fichier txt comme sa

Open fruits For Input As #2
While Not EOF(2)
Line Input #2, l$
Text2.Text = Text2.Text + 1
Form5.List1.AddItem (l$)
Wend
Close #2

par exemple le texte : "remplir le plat de manger avec 1/3 de manger" devra modifier manger par un mot clef au hasard de la list1

J'espère être claire :) merci à tous ceux qui ont répondu même si j'ai pas encore trouvé le code source miracle ;)
0
maxsecurite2 Messages postés 181 Date d'inscription vendredi 3 janvier 2003 Statut Membre Dernière intervention 9 avril 2010
22 août 2006 à 16:01
Merci Cedvinc c'est exactement ce que je cherchais
0
Rejoignez-nous