Access_VB : condition avec Instr dans Case
Résolu/Fermé7 réponses
f894009
Messages postés
17268
Date d'inscription
dimanche 25 novembre 2007
Statut
Membre
Dernière intervention
29 mars 2025
1 713
9 mai 2012 à 17:12
9 mai 2012 à 17:12
Bonjour,
Dans votre cas if faut utiliser les tests if then elseif ........
Select case ne peut pas marcher, vous avez une chaine de caracteres que vous voulez comparer a une recherche de caracteres dans cette chaine.
Dans votre cas if faut utiliser les tests if then elseif ........
Select case ne peut pas marcher, vous avez une chaine de caracteres que vous voulez comparer a une recherche de caracteres dans cette chaine.
Utilisateur anonyme
Modifié par Lupin.PC4 le 9/05/2012 à 17:32
Modifié par Lupin.PC4 le 9/05/2012 à 17:32
Bonjour,
En effet tu compare une chaine avec un boolean !
Suggestion :
Cdt
Lupin
En effet tu compare une chaine avec un boolean !
Suggestion :
Sub Test() Dim Chaine As String, SNs As Long Dim Resultat As Boolean Chaine = "a partir de CDJ 700N" Resultat = True Select Case Resultat Case (InStr(1, Chaine, "C700A") > 0), _ (InStr(1, Chaine, "CDJ 700A") > 0) SNs = 1 Case (InStr(1, Chaine, "C700B") > 0), _ (InStr(1, Chaine, "CDJ 700B") > 0) SNs = 2 Case (InStr(1, Chaine, "C700C") > 0), _ (InStr(1, Chaine, "CDJ 700C") > 0), _ (InStr(1, Chaine, "C700C1") > 0), _ (InStr(1, Chaine, "CDJ 700C2") > 0) SNs = 3 Case (InStr(1, Chaine, "C700N") > 0), _ (InStr(1, Chaine, "CDJ 700N") > 0), _ (InStr(1, Chaine, "C850N") > 0), _ (InStr(1, Chaine, "CDJ 850N") > 0) SNs = 4 Case (InStr(1, Chaine, "C850N-G1000") > 0), _ (InStr(1, Chaine, "CDJ 850N-G1000") > 0), _ (InStr(1, Chaine, "C700G") > 0) SNs = 5 Case Else SNs = 0 Exit Sub End Select End Sub'
Cdt
Lupin
Merci beaucoup pour vos réponses.
J'ai appliqué la méthode de Lupin et ça fonctionne déjà un peu mieux sauf que pour le même exemple que j'ai donné, le programme s'arète systématiquement sur le premier "case" et donc renvoie : SNs=1 au lieu de SNs=4. Idem pour chaine="pour 700", le programme ne va pas au "Case Else".
Je comprend pas du tout d'où celà peut venir???
J'ai appliqué la méthode de Lupin et ça fonctionne déjà un peu mieux sauf que pour le même exemple que j'ai donné, le programme s'arète systématiquement sur le premier "case" et donc renvoie : SNs=1 au lieu de SNs=4. Idem pour chaine="pour 700", le programme ne va pas au "Case Else".
Je comprend pas du tout d'où celà peut venir???
Utilisateur anonyme
10 mai 2012 à 13:50
10 mai 2012 à 13:50
re:
De mon côté, ça fonctionne bien ?
Suit ton code en mode pas à pas et évalue tes variables.
Je n'ai pas d'autres solution :-(
Cdt
Lupin
De mon côté, ça fonctionne bien ?
Suit ton code en mode pas à pas et évalue tes variables.
Je n'ai pas d'autres solution :-(
Cdt
Lupin
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
Re,
C'est justement ce que je viens de faire.
Quand j'exécute pas à pas, je vois bien que pour chaine="C700N" j'ai InStr(1, Chaine, "C700A") =0,ce qui est normal! Mais pour autant le programme reste dans ce "case" et ne teste même pas les suivants.
J'y comprend plus rien...?!
C'est justement ce que je viens de faire.
Quand j'exécute pas à pas, je vois bien que pour chaine="C700N" j'ai InStr(1, Chaine, "C700A") =0,ce qui est normal! Mais pour autant le programme reste dans ce "case" et ne teste même pas les suivants.
J'y comprend plus rien...?!
Utilisateur anonyme
Modifié par Lupin.PC4 le 10/05/2012 à 18:02
Modifié par Lupin.PC4 le 10/05/2012 à 18:02
re:
retranscrit ton code ici pour être sur que l'on a les mêmes sources,
je vais le tester de mon côté ...
et dis moi quelle version de Access tu utilise.
Cdt
Lupin
retranscrit ton code ici pour être sur que l'on a les mêmes sources,
je vais le tester de mon côté ...
et dis moi quelle version de Access tu utilise.
Cdt
Lupin
Voici mon code:
Et ensuite, voici comment je teste cette fonction :
Merci bcp de votre aide !
Function assoCDJ(chaine As Variant, SNs As Variant) Dim db As Database, TVal As Recordset, TmodSn As Recordset, _ ok As Boolean, i As Integer Set db = CurrentDb Set TVal = db.OpenRecordset("Validity", dbOpenDynaset) Set TmodSn = db.OpenRecordset("Modeles - S/Ns", dbOpenDynaset) TmodSn.MoveFirst Select Case ok Case (InStr(1, chaine, "C700A") > 0), (InStr(1, chaine, "CDJ 700A") > 0) SNs = "$" & Nz(DLookup("[S/Ns]", "Modeles - S/Ns", "[Modele] = '700A'"), "") Case (InStr(1, chaine, "C700B") > 0), (InStr(1, chaine, "CDJ 700B") > 0) SNs = "$" & Nz(DLookup("[S/Ns]", "Modeles - S/Ns", "[Modele] = '700B'"), "") Case (InStr(1, chaine, "C700C") > 0), (InStr(1, chaine, "CDJ 700C") > 0) _ , (InStr(1, chaine, "C700C1") > 0), (InStr(1, chaine, "CDJ 700C2") > 0) SNs = "$" & Nz(DLookup("[S/Ns]", "Modeles - S/Ns", "[Modele] = '700C'"), "") Case (InStr(1, chaine, "C700N") > 0), (InStr(1, chaine, "CDJ 700N") > 0) _ , (InStr(1, chaine, "C850N") > 0), (InStr(1, chaine, "CDJ 850N") > 0) SNs = "$" & Nz(DLookup("[S/Ns]", "Modeles - S/Ns", "[Modele] = '700N'"), "") Case (InStr(1, chaine, "C850N-G1000") > 0), (InStr(1, chaine, "CDJ 850N- G1000") > 0), (InStr(1, chaine, "C700G") <> 0) SNs = "$" & Nz(DLookup("[S/Ns]", "Modeles - S/Ns", "[Modele] = '700N-G1000'"), "") Case Else SNs = "" Exit Function End Select SNs = TmodSn![S/Ns] End Function
Et ensuite, voici comment je teste cette fonction :
Public Function test() Dim retour As String Call assoTBM("T700N", retour) Debug.Print retour End Function
Merci bcp de votre aide !