Select case Like "??" :

Résolu
Signaler
Messages postés
256
Date d'inscription
jeudi 23 octobre 2003
Statut
Membre
Dernière intervention
20 mars 2013
-
Messages postés
256
Date d'inscription
jeudi 23 octobre 2003
Statut
Membre
Dernière intervention
20 mars 2013
-
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

Messages postés
13280
Date d'inscription
lundi 13 décembre 2004
Statut
Modérateur
Dernière intervention
3 février 2018
47
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
Merci

Quelques mots de remerciements seront grandement appréciés. Ajouter un commentaire

Codes Sources 109 internautes nous ont dit merci ce mois-ci

Messages postés
338
Date d'inscription
mardi 28 janvier 2003
Statut
Membre
Dernière intervention
4 novembre 2008
1
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
Messages postés
256
Date d'inscription
jeudi 23 octobre 2003
Statut
Membre
Dernière intervention
20 mars 2013
1
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
Messages postés
796
Date d'inscription
jeudi 17 mai 2001
Statut
Membre
Dernière intervention
5 mai 2009
7
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
Messages postés
13280
Date d'inscription
lundi 13 décembre 2004
Statut
Modérateur
Dernière intervention
3 février 2018
47
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
Messages postés
14008
Date d'inscription
samedi 29 décembre 2001
Statut
Modérateur
Dernière intervention
28 août 2015
81
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)
Messages postés
256
Date d'inscription
jeudi 23 octobre 2003
Statut
Membre
Dernière intervention
20 mars 2013
1
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