Chaines de caracteres

cs_David57600 Messages postés 3 Date d'inscription vendredi 28 septembre 2007 Statut Membre Dernière intervention 28 septembre 2007 - 28 sept. 2007 à 15:04
BruNews Messages postés 21040 Date d'inscription jeudi 23 janvier 2003 Statut Modérateur Dernière intervention 21 août 2019 - 29 sept. 2007 à 10:19
Bonjour tous le monde,

Je suis étudiant en licence pro métiers des services et des telecoms et nous avons commencer par avoir des cours sur visuals basic.

J'ai un petit TD ( pas noté biensur c'est juste pour de l'entrainement) qui me demande d'écrire un petit programme qui me perméttrait de vérifier le nombre de lettre "e" taper dans une textbox toutes les 500ms.

Le petit problème c'est que je n'arrive pas. On me demande d'utiliser la variable String mais je bloque.

Une personne pourrait t'elle m'aider s'il vous plait.

Merci d'avance pour vos réponse.

David

14 réponses

Utilisateur anonyme
28 sept. 2007 à 16:16
Salut,

Documente toi sur la fonction instr.
Sinon, je te cache pas qu'il y a surment des sources/snippets tout faits ici.

__________
Kenji
(
Nouveau forum VBA/Office
0
cs_David57600 Messages postés 3 Date d'inscription vendredi 28 septembre 2007 Statut Membre Dernière intervention 28 septembre 2007
28 sept. 2007 à 16:19
Merci Charles Racaud, je suis entrein de cherché pour le moment je n'ai encore rien trouver mais je pense que je trouverai bien quelque chose.
0
NHenry Messages postés 15113 Date d'inscription vendredi 14 mars 2003 Statut Modérateur Dernière intervention 22 avril 2024 159
28 sept. 2007 à 16:38
Bonjour

Avec un timer réglé sur 500 ms (Code sans EDI) :

Sub Timer1_Tick()

dim i as long
dim lNb as long
lNb=0

for i=1 to len(Texbox1.text)
if mid$(TextBox1.text,i,1)="e" then lNb=lNb+1
next i

'Et dans lNB tu as le nombre de "e"
end sub

Balèse la personne qui a pensé au pansement à penser (ou à panser, pensée).
VB (6, .NET1&2), C++, C#.Net1
Mon site
0
jmfmarques Messages postés 7666 Date d'inscription samedi 5 novembre 2005 Statut Membre Dernière intervention 22 août 2014 27
28 sept. 2007 à 16:47
Bonjour;

Je n'aime en général pas utiliser la fonction Split, que j'évite le plus souvent possible
Elle me parait pourtant cette fois-ci intéressante, non ? (un bon split sur le "e"). surtout si le texte est long !.
0

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

Posez votre question
cs_casy Messages postés 7741 Date d'inscription mercredi 1 septembre 2004 Statut Membre Dernière intervention 24 septembre 2014 40
28 sept. 2007 à 18:14
Oui mais comment savoir à partir du split sur le e, le nombre de e trouvé. Hein Jacques ;) (content de te revoir au passage)

Le nombre délément du tableau va varier suivant si un e se trouve en début et/ou en fin de cahine.

---- Sevyc64  (alias Casy) ----<hr size="2" width="100%" /># LE PARTAGE EST NOTRE FORCE #    http://aide-office-vba.monforum.com/index.php
0
jmfmarques Messages postés 7666 Date d'inscription samedi 5 novembre 2005 Statut Membre Dernière intervention 22 août 2014 27
28 sept. 2007 à 18:30
Bonjour,

en ajoutant systématiquement un "e" au début et à la fin
puis en n'enlevant que 1 au Ubound...

Private Sub Command1_Click()
  chaine = "eaaaaeaaaaeaaaaeaaae"
  Table = Split("e" & chaine & "e", "e")
  MsgBox UBound(Table) - 1
  chaine = "aaaaeaaaaeaaaaeaaae"
  Table = Split("e" & chaine & "e", "e")
  MsgBox UBound(Table) - 1
  chaine = "aaaaeaaaaeaaaaeaaa"
  Table = Split("e" & chaine & "e", "e")
  MsgBox UBound(Table) - 1
