Select case Like "??" :

Résolu
guilleto Messages postés 256 Date d'inscription jeudi 23 octobre 2003 Statut Membre Dernière intervention 20 mars 2013 - 12 sept. 2005 à 12:13
guilleto Messages postés 256 Date d'inscription jeudi 23 octobre 2003 Statut Membre Dernière intervention 20 mars 2013 - 13 sept. 2005 à 09:14
Bonjour à toutes et à tous,

J'ai une longue série d'instructions du type :
if toto Like "?????A????" Then
endif
if toto Like "?????G????" Then
endif
if toto Like "?????R????" Then
endif
if toto Like "?????TU???" Then
endif
etc...

Est-il possible de faire une instruction qui ressemblerait à ça :
Select case toto
Case Like "?????A????" :
.....
end select

Si ce n'est pas possible mais que vous avez une idée approchante merci de me la transmettre !

Par avance merci

Olivier

7 réponses

PCPT Messages postés 13272 Date d'inscription lundi 13 décembre 2004 Statut Membre Dernière intervention 3 février 2018 47
12 sept. 2005 à 12:41
Case IsLike

sinon tu peux aussi directement :
Select Case Left(Mid(toto, 6, 5), 1)
Case "A"
Case "G"
'etc.....

mais "TU" n'en fera pas parti
PCPT
3
cs_hassen Messages postés 338 Date d'inscription mardi 28 janvier 2003 Statut Membre Dernière intervention 4 novembre 2008
12 sept. 2005 à 14:44
voici une source qui t'aidera beaucoup
http://www.vbfrance.com/code.aspx?ID=5911

voici son contenu



Public Function phrase_ok(ByVal chaine1 As String, ByVal chaine2 As String) As Boolean
Dim table() As String
Dim table_inter() As String
Dim ii As Integer
Dim posarg As Integer
Dim posarg2 As Integer
Dim oldposarg As Integer
Dim donnee As String
Dim donnee_len As Integer
phrase_ok = True
If InStr(1, chaine2, "*") 0 And InStr(1, chaine2, "?") 0 Then
'si pas de carac speciaux
If InStr(1, UCase(chaine1), UCase(chaine2)) = 0 Then
'c pas bon
phrase_ok = False
Else
'c bon
Exit Function
End If
End If

'd'abort les etoile
oldposarg = 0
table = Split(chaine2, "*")
If UBound(table) = 0 Then GoTo pasetoile
For ii = 0 To UBound(table)
If table(ii) = "" Then Exit For
table_inter = Split(table(ii), "?")
If UBound(table_inter) > 0 Then
'y'a des ?
donnee = table_inter(UBound(table_inter))
Else
donnee = table(ii)
End If
posarg = InStr(oldposarg + 1, UCase(chaine1), UCase(donnee))
If posarg > 0 Then
If posarg < oldposarg Then
'c pas bon
phrase_ok = False
Exit Function
End If
oldposarg = posarg
Else
'c pas bon
phrase_ok = False
Exit Function
End If
Next ii

pasetoile:
oldposarg = -1
'puis les ?
table = Split(chaine2, "?")
For ii = 0 To UBound(table)
If table(ii) = "" Then Exit For
table_inter = Split(table(ii), "*")
If UBound(table_inter) > 0 Then
'y'a des *
donnee = table_inter(UBound(table_inter))
Else
donnee = table(ii)
End If
donnee_len = Len(donnee)
posarg = InStr(1, UCase(chaine1), UCase(donnee))
'si on é pas au bout du tablo
If ii < UBound(table) Then
table_inter = Split(table(ii + 1), "*")
If UBound(table_inter) > 0 Then
'y'a des *
donnee = table_inter(0)
Else
donnee = table(ii + 1)
End If
posarg2 = InStr(posarg + 1, UCase(chaine1), UCase(donnee))
Else
'sinon y é ce quer tout é bon
Exit Function
End If
If posarg > 0 And posarg2 > 0 Then
If posarg < oldposarg Then
'c pas bon
phrase_ok = False
Exit Function
ElseIf posarg + donnee_len = posarg2 - 1 Then
'c bon
Else
'c pas bon
phrase_ok = False
Exit Function
End If
oldposarg = posarg
Else
'c pas bon
phrase_ok = False
Exit Function
End If
Next ii

End Function

Hassen TUNISIE
0
guilleto Messages postés 256 Date d'inscription jeudi 23 octobre 2003 Statut Membre Dernière intervention 20 mars 2013 1
12 sept. 2005 à 14:53
Merci à tous,

mais apparement on ne peut pas faire ce genre de chose !

PCPT : Le Case IsLike n'existe pas ! malheureusement !

J'ai dû rester sur ma première solution : If ..... Like "???A????" Then etc.

C'est plus long mais cela fonctionne !

Voilà !

Sinon Hassen je n'ai pas vraiment regardé en profondeur le code source fourni mais je ne pense pas que cela m'aide beaucoup !

Merci quand même !

Bonne prog à tous !

Olivier
0
Neo.balastik Messages postés 796 Date d'inscription jeudi 17 mai 2001 Statut Membre Dernière intervention 5 mai 2009 7
12 sept. 2005 à 16:28
Pour info, ce qui est plus long n'est pas forcément plus mauvais.
Certaines fonctions en VB s'avèrent très lentes même si elles sont pratiques à l'emploi.

Par contre, je ne sais pas si un Select Case est plus lent qu'une succession de IF. A tester donc !

Guy
0

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

Posez votre question
PCPT Messages postés 13272 Date d'inscription lundi 13 décembre 2004 Statut Membre Dernière intervention 3 février 2018 47
12 sept. 2005 à 16:50
re,
tiens, çà peut peut-être t'aider.
testé et fonctionnel, mais pas tout à fait ta demande...


Private Sub Command1_Click()
Dim MySearch As String, MonMot As String
MySearch = "A"
'MonMot = "test" & MySearch & "okoko"
MonMot = "testBokoko"

Select Case MonMot Like "????" & MySearch & "?????"
Case True: MsgBox "oui, " & MySearch & " en 5e position"
Case False: MsgBox "non"
End Select
End Sub


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

ps : en principe, select case plus rapide que successions de if
PCPT
0
cs_Jack Messages postés 14006 Date d'inscription samedi 29 décembre 2001 Statut Modérateur Dernière intervention 28 août 2015 79
12 sept. 2005 à 20:37
Salut
Avec le LIKE de VB6, on peut aussi utiliser la syntaxe propre au SQL et bien pratique :

If maChaine Like "____[AGRT]____" Then


Dans cette syntaxe, le symbole _ remplace une seule lettre (alors que % remplacerait toute quantité de lettres) et [AGRT] est la liste des caractères que l'on poiurra rencontrer en 5ème position.

Vala
Jack, MVP VB
NB : Je ne répondrai pas aux messages privés

Le savoir est la seule matière qui s'accroit quand on la partage. (Socrate)
0
guilleto Messages postés 256 Date d'inscription jeudi 23 octobre 2003 Statut Membre Dernière intervention 20 mars 2013 1
13 sept. 2005 à 09:14
Merci à tous,

Je pense que je vais malheureusement conserver la série de test avec les if !
En effet la solution qui se rapprochait le plus de ce que je cherche c'est celle de PCPT (même si j'ai pas tout compris concernant celle de Jack ).

Mais étant donné le nombre de tests que j'ai à faire je pense que je vais réfléchir à un système de fichier Access dans lequel il y aura en première colonne le test à effectuer et dans les autres les valeurs à attribuer !

Bonne Prog à tous !

Olivier
0
Rejoignez-nous