UserForm: ComboBox/ListBox/TextBox jumelés_à l'aide

MisterT

XLDnaute Occasionnel
Bonjour à chacun, besoin d'aide d'un spécialste !!!

Dans le code qui suit, à l'ouverture du UserForm, le ListBox RacquetModelListBox1 affiche en surbrillance le premier Item sauf que celui-ci n'est pas vraiment sélectionné puisque le nom de cet Item ne s'affiche pas dans ("E21").

Aussi, les valeurs des TextBox1 à 4 qui sont associées à cet Item, ne s'affichent pas dans les TextBox et évidemment, ne s'affichent pas non plus dans les cellules ("H21") à ("K21").

Même si je clique sur cet Item déjà en surbrillance, rien ne se produit.

Je dois absolument cliquer sur un autre Item de la liste de RacquetModelListBox1 pour que les valeurs apparaîssent là où il se doit.

Code:
[COLOR="Blue"]Private Sub [/COLOR]UserForm_Initialize()
  Set f = Sheets("Racquet Characteristics")
  Set mondico = CreateObject("Scripting.Dictionary")
  For Each c In f.Range("A7", f.[A65000].End(xlUp))
    [COLOR="SeaGreen"]If[/COLOR] Not mondico.Exists(c.Value) [COLOR="seagreen"]Then[/COLOR] mondico.Add c.Value, c.Value
  Next c
  Me.RacquetMarkBox1.List = mondico.items
  Me.RacquetMarkBox1.ListIndex = 0
  
  Set g = Sheets("String Characteristics")
  Set mondico = CreateObject("Scripting.Dictionary")
  For Each c In g.Range("A7", g.[A65000].End(xlUp))
    [COLOR="seagreen"]If[/COLOR] Not mondico.Exists(c.Value) [COLOR="seagreen"]Then[/COLOR] mondico.Add c.Value, c.Value
  Next c
  Me.MAINmarkComboBox2.List = mondico.items
  Me.MAINmarkComboBox2.ListIndex = 0
  
  Set h = Sheets("String Characteristics")
  Set mondico = CreateObject("Scripting.Dictionary")
  For Each c In h.Range("A7", h.[A65000].End(xlUp))
   [COLOR="seagreen"] If [/COLOR]Not mondico.Exists(c.Value) [COLOR="seagreen"]Then[/COLOR] mondico.Add c.Value, c.Value
  Next c
  Me.CROSSmarkComboBox3.List = mondico.items
  Me.CROSSmarkComboBox3.ListIndex = 0
[COLOR="blue"]End Sub[/COLOR]
-----------------------------------------------------------
[COLOR="blue"]Private Sub [/COLOR]RacquetMarkBox1_Change()
  Set f = Sheets("Racquet Characteristics")
  Me.RacquetModelListBox1.Clear
  For Each c In f.Range("A7", f.[A65000].End(xlUp))
    [COLOR="seagreen"]If[/COLOR] c = Me.RacquetMarkBox1 Or Me.RacquetMarkBox1 = "*" [COLOR="seagreen"]Then[/COLOR]
       Me.RacquetModelListBox1.AddItem c.Offset(0, 1)
     [COLOR="seagreen"]End If[/COLOR]
   Next c
   Me.RacquetModelListBox1.ListIndex = 0
   Sheets("WELCOME").Range("c21") = RacquetMarkBox1.Value
[COLOR="blue"]End Sub[/COLOR]
-----------------------------------------------------------
[COLOR="blue"]Private Sub [/COLOR]RacquetModelListBox1_Click()
     Set c = Sheets("Racquet Characteristics").[B:B].Find(what:=Me.RacquetModelListBox1)
  [COLOR="seagreen"]If[/COLOR] Not c Is Nothing [COLOR="seagreen"]Then[/COLOR]
     Me.TextBox1 = Sheets("Racquet Characteristics").Cells(c.Row, 3)
     Me.TextBox2 = Sheets("Racquet Characteristics").Cells(c.Row, 4)
     Me.TextBox3 = Sheets("Racquet Characteristics").Cells(c.Row, 5)
     Me.TextBox4 = Sheets("Racquet Characteristics").Cells(c.Row, 6)
  [COLOR="seagreen"]End If[/COLOR]
     [COLOR="Red"]With[/COLOR] Sheets("WELCOME")
     .Range("e21") = RacquetModelListBox1.Value
     .Range("h21") = Val(TextBox1.Value)
     .Range("i21") = Val(TextBox2.Value)
     .Range("j21") = Val(TextBox3.Value)
     .Range("k21") = Val(TextBox4.Value)
     [COLOR="red"]End With[/COLOR]