End Sub
0
cs_David57600 Messages postés 3 Date d'inscription vendredi 28 septembre 2007 Statut Membre Dernière intervention 28 septembre 2007
28 sept. 2007 à 18:33
Merci NHenry le programme fonctionne bien. Enfait moi je n'utilisé que la commande Len et pas la commande Mid. Je ne suis encore qu'un débutant. Merci encore pour ton aide ;-)
0
cs_casy Messages postés 7741 Date d'inscription mercredi 1 septembre 2004 Statut Membre Dernière intervention 24 septembre 2014 40
28 sept. 2007 à 18:35
Je savais que tu avais derrière les fagots une de tes astuces dont tu as le secret.

Sauf que c'est pas -1 qu'il faut ettre mais -2

---- Sevyc64  (alias Casy) ----<hr size="2" width="100%" /># LE PARTAGE EST NOTRE FORCE #    http://aide-office-vba.monforum.com/index.php
0
jmfmarques Messages postés 7666 Date d'inscription samedi 5 novembre 2005 Statut Membre Dernière intervention 22 août 2014 27
28 sept. 2007 à 18:37
T'es sur, Casy ?
Moi je compte UBound + (1 -2) = Ubound -1
Essaye ...
0
cs_casy Messages postés 7741 Date d'inscription mercredi 1 septembre 2004 Statut Membre Dernière intervention 24 septembre 2014 40
28 sept. 2007 à 18:40
ben je sais pas, j'execute ce code :
  chaine = "eaaaaeaaaaeaaaaeaaae"
  Table = Split("e" & chaine & "e", "e")
  MsgBox UBound(Table) - 1
Je compte 5 e et la messagebox me donne 6
pour celui-ci
  chaine = "aaaaaaaaaaaaaaaaaaaa"
  Table = Split("e" & chaine & "e", "e")
  MsgBox UBound(Table) - 1
elle me donne 1

---- Sevyc64  (alias Casy) ---- <hr size ="2" width="100%" /># LE PARTAGE EST NOTRE FORCE #    http://aide-office-vba.monforum.com/index.php
0
jmfmarques Messages postés 7666 Date d'inscription samedi 5 novembre 2005 Statut Membre Dernière intervention 22 août 2014 27
28 sept. 2007 à 18:43
C'est ma foi possible car je n'ai pas VB6 et utilise, avec VB5, une fonction de substitution...
0
jmfmarques Messages postés 7666 Date d'inscription samedi 5 novembre 2005 Statut Membre Dernière intervention 22 août 2014 27
28 sept. 2007 à 18:54
Alors :


 


Je viens de voir ma fonction de substitution...


 


Et comme je crois bien que celle déposée est à peu de choses près la même, je suggère que la même correction soit apportée ...pour que la substitution et VB6 soient en harmonie


 


Voilà la fonction (le rouge est ce qu'il y avait et le bleu la correction.

Public Function Split(ByVal MyString As String, ByVal Separator As String) As Variant
  Dim iPosit As Long
  Dim Table() As String
  ' <strike> ReDim Table(0)
</strike>  ReDim Table(1)
  iPosit = InStr(MyString, Separator)
  If iPosit = 1 Then
    MyString = Mid$(MyString, Len(Separator) + 1)
    iPosit = InStr(MyString, Separator)
  End If
  While iPosit > 0
    Table(UBound(Table)) = Left(MyString, iPosit - 1)
    MyString = Mid$(MyString, iPosit + Len(Separator))
    ReDim Preserve Table(UBound(Table) + 1)
    iPosit = InStr(MyString, Separator)
  Wend
  Table(UBound(Table)) = MyString
  Split = Table
End Function
0
Utilisateur anonyme
28 sept. 2007 à 18:55
A tout hasard, je poste ma méthode :
Dim i As Long, l As Long, nb As Long
i = 0
nb = 0
l = Len(chaine)
While (i < l)
  i = InStr(i + 1, chaine, "e")
  If i > 0 Then nb = nb + 1 Else Exit For
Wend, ----
(Coloration syntaxique automatique par Kenji)

__________
Kenji
(
Nouveau forum VBA/Office
0
BruNews Messages postés 21040 Date d'inscription jeudi 23 janvier 2003 Statut Modérateur Dernière intervention 21 août 2019
29 sept. 2007 à 10:19
Charles Racaud en donne la meilleure approche.
Economisons qlqs cycles:
Sub tester()
  Dim i As Long, nb As Long
  Dim chaine As String
  chaine = "il est dans le métro à cette heure"
  nb = 0
  Do
    i = InStr(i + 1, chaine, "e")
    If i = 0 Then Exit Do
    nb = nb + 1
  Loop
  Debug.Print nb
End Sub

ciao...
BruNews, MVP VC++
0
Rejoignez-nous