Select case Like "??" : [Résolu]

guilleto 258 Messages postés jeudi 23 octobre 2003Date d'inscription 20 mars 2013 Dernière intervention - 12 sept. 2005 à 12:13 - Dernière réponse : guilleto 258 Messages postés jeudi 23 octobre 2003Date d'inscription 20 mars 2013 Dernière intervention
- 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
Afficher la suite 

7 réponses

PCPT 13368 Messages postés lundi 13 décembre 2004Date d'inscription 3 février 2018 Dernière intervention - 12 sept. 2005 à 12:41
+3
Utile
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
Cette réponse vous a-t-elle aidé ?  
cs_hassen 338 Messages postés mardi 28 janvier 2003Date d'inscription 4 novembre 2008 Dernière intervention - 12 sept. 2005 à 14:44
0
Utile
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
guilleto 258 Messages postés jeudi 23 octobre 2003Date d'inscription 20 mars 2013 Dernière intervention - 12 sept. 2005 à 14:53
0
Utile
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
Neo.balastik 797 Messages postés jeudi 17 mai 2001Date d'inscription 5 mai 2009 Dernière intervention - 12 sept. 2005 à 16:28
0
Utile
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
PCPT 13368 Messages postés lundi 13 décembre 2004Date d'inscription 3 février 2018 Dernière intervention - 12 sept. 2005 à 16:50
0
Utile
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
cs_Jack 14010 Messages postés samedi 29 décembre 2001Date d'inscription 28 août 2015 Dernière intervention - 12 sept. 2005 à 20:37
0
Utile
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)
guilleto 258 Messages postés jeudi 23 octobre 2003Date d'inscription 20 mars 2013 Dernière intervention - 13 sept. 2005 à 09:14
0
Utile
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

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.