[COLOR="blue"]End Sub[/COLOR]
-----------------------------------------------------------
[COLOR="blue"]Private Sub [/COLOR]MAINmarkComboBox2_Change()
  Set f = Sheets("String Characteristics")
  Me.MAINmodelListBox2.Clear
  For Each c In f.Range("A7", f.[A65000].End(xlUp))
    [COLOR="Green"]If[/COLOR] c = Me.MAINmarkComboBox2 Or Me.MAINmarkComboBox2 = "*" [COLOR="green"]Then[/COLOR]
       Me.MAINmodelListBox2.AddItem c.Offset(0, 1)
     [COLOR="green"]End If[/COLOR]
   Next c
   Me.MAINmodelListBox2.ListIndex = 0
   Sheets("WELCOME").Range("E24") = MAINmarkComboBox2.Value
[COLOR="blue"]End Sub[/COLOR]
-----------------------------------------------------------
[COLOR="blue"]Private Sub [/COLOR]MAINmodelListBox2_Click()
  Set c = Sheets("String Characteristics").[B:B].Find(what:=Me.MAINmodelListBox2)
  [COLOR="green"]If[/COLOR] Not c Is Nothing [COLOR="green"]Then[/COLOR]
     Me.TextBox6 = Sheets("String Characteristics").Cells(c.Row, 7)
     Sheets("WELCOME").Range("G24") = MAINmodelListBox2.Value
     Sheets("WELCOME").Range("L24") = (TextBox6.Value)
     Sheets("WELCOME").Range("L24") = CDbl(Range("L24").Value)
     [COLOR="green"]End If[/COLOR]
[COLOR="blue"]End Sub[/COLOR]
-----------------------------------------------------------
[COLOR="blue"]Private Sub[/COLOR] CROSSmarkComboBox3_Change()
  Set f = Sheets("String Characteristics")
  Me.CROSSmodelListBox3.Clear
  For Each c In f.Range("A7", f.[A65000].End(xlUp))
    [COLOR="green"]If[/COLOR] c = Me.CROSSmarkComboBox3 Or Me.CROSSmarkComboBox3 = "*" [COLOR="green"]Then[/COLOR]
       Me.CROSSmodelListBox3.AddItem c.Offset(0, 1)
     [COLOR="green"]End If[/COLOR]
   Next c
   Me.CROSSmodelListBox3.ListIndex = 0
   Sheets("WELCOME").Range("E30") = CROSSmarkComboBox3.Value
[COLOR="blue"]End Sub[/COLOR]
-----------------------------------------------------------
[COLOR="blue"]Private Sub[/COLOR] CROSSmodelListBox3_Click()
  Set c = Sheets("String Characteristics").[B:B].Find(what:=Me.CROSSmodelListBox3)
  [COLOR="green"]If[/COLOR] Not c Is Nothing [COLOR="green"]Then[/COLOR]
     Me.TextBox7 = Sheets("String Characteristics").Cells(c.Row, 8)
     Sheets("WELCOME").Range("G30") = CROSSmodelListBox3.Value
     Sheets("WELCOME").Range("L30") = (TextBox7.Value)
     Sheets("WELCOME").Range("L30") = CDbl(Range("L30").Value)
     [COLOR="green"]End If[/COLOR]
[COLOR="blue"]End Sub[/COLOR]

Est-ce quelqu'un accepte de vérifier le code et m'indiquer la solution ?

Si vous voyez des amméliorations à faire aux codes qui fonctionnent, c'est aussi la bienvenue.

Merci à l'avance à celui qui utilisera son temps et ses connaissances pour m'aider !!!

MisterT
 

Lii

XLDnaute Impliqué
Re : UserForm: ComboBox/ListBox/TextBox jumelés_à l'aide

Re,

à Hasco :
Bonjour à chacun,

Si vous voyez des amméliorations à faire aux codes qui fonctionnent, c'est aussi la bienvenue.

Merci à l'avance à celui qui utilisera son temps et ses connaissances pour m'aider !!!

MisterT

J'ai simplement proposé ma* façon de voir les choses en pensant que d'autres avaient déjà proposé la leur !

*Je vois tant de codes d'un niveau on ne peut plus sophistiqué proposés à des personnes qui ne disposent pas d'un bagage permettant de les comprendre que je préfère m'en tenir à la simplicité (éviter, par exemple, d'envoyer un Dictionary pour un Combo sans doublon).
 

MisterT

XLDnaute Occasionnel
Re : UserForm: ComboBox/ListBox/TextBox jumelés_à l'aide

Bonjour Lii,

Merci pour le temps que tu as mis, c'est gentil.

Je comprends bien ta suggestion mais pour mon besoin je priviligie vraiment le ChecckBox et il ne reste qu'une petite chose à régler, voir Post#14, surtout qu'avec les OptionButton, une fois qu'il y en a un de coché, je ne peux le décocher pour revenir à la possibilité d'avoir le MAIN et CROSS différent et parfois les Items n'apparaissent pas en surbrillance.

Pour la sauvegrade du USF, l'idée est bonne mais le programme bloque à cette ligne dans CommandButton1_Click();
Code:
Range("G30") = CROSSmodelListBox3.List(CROSSmodelListBox3.ListIndex)
J'ai essayé ce qui suit pour la sauvegarde avec le fichier joint mais ça bloque à cette ligne dans Private Sub RacquetMarkBox1_Change() ;
Code:
For Each c In shRacquet.Range("A7", shRacquet.[A65000].End(xlUp))
Code à l'ouverture du USF avec les sauvegrades...
Code:
Private Sub UserForm_Initialize()
  Me.RacquetMarkBox1 = [A2009]
  Me.RacquetModelListBox1 = [B2009]
  Me.MAINmarkComboBox2 = [C2009]
  Me.MAINmodelListBox2 = [D2009]
  Me.CROSSmarkComboBox3 = [E2009]
  Me.CROSSmodelListBox3 = [F2009]
  Me.TextBox1 = [G2009]
  Me.TextBox2 = [H2009]
  Me.TextBox3 = [I2009]
  Me.TextBox4 = [J2009]
  Me.TextBox6 = [K2009]
  Me.TextBox7 = [L2009]
  Me.CheckBox1 = [M2009]
Code de sauvegarde...
Code:
Private Sub UserForm_QueryClose(Cancel As Integer, CloseMode As Integer)
    [A2009] = RacquetMarkBox1.Value
    [B2009] = RacquetModelListBox1.Value
    [C2009] = MAINmarkComboBox2.Value
    [D2009] = MAINmodelListBox2.Value
    [E2009] = CROSSmarkComboBox3.Value
    [F2009] = CROSSmodelListBox3.Value
    [G2009] = Val(TextBox1.Value)
    [H2009] = Val(TextBox2.Value)
    [I2009] = Val(TextBox3.Value)
    [J2009] = Val(TextBox4.Value)
    [K2009] = CDbl(TextBox6.Value)
    [L2009] = CDbl(TextBox7.Value)
    [M2009] = Val(CheckBox1.Value)
End Sub
Est-ce qu'il y a une solution pour compléter avec le CheckBox et la sauvegarde ?

Merci encore Hasco et Lii et bonne journée !
MisterT
 

Pièces jointes

Dernière édition:
G

Guest

Guest
Re : UserForm: ComboBox/ListBox/TextBox jumelés_à l'aide

Bonjour MisterT

Puisque Lii n'est plus là pour faire son SAV:

Voici le fichier modifié.
Inutile de tout sauvegarder, la valeur des textbox est déterminée par la valeur des listbox.

A+
[Edition] il y avait erreur sur la ligne:
Code:
For Each c In [B]shRacquet[/B].Range("A7", shRacquet.[A65000].End(xlUp))

Parce que la procédure Private Sub RacquetMarkBox1_Change() était appelée à l'initialisation par Me.RacquetMarkBox1 = [A2009], avant que shRacquet ne soit elle-même initialisée.
 
Dernière modification par un modérateur:

MisterT

XLDnaute Occasionnel
Re : UserForm: ComboBox/ListBox/TextBox jumelés_à l'aide

Bonjour Hasco,

Merci pour le beau travail une fois de plus !

La sauvegarde fonctionne bien mais curieusement, seule la valeur du RacquetModelListBox1 ne s'affiche pas à la ré-ouverture du USF, pourtant les codes me semble tous OK. La valeur est en surbrillance dans le USF mais n'apparaît pas dans la cellule ("E21")???

Acceptes-tu de vérifier ?
---------------------------

Pour le checkBox1, est-ce que tu acceptes de coder pour l'option que j'ai besoin qui est décrit dans mon Post#14.

Actuellement, la seule chose qui serait à corriger, c'est lorsque le MAINmark et CROSSmark sont différents et que le CheckBox1 se fait cocher, les 2 deviennent identiques MAIS avec la valeur du 1er item de la liste du MAINmodel au lieu du MAINmodel sélectionné au moment de cocher le CheckBox1.

Acceptes-tu de faire l'ajustement ?

Merci infiniment Hasco pour tout le temps que tu as accordé jusqu'à présent pour m'aider !

MisterT
 
G

Guest

Guest
Re : UserForm: ComboBox/ListBox/TextBox jumelés_à l'aide

Re,

Pour le checkBox1, est-ce que tu acceptes de coder pour l'option que j'ai besoin qui est décrit dans mon Post#14.

Il me semble que cela avait été fait plus haut. Tout au moins chez moi, cela le faisait.

Nous avions quelque chose qui fonctionnait correctement, je ne vais pas passer mon temps à corriger ce que tes modifications entrainent.

Pour moi, c'est la dernière intervention.
A+
 

MisterT

XLDnaute Occasionnel
Re : UserForm: ComboBox/ListBox/TextBox jumelés_à l'aide

Bonjour Hasco,

Concernant le CheckBox1, j'ai vérifié le fichier (h_MisterT4.xls) de ton Post#11 et il fait sensiblement le même problème.

Voici un exemple précis que je voudrais ajuster;

MAINmarkComboBox2 = Babolat
MAINmodelListBox2 = Pro Hurricane 17

CROSSmarkComboBox3 = Ashaway
CROSSmodelListBox3 = Kevlar 17

En cochant CheckBox1, les valeurs de MAINmodel et CROSSmodel devraient devenir Babolat - Pro Hurricane 17 comme le MAIN.

Ça devient plutôt Babolat - Pro Hurricane 16 qui est au haut de la liste Babolat.

Si parfois ta patience avec moi est épuisée, je comprendrai...

Merci et bonne journée Hasco,
MisterT
 
G

Guest

Guest
Re : UserForm: ComboBox/ListBox/TextBox jumelés_à l'aide

Re,

Cela n'est pas ta demande du post #10

Par exemple, si le MAIN est Ashaway Kevlar 17 et le CROSS est Babolat Pro Hurricane 17, en cochant le CheckBox1, les 2 listes se placeront à Ashaway Kevlar 16 qui est au haut de la liste au lieu de se placer à Kevlar 17 comme désiré.

difficile de comprendre.

Dernière proposition:
Code:
Private Sub CheckBox1_Change()
    If CheckBox1.Value = True Then
        'Si aucun choix n'est fait dans MainMark alors forcer le choix 0
        If MAINmarkComboBox2.ListIndex = -1 Then MAINmarkComboBox2.ListIndex = 0
        CROSSmarkComboBox3.ListIndex = MAINmarkComboBox2.ListIndex
        If MAINmodelListBox2.ListIndex.ListIndex > -1 Then
            CROSSmodelListBox3.ListIndex = MAINmodelListBox2.ListIndex
        End If
    Else
    End If
End Sub

Tu peux de toutes façon essayer par toi-même, toutes les combinaisons possible.

A+
 

MisterT

XLDnaute Occasionnel
Re : UserForm: ComboBox/ListBox/TextBox jumelés_à l'aide

Bonjour Hasco,

Merci pour ta réponse et ta dernière proposition, c'est apprécié !

J'ai regardé et je crois que la solution pour la fameuse dernière option que je veux avec le CheckBox1 n'est pas dans la Sub du CheckBox1 mais dans la Sub du CROSSmarkComboBox3 qui est appelée par celle du CheckBox1.

Dans la Sub du CROSSmarkComboBox3, une ligne le met au ListIndex 0, alors j'y ai mis une condition; Si le CheckBox1 = True, alors le ListIndex du CROSSmodel devient le même que le MAINmodel.

Ainsi mon option tant désirée fonctionne. Par contre avec le CheckBox1 à TRUE, je ne peux plus modifier le CROSSmark car c'est le MAIN le dominant. À suivre...
-----------------------------------

Pour la sauvegarde du USF, à la ré-ouverture du USF, la valeur du RacquetModel est sauvegardée dans le USF MAIS n'apparaît pas dans la cellule ("E21"), j'ignore pourquoi ???

--------------------------------

Le fichier est joint si tu veux voir...

...mais le tout peut être laissé ainsi, je regarderai ce que je peux faire, j'ai commencé à utiliser le débogage pas à pas.
---------------

Pour le moment je te souhaite un très Joyeux Noël Hasco et merci pour tout !!!

MisterT
 

Pièces jointes

Discussions similaires

Réponses
3
Affichages
557
Réponses
6
Affichages
404
Réponses
17
Affichages
1 K
Réponses
30
Affichages
2 K
Réponses
9
Affichages
361

Statistiques des forums

Discussions
315 283
Messages
2 118 012
Membres
113 407
dernier inscrit
FITAS