[VBA] Problème de selection

Résolu/Fermé
mat67000 Messages postés 400 Date d'inscription mercredi 14 mars 2007 Statut Membre Dernière intervention 10 décembre 2019 - 4 mai 2007 à 15:02
mat67000 Messages postés 400 Date d'inscription mercredi 14 mars 2007 Statut Membre Dernière intervention 10 décembre 2019 - 9 mai 2007 à 16:00
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 26824 Date d'inscription dimanche 26 août 2001 Statut Modérateur Dernière intervention 5 mai 2025 3 337
4 mai 2007 à 15:53
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 mercredi 14 mars 2007 Statut Membre Dernière intervention 10 décembre 2019 13
4 mai 2007 à 16:08
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 mercredi 14 mars 2007 Statut Membre Dernière intervention 10 décembre 2019 13
4 mai 2007 à 16:12
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 26824 Date d'inscription dimanche 26 août 2001 Statut Modérateur Dernière intervention 5 mai 2025 3 337
4 mai 2007 à 16:12
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 mercredi 14 mars 2007 Statut Membre Dernière intervention 10 décembre 2019 13
4 mai 2007 à 16:18
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 26824 Date d'inscription dimanche 26 août 2001 Statut Modérateur Dernière intervention 5 mai 2025 3 337
4 mai 2007 à 16:28
Bon ben, ça y est, alors ?

Plus qu'à SQLer tout ça...
0
mat67000 Messages postés 400 Date d'inscription mercredi 14 mars 2007 Statut Membre Dernière intervention 10 décembre 2019 13 > blux Messages postés 26824 Date d'inscription dimanche 26 août 2001 Statut Modérateur Dernière intervention 5 mai 2025
4 mai 2007 à 16:31
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 26824 Date d'inscription dimanche 26 août 2001 Statut Modérateur Dernière intervention 5 mai 2025
4 mai 2007 à 16:35
BLUX c'est pas bien c'que ta fait

(desoler de te couper mat67000)
0
blux Messages postés 26824 Date d'inscription dimanche 26 août 2001 Statut Modérateur Dernière intervention 5 mai 2025 3 337 > dam68
4 mai 2007 à 16:41
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 mercredi 14 mars 2007 Statut Membre Dernière intervention 10 décembre 2019 13
4 mai 2007 à 17:01
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 mercredi 14 mars 2007 Statut Membre Dernière intervention 10 décembre 2019 13
4 mai 2007 à 17:03
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 26824 Date d'inscription dimanche 26 août 2001 Statut Modérateur Dernière intervention 5 mai 2025 3 337
4 mai 2007 à 17:13
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 mercredi 14 mars 2007 Statut Membre Dernière intervention 10 décembre 2019 13
7 mai 2007 à 10:34
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 26824 Date d'inscription dimanche 26 août 2001 Statut Modérateur Dernière intervention 5 mai 2025 3 337
9 mai 2007 à 09:58
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 mercredi 14 mars 2007 Statut Membre Dernière intervention 10 décembre 2019 13
9 mai 2007 à 11:58
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 26824 Date d'inscription dimanche 26 août 2001 Statut Modérateur Dernière intervention 5 mai 2025 3 337
9 mai 2007 à 12:52
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 mercredi 14 mars 2007 Statut Membre Dernière intervention 10 décembre 2019 13
9 mai 2007 à 14:00
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 26824 Date d'inscription dimanche 26 août 2001 Statut Modérateur Dernière intervention 5 mai 2025 3 337
9 mai 2007 à 14:25
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 mercredi 14 mars 2007 Statut Membre Dernière intervention 10 décembre 2019 13
9 mai 2007 à 16:00
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

Discussions similaires