[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 -
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....
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
A voir également:
- [VBA] Problème de selection
- Excel compter cellule couleur sans vba - Guide
- Vba l'indice n'appartient pas a la selection ✓ - Forum VB / VBA
- Dépassement de capacité vba ✓ - Forum Excel
- Vba attendre 1 seconde ✓ - Forum VB / VBA
- Vba l'indice n'appartient pas à la sélection ✓ - Forum Excel
10 réponses
Salut,
Donne-nous la codification des switches, comment ils sont nommés et quels sont ceux que tu veux et dans quel cas...
Donne-nous la codification des switches, comment ils sont nommés et quels sont ceux que tu veux et dans quel cas...
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
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
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.
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.
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 ?
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 ?
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.
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.
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
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 ???!!!
Par contre j'ai pas compris votre stress ???!!!
mouai apriori vous avez un contentieux entre vous :-)
Pas de haine svp, on en vois déjà assez chez Mr S............ :p
Pas de haine svp, on en vois déjà assez chez Mr S............ :p
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.
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.
Bonjour
Bon j'ai testé ta solution Blux, somme toute logique.
J'ai donc fait ceci :
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
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
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 ?
Quel est l'intérêt de rajouter un test avec 'imprimante', on peut le déduire avec le 6ième car ?
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...
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...
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 ifCa va mieux comme ça ?
Tu es magique Blux :-)
Non en fait, j'avais déjà testé cette solution sauf que moi j'avais mis :
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 :-)
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 :-)
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...
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...