Chercher une chaîne de caractères dans une liste

Chercher une chaîne de caractères dans une liste - VB/VBA/VBS - Programmation

Marsh Posté le 23-05-2007 à 14:45:14    

Bonjour à tous !
 
j'aimerais chercher combien de fois apparaît une chaîne de caractères précise dans une listebox remplie, mais je n'arrive pas à trouver comment on fait, j'ai demander à des amis qui eux n'ont plus n'arrivaient pas (à croire que l'on ne chercher jamais de chaîne de caractères dans une liste  ) et google n'a pas été mon ami sur ce coup.
 
Pouvez-vous m'aider s'il vous plait ?

Reply

Marsh Posté le 23-05-2007 à 14:45:14   

Reply

Marsh Posté le 23-05-2007 à 15:02:31    

tu peux donner un exemple de ce que tu cherches stp ?

Reply

Marsh Posté le 23-05-2007 à 15:05:06    

oui biensur,
ma liste est remplie de texte par exemple, comme des expressions, et j'aimerais par exemple, chercher dans cette liste, le nombre de fois qu'apparait le mot "je" dans toute la liste

Reply

Marsh Posté le 23-05-2007 à 15:09:58    

genre :
 - piège
 - cage
 - je
 - jeux
 - jetski
 
=> nb de je = 3 ?

Reply

Marsh Posté le 23-05-2007 à 15:10:19    

oui voila, exactement :)

Reply

Marsh Posté le 23-05-2007 à 15:21:46    

fonctions à voir (pas toutes testées):
- split()
- strcomp()
- mid()

Reply

Marsh Posté le 23-05-2007 à 15:23:25    

tu peux m'expliquer comment s'en servir ? parceque un souci notamment, c'est pour dire que l'on compare une chaine prédéfinie, ( ici "je" ) et la chaine contenue a l'indice courant de ma boucle de passage, et la j'ai du mal

Reply

Marsh Posté le 23-05-2007 à 15:42:35    

j'ai trouvé mieux : la fonction like qui te retourne true ou false si l'élément testé contient.
 
tape like dans VBE puis F1 :)

Reply

Marsh Posté le 23-05-2007 à 15:51:20    

euh...
 
instr()
=> il te donne la position de la première occurence trouvée
=> il prends en paramètre à partir d'où tester
=> donc tu vais un appel dans une boucle en mettant la position de départ = dernière trouvée + len(mot cherché) tant que ça ne retourne pas 0 (en VB, une chaine commence au caracvtères 1, donc 0 signifie "non trouvé" )

Reply

Marsh Posté le 23-05-2007 à 15:53:30    

merc, je trouvais plus la fameuse fonction toute faitre expres :p

Reply

Marsh Posté le 23-05-2007 à 15:53:30   

Reply

Marsh Posté le 23-05-2007 à 15:56:17    

ceci dit, l'idée du split, même si elle est bien nase, marche aussi très bien :D
 
nbocc = ubound(split(machaine, monmot)) - 1
 
c'est horrible, mais ça marche :D


Message édité par MagicBuzz le 23-05-2007 à 15:57:04
Reply

Marsh Posté le 23-05-2007 à 16:06:26    

merci :)
 
mais pour la fonction instr(), cela me donne  
 
        For i = 0 To LstDetailClicCommande.Items.Count - 1
            InStr(LstDetailClicCommande.Items(i).ToString, "machaine", CompareMethod.Text, CompareMethod.Text, j)
 
        Next
 
pour les comparemethod c'est ce que j'ai vu apparaitre a l'ecran comme parametre.
et je ne vois pas ou dire a partir de quel indice chercher, en fait je ne comprend pas comment compter le nombre de fois qu'une chaine apparait avec, peux tu m'en expliquer d'avantage s'il te plait ? (ui je debute si je n'avais pas précisé :) ) merci beaucoup


Message édité par Zoltan87 le 23-05-2007 à 16:17:19
Reply

Marsh Posté le 23-05-2007 à 16:20:15    

Puisque tu débutes, commence par prendre de bonnes habitudes et cherche la fonction InStr() dans l'aide en ligne VBA.
Tu devrais comprendre vite ton problème.

Reply

Marsh Posté le 23-05-2007 à 16:40:47    

voila, je viens de le faire, j'ai compris alors pour start, et j'ai donc fait ceci, juste pour voir si ca fonctionnait
 
        j = 1
        For i = 0 To LstDetailClicCommande.Items.Count - 1
            j = InStr(j, LstDetailClicCommande.Items(i).ToString, "machaine" )
        Next
 
mais à l'éxécution, j'ai un message me disant que start ne peut etre egal à 0, alors qu'ici il vaut 1 :s

Reply

Marsh Posté le 23-05-2007 à 16:44:15    

ta boucle du i, fais la commencer à 1 et non pas 0

Reply

Marsh Posté le 23-05-2007 à 16:48:57    

       j = 1
        For i = 1 To LstDetailClicCommande.Items.Count - 1
            j = InStr(j, LstDetailClicCommande.Items(i).ToString, "classique" )
        Next
 
j'ai donc mis i et j à 1, mais je rencontre toujours le message "start doit être supérieur à 0" :s

Reply

Marsh Posté le 23-05-2007 à 16:55:57    

vire le j et met directement 1

Reply

Marsh Posté le 23-05-2007 à 17:06:37    

mais si je fais ca, comment est ce que le programme va savoir compter le nombre de fois que la chaine apparait, je pourrais plus rajouter de compteur, si ?

Reply

Marsh Posté le 23-05-2007 à 17:15:17    

j'ao posté l'algo tout à l'heure :o
 
lis l'algo, et tu verras qu'aucun des bous de code ne ressemble à un pouillème de ce qu'il faut faire :spamafote:

Reply

Marsh Posté le 23-05-2007 à 17:19:15    

Code :
  1. option explicit
  2.  
  3. dim pos, nb, lrec
  4. dim rec
  5. dim el
  6.  
  7. rec = "je"
  8. lrec = len(rec)
  9.  
  10. nb = 0
  11. for each el in list.items
  12.  pos = 1
  13.  do while instr(pos, el.text, rec) > 0
  14.    nb = nb + 1
  15.    pos = pos + lrec
  16.  loop
  17. next
  18.  
  19. msgbox(cstr(nb) & " fois " & rec & " trouvé(s)" )


 
A l'erreur de syntaxe près :spamafote:


Message édité par MagicBuzz le 23-05-2007 à 17:20:10
Reply

Marsh Posté le 23-05-2007 à 17:23:24    

merci enormément MagicBuzz, j'essaie


Message édité par Zoltan87 le 23-05-2007 à 17:28:23
Reply

Marsh Posté le 23-05-2007 à 17:24:22    

NAN
 
"dans une boucle", "dernière trouvée", c'est du chocolat blanc ? ça implique un peu loa présence d'une boucle non ? :o (et pas sur tes items, mais dans l'item)


Message édité par MagicBuzz le 23-05-2007 à 17:24:49
Reply

Marsh Posté le 23-05-2007 à 17:33:35    

Merci énormément MagicBuzz, ca fonctionne a merveille, enfin j'ai changé .text en tostring mais c'est rien !
 
merci merci :)

Reply

Marsh Posté le    

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed