[VBA] Problème de selection

Résolu
mat67000 Messages postés 400 Date d'inscription   Statut Membre Dernière intervention   -  
mat67000 Messages postés 400 Date d'inscription   Statut Membre Dernière intervention   -
Bonjour :-)

Bon cela fait quelques temps que je n'ai plus eu besoin de vos conseils mais là je stagne sur une chose toute bête et à force de pas trouyver la solution, je m'en remet un petit peu à vous

En fait j'ai un formulaire de recherche de switch. J'ai un groupe d'option avec un bouton pour chaque etage (du RDC (0) au 7e etage (6)) plus un bouton pour les switchs d'imprimantes.

Mon souci est que, avec le code que je mettrai ci dessous, quand je selectionne le RDC, j'ai les switchs d'imprimantes qui s'affiche aussi ce que je ne veux pas. En voyant mon code c'est tout à fait logique, mais je ne trouve pas la bonne solution....

Private Sub Cadre_Etage_AfterUpdate()

test = Me.Cadre_Etage.Value


If test = "7" Then 'Ici le 7 est la valuer du bouton Imprimante
StrSql = "SELECT [N° Switch] FROM R_AJOUT_PRISE WHERE [LC_Type] =  " & "'Imprimante'" & ";"
Else
StrSql = "SELECT DISTINCT [N° Switch] FROM R_AJOUT_PRISE WHERE (mid([N° Switch],7,1) = " & test & ") "
End If

10 réponses

blux Messages postés 27117 Date d'inscription   Statut Modérateur Dernière intervention   3 359
 
Salut,

Donne-nous la codification des switches, comment ils sont nommés et quels sont ceux que tu veux et dans quel cas...
0
mat67000 Messages postés 400 Date d'inscription   Statut Membre Dernière intervention   13
 
Jai oublier de préciser une chose :
les switchs d'etage ont la nomenclature suivante => RSSTAE23 (avec le 2 ki représente l'etage)
les switchs d'imprimante ont la nomenclature suivante => RSSTAG03 mais le 0 ne représente pas l'etage car les switchs d'imprimante ne dépendent pas d'un etage
0
mat67000 Messages postés 400 Date d'inscription   Statut Membre Dernière intervention   13
 
Ah tien bonjour blux... heureux de te revoir, jespère que tes congés se sont bien passés :-)

Ba en fait je veux selectionner les switchs en fonction des etages, donc ça c'est bons (rappel switchs etages = RSSTAE..)
Et je veux quand je clic sur le bouton du groupe d'options "Imprimante" qu'il m'affiche juste les imprimantes, cela marche aussi (rappel. switchs d'imprimantes = RSSTAG..)

Mon seul souci réside dans le fait que mon code cherche les switchs en fonction du 7e caractère du nom de switch (cf. le code de mon 1er commentaire) et quand on est au RDC le 7e caractère est 0 ce qui est aussi le cas des switcsh d'imprimantes. Donc quand je choisi le RDC j'ai le choix entre les switchs du RDC mais aussi des Imprimantes.
0
blux Messages postés 27117 Date d'inscription   Statut Modérateur Dernière intervention   3 359
 
Si j'ai bien compris :

quand on appuie le bouton 7, on doit faire la recherche sur les switches dont le 6ième car est G, et pour les autres cas, on recherche ceux qui ont E+valeur bouton en 6ième et 7ième car ?
0
mat67000 Messages postés 400 Date d'inscription   Statut Membre Dernière intervention   13
 
Je te met les valeurs de mon groupe d'options :

RDC = 0
1er etage = 1
...
...
6e et 7e etage = 6 (car les switchs du 7e etage sont au 6e)
Imprimantes = 7

donc oui quand on clic sur le 6e car (qui est le G pour les imprimantes et E pr les swtichs d'etages).
Et pour les autres cas , oui, on cherche ceeux qui ont E + valeur du 7e caractère pour connaitre l'etage.

Jusque là j'ai toujours utilisé que le 7e caractère qui représentait l'etage vu que les switchs ne dependent pas de ceux ci.
0
blux Messages postés 27117 Date d'inscription   Statut Modérateur Dernière intervention   3 359
 
Bon ben, ça y est, alors ?

Plus qu'à SQLer tout ça...
0
mat67000 Messages postés 400 Date d'inscription   Statut Membre Dernière intervention   13 > blux Messages postés 27117 Date d'inscription   Statut Modérateur Dernière intervention  
 
Oui sauf que je n'ai pas trouvé comment mettre deux conditions au code SQL.

Avec juste le 7e caractère OK mais avec le 6e ET le 7e...... j'ai pas trouver la bonne syntaxe
0
dam68 > blux Messages postés 27117 Date d'inscription   Statut Modérateur Dernière intervention  
 
BLUX c'est pas bien c'que ta fait

(desoler de te couper mat67000)
0
blux Messages postés 27117 Date d'inscription   Statut Modérateur Dernière intervention   3 359 > dam68
 
Quel est ton problème ?

Tu demandes comment pirater Canal, je te coupe la chique et ça ne te plait pas ?

Regarde la charte du forum et reviens-y... Si ce n'est pas moi qui ferme, ce sera un(e) autre.
0

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

Posez votre question
mat67000 Messages postés 400 Date d'inscription   Statut Membre Dernière intervention   13
 
Merci blux, je regarderais ta solution dès que j'aurai le temps car là j'ai d'autres taches à faire avant la fin de la journée, je te tiens au courant.

Par contre j'ai pas compris votre stress ???!!!
0
mat67000 Messages postés 400 Date d'inscription   Statut Membre Dernière intervention   13
 
mouai apriori vous avez un contentieux entre vous :-)

Pas de haine svp, on en vois déjà assez chez Mr S............ :p
0
blux Messages postés 27117 Date d'inscription   Statut Modérateur Dernière intervention   3 359
 
Pas de contentieux, je fais respecter la charte du site, en tant que modérateur...

codec canal

Je n'apprécie juste pas le fait que l'on vienne chasser sur d'autres terres que celles qui vous sont allouées... et je ne parle pas de la politesse...

Il peut se plaindre au webmaster, mettre un message dans le forum 'suggestions', ou plein d'autres choses, mais pas venir foutre le caillon dans une discussion technique. POINT.
0
mat67000 Messages postés 400 Date d'inscription   Statut Membre Dernière intervention   13
 
Bonjour

Bon j'ai testé ta solution Blux, somme toute logique.
J'ai donc fait ceci :

Private Sub Cadre_Etage_AfterUpdate()

test = Me.Cadre_Etage.Value

Dim First
Dim toto
toto = "E" 'Caractère qui différencie switch etage et imp.

If test = "0" Then '(RDC = 0)
First = "SELECT [N° Switch] FROM R_AJOUT_PRISE WHERE (mid([N° Switch],6,1) = " & toto & ")  AND (mid([N° Switch],7,1) = " & test & ""
Else
If test = "7" Then '(Imp = 7)
StrSql = "SELECT [N° Switch] FROM R_AJOUT_PRISE WHERE [LC_Type] =  " & "'Imprimante'" & ";"
Else
StrSql = "SELECT [N° Switch] FROM R_AJOUT_PRISE WHERE (mid([N° Switch],7,1) = " & test & ") "
End If
End If

Me.liste_switch.RowSource = StrSql

End Sub


voilà avec ce code, lors du choix du RDC, les switchs selectionnables sont ceux de la précdente recherche (ex. je cherche les infos sur les switch du 2e etage puis ceux du RDC, la liste déroulante des switchs du RDC reste les switch du 2e etage...)

je cherche une autre solution
0
blux Messages postés 27117 Date d'inscription   Statut Modérateur Dernière intervention   3 359
 
Oui mais là, tu enchaines les tests alors qu'un seul suffit !

Quel est l'intérêt de rajouter un test avec 'imprimante', on peut le déduire avec le 6ième car ?
0
mat67000 Messages postés 400 Date d'inscription   Statut Membre Dernière intervention   13
 
Bonjour Blux

J'avoue que je ne comprend pas trop ce que tu appelles "enchainer les tests" car j'interprete le code comme ceci, et je ne vois pas ce qui est superflu :

If test = "0" Then
First = "SELECT [N° Switch] FROM R_AJOUT_PRISE WHERE (mid([N° Switch],6,1) = " & toto & ") AND (mid([N° Switch],7,1) = " & test & ""
Else
=> Si test = RDC alors on selectionne le N° de switch où le 6e caractère est un E et où le 7e caractère est egal a test (donc à l'etage

If test = "7" Then '(Imp = 7)
StrSql = "SELECT [N° Switch] FROM R_AJOUT_PRISE WHERE [LC_Type] = " & "'Imprimante'" & ";"
Else
StrSql = "SELECT [N° Switch] FROM R_AJOUT_PRISE WHERE (mid([N° Switch],7,1) = " & test & ") "
=> Si test = Imprimante alors on selectionne le N° de switch dont le type est Imprimante. Sinon on selectionne le N° Switch où le 7e caractère est egale à Test càd à l'etage.

Tout ça me semble logique donc désolé de mon ignorance, mais je ne vois pas ce qu'il y a en trop...
0
blux Messages postés 27117 Date d'inscription   Statut Modérateur Dernière intervention   3 359
 
Pour moi, il n'y a que deux cas à prévoir :
If test = 7 then 'imprimante
    StrSql = "SELECT DISTINCT [N° Switch] FROM R_AJOUT_PRISE WHERE (mid([N° Switch],6,1) = 'G') "
else
    StrSql = "SELECT DISTINCT [N° Switch] FROM R_AJOUT_PRISE WHERE (mid([N° Switch],7,1) = '" & test & "') and (mid([N° Switch],6,1) = 'E')"
end if
Ca va mieux comme ça ?
0
mat67000 Messages postés 400 Date d'inscription   Statut Membre Dernière intervention   13
 
Tu es magique Blux :-)

Non en fait, j'avais déjà testé cette solution sauf que moi j'avais mis :

 StrSql = "SELECT DISTINCT [N° Switch] FROM R_AJOUT_PRISE WHERE (mid([N° Switch],6,1) = "'G'") "


Dans le sens où je pensais, qu'un caractère se mettait obligatoirement avec des " " et non juste des ' '
Donc dans mon cas, le caractère se mettait en commentaire.... lol

Merci en tous cas, j'ai bientot fini mon projet, il me reste juste à apprendre à faire une boucle pour la création d'un switch...
En tous cas, j'apprécie l'aide que tu m'apporte depuis deux mois :-)
0
blux Messages postés 27117 Date d'inscription   Statut Modérateur Dernière intervention   3 359
 
On n'enquote les données que si elles sont de type texte. Les valeurs numériques ne sont pas à enquoter sous peine de se voir retourner des erreurs de type.

Pour ce qui est d'enquoter on peut prendre la double-quote (guillemet, en français) ou la simple-quote (apostrophe, en français).

Personnellement, je recommande la simple-quote, qui permet, dans du VBA, d'éviter les doublages de guillemets lors que la construction de chaines...
0
mat67000 Messages postés 400 Date d'inscription   Statut Membre Dernière intervention   13
 
Ok Blux merci pour l'explication, j'en prend bien note :-)

Je peux clore le topic vu que mon souci est résolu...

Merci encore...
0