VBA : trie d'une Combobox en fonction d'un optionbutton

chewwe1602

XLDnaute Nouveau
Bonjour le forum,

Me revoila avec mon petit code vba a faire.
Camarchepas m'a bien aidé pour mon premier userform, mais j'ai un second userform avec des options que j'aimerai développer.

voila l'histoire :

J'ai deux optionbutton qui s'oppose.
l'un valide une menuiserie de 4mm (optionbutton3), l'autre une menuiserie de 12mm(optionbutton4)
j'ai aussi une Combobox (CBRecouvrement) dans laquelle j'ai listé, avec le système Additems, différent type de recouvrement ( tout ceci sont des termes de fabrication de menuiserie. ça n'a pas vraiment d'importance!)

Je souhaiterai que lorsque mon optionbutton3 a une valeur true, on ne puisse sélectionner que le recouvrement de 15 dans la combobox CBRecouvrement.

j’avais pensé a ça:

Private Sub CBRecouvrement_Change()
If userform1.OptionButton3.Value = True Then CBRecouvrement.Value = "15"
End Sub

Bien entendu ça n'a aucun effet :)

merci de votre aide.
 

camarchepas

XLDnaute Barbatruc
Re : VBA : trie d'une Combobox en fonction d'un optionbutton

Super ,

Merci pour ton retour.

Tu as assimilé la techique , c'est le plus important, car tu pourras ainsi maintenir à jour ton application.

A bientôt peut être pour d'autre conseils ou dépannage.
 

Dranreb

XLDnaute Barbatruc
Re : VBA : trie d'une Combobox en fonction d'un optionbutton

Bonjour.

Le tableau fourni au #14 permettrait, au prix de plusieurs modules de service pouvant éventuellement aussi servir dans d'autres Userform, voire à d'autres choses, d'écrire un code assez simple dans l'Userform pour gérer automatiquement 4 ComBoBox. Mon module de classe ComboBoxLiés est même équipé d'une méthode qui permettrait, à la limite, de gérer les Jeux et Axe à l'aide d'OptionButton, mais ça compliquerait un peu, et ça ne serait pas plus simple à utiliser que de taper 4 ou 12 dans un ComboBox Jeux, 9 ou 13 dans un autre Axe, ce qui permettrait par ailleurs leur renseignement automatique si on choisit d'abord certaines Feuillure et Recouvrement.
Il n'y aurait plus rien à écrire du tout pour la gestion des ComboBox, sauf à les déclarer comme étant à faire gérer par un objet CL, en lui disant simplement par la même occasion à quelle colonne du tableau correspond chacun, lors de l'Userform_Initialize.
 
Dernière édition:

chewwe1602

XLDnaute Nouveau
Re : VBA : trie d'une Combobox en fonction d'un optionbutton

Me revoila. Toujours sur le meme sujet.

Jai maintenant une combobox appellé CBcoted qui doit se remplir de differente valeur suivant plusieur critere.
J'ai appliqué la methode vu plus tot, que je maitrise plutot bien maintenant. Mais la rien ne se passe.
Il y a donc sans doute un détail que je n'ai pas saisie dans cette procedure.

Pour être plus clair voila mon code:

Private Sub CBcoted_Change()
If CBtypedouvrant.value = "OB" or CBtypedouvrant.value = "OF renvoi d'angles" And TBHFF.Value >= "230" And TBHFF.Value <= "920" Then
CBcoted.List = Array("", "114", "210", "260", "375")
CBcoted.Text = ""
ElseIf Sheets("parametre").Range("d3").Value = "OB" And TBHFF.Value >= "421" And TBHFF.Value <= "920" Then
CBcoted.List = Array("", "210", "260", "375") ' il n'y a plus le 114
CBcoted.Text = ""

End If

Sheets("parametre").Range("J5").Value = CBcoted.Value
End Sub

Le combobox CBcoted ne se remplis d'aucune valeur.

Comme quoi j'ai sans doute encore besoin de progresser.
Je ne vois pas du tout d’où peux venir l'erreur?
 
Dernière édition:

camarchepas

XLDnaute Barbatruc
Re : VBA : trie d'une Combobox en fonction d'un optionbutton

Bonjour,


Dans l'état actuel du classeur que j'ai :

Le test (PArtie que tu viens de m'envoyer :

CBtypedouvrant.Value = "OF renvoi d'angles"

et l'initialisation de la liste :

.AddItem "OF renvoi d'angle"

il y a un "s" qui fait toute la différence

2 eme chose :
L'objet TBHFF sur ma version est encore Textbox1

Mais le plus important est l'ordre de test, il faut l'inverserser afin que la fourchette la plus petite soit testée avant

Voici donc le code

Code:
Private Sub CBcoted_Change()
If Sheets("parametre").Range("d3").Value = "OB" And TBHFF.Value >= "421" And TBHFF.Value <= "920" Then
CBcoted.List = Array("", "210", "260", "375") ' il n'y a plus le 114
CBcoted.Text = ""
ElseIf CBtypedouvrant.value = "OB" or CBtypedouvrant.value = "OF renvoi d'angle" And TBHFF.Value >= "230" And TBHFF.Value <= "920" Then
CBcoted.List = Array("", "114", "210", "260", "375")
CBcoted.Text = ""

End If

Sheets("parametre").Range("J5").Value = CBcoted.Value
End Sub
 

chewwe1602

XLDnaute Nouveau
Re : VBA : trie d'une Combobox en fonction d'un optionbutton

Bonjour Camarchepas,

Le problème vient sans doute d'un autre endroit. car même sans code dans le CBcoted, le combobox ne se charge plus des différent ADDITEMS du sub userform_initialize.

il doit y avoir un code quelques part qui bloque le reste.
 

Pièces jointes

  • Projet Programme fenetre .xlsm
    110.8 KB · Affichages: 73
  • Projet Programme fenetre .xlsm
    110.8 KB · Affichages: 222
  • Projet Programme fenetre .xlsm
    110.8 KB · Affichages: 220

camarchepas

XLDnaute Barbatruc
Re : VBA : trie d'une Combobox en fonction d'un optionbutton

Bonjour ,


dans Sub UserForm_Initialize()

CBverouillage.ListIndex = -1
CBtypedouvrant.ListIndex = -1

Met les combobox à l'état non sélectionné



Bon l'evenementiel n'était pas le bon , c'est lorsque l'on entre une valeur de hauteur qu'il faut asservir la liste.

Et enfin le test doit être cloisonné correctement , les parenthéses permettent de bien définir les portion de l'équation
 

Pièces jointes

  • Projet Programme fenetre -5.xlsm
    86.7 KB · Affichages: 58

chewwe1602

XLDnaute Nouveau
Re : VBA : trie d'une Combobox en fonction d'un optionbutton

Bon ça ne fonctionnait pas mieux.

Mais je me suis dit que peut être j'en demandait trop a la fonction if en cumulant des " or " et des "And"
J'ai donc scindé chaque plage de dimension en deux partie de la façon suivante :

Private Sub CBcoted_Change()

Sheets("parametre").Range("J5").Value = CBcoted.Value

If CBtypedouvrant.Value = "OB" And TBHFF >= 421 And TBHFF <= 960 Then
CBcoted.List = Array("", "210", "260", "375")
CBcoted.Text = ""
ElseIf CBtypedouvrant.Value = "OF renvoi d'angle" And TBHFF >= 421 And TBHFF <= 960 Then
CBcoted.List = Array("", "114", "210", "260", "375")
CBcoted.Text = ""
ElseIf CBtypedouvrant.Value = "OF renvoi d'angle" And TBHFF >= 230 And TBHFF<= 920 Then
CBcoted.List = Array("", "210", "260", "375")
CBcoted.Text = ""
ElseIf CBtypedouvrant.Value = "OF renvoi d'angle" And TBHFF >= 230 And TBHFF <= 920 Then
CBcoted.List = Array("", "114", "210", "260", "375")
CBcoted.Text = ""

End If

End Sub


Et la ca a l'air de fonctionner .

Au passage existe t il un moyen de réduire l’écriture de ce code? Par exemple avec un "with"?
Parce que la je n'ai que deux plage de TBHFF sur les 10 possible, a multiplier par les 7 type d'ouvrant ! :/


edit 15:35 :
J'ai d'abord fait l'essaie dans le fichier que tu m'a renvoyé.
Bon ça a marché 1 fois et puis quand j'ai transposé le code dans mon fichier ça ne fonctionne plus. Grrrr!!
 
Dernière édition:

chewwe1602

XLDnaute Nouveau
Re : VBA : trie d'une Combobox en fonction d'un optionbutton

Ok, c'est donc la tête basse et le regard sur mes chaussures que je viens humblement présenter mes excuses.

J'avais pas vu que dans ton fichier tu avais entré le code dans le TBHFF !!!
c'est donc pour cela que ça fonctionnait chez toi et pas chez moi !

Je vais donc continué mon petit bout de code avec tous mes remerciement les plus sincères :):):)
 

Discussions similaires

Statistiques des forums

Discussions
312 224
Messages
2 086 409
Membres
103 201
dernier inscrit
centrale vet