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
 
G

Guest

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

Bonsoir,

Dans UserForm_Initialize ,
sous
Code:
RacquetModelListBox1_Click()

Rajoute
Code:
 RacquetModelListBox1_Click

Sans le fichier difficile d'en dire plus

A+
 

MisterT

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

Bonjour Hasco,

Merci de porter attention à ma demande d'aide !

J'ai fait ce que tu as suggéré et le problème demeure, à moins que je ne l'aie pas appliqué correctement.

J'ai un fichier .ZIP que je pourrais fournir mais il pèse 317k même Zippé et j'ai enlevé le plus d'information que je pouvais.

Comment procéder pour que tu puisses avoir le fichier ?

Merci encore !

MisterT
 

MisterT

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

Bonsoir Hasco et Jean-Pierre !

Merci JP pour la suggestion d'un lien pour le fichier !
-------------------------
En résumé:
Il y a 2 problèmes, 1 avec le RacquetModelListBox1 et les TextBox1 à 4 associés et 1 autre avec le CrossModelListBox3 dont le nom de l'item n'apparaît pas dans ("G30") et son Code qui n'apparaît pas dans ("L30").

Les 2 problèmes n'apparaîssent pas en même temps, soit un, soit l'autre.

C'est un problème curieux car c'est intermittent, comme si le programme entre dans une mauvaise boucle et à chaque SUBMIT (Unload UserForm) et Press to START (Affiche UserForm), le problème est présent ou n'est pas présent du tout pour une bonne séquence.

Pour que le problème apparaisse ou disparaisse, simplement faire un SAVE sur la barre d'outils.

Voici le lien pour avoir le fichier:
Cijoint.fr - Service gratuit de dépôt de fichiers
--------------------

Acceptes-tu aussi de vérifier la fonctionnalité du CheckBox1 qui une fois à TRUE, fait que les Items du MainModelListBox2 et CrossModelListBox3 deviennent les mêmes.

Parfois l'un ou les 2 Items n'apparaissent pas en surbrillance.
-------------------

Merci infiniment de l'attention portée pour m'aider !!!

MisterT
 
G

Guest

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

Hello MisterT,

Exceptionnellement, j'ai accepté d'aller ouvrir ton fichier sur cjoint.

Change le module du userForm par ceci:

Code:
Dim shRacquet As Worksheet
Dim shString As Worksheet
Dim shWelcome As Worksheet
Private Sub UserForm_Initialize()
  Set shRacquet = Sheets("Racquet Characteristics")
  Set shString = Sheets("String Characteristics")
  Set shWelcome = Sheets("WELCOME")
 
  If ChargerListe(RacquetMarkBox1, shRacquet.Range("A7", shRacquet.[A65000].End(xlUp))) > 0 Then
     RacquetMarkBox1.ListIndex = 0
  End If
  If ChargerListe(MAINmarkComboBox2, shString.Range("A7", shString.[A65000].End(xlUp))) > 0 Then
     MAINmarkComboBox2.ListIndex = 0
  End If
  If ChargerListe(CROSSmarkComboBox3, shString.Range("A7", shString.[A65000].End(xlUp))) > 0 Then
     CROSSmarkComboBox3.ListIndex = 0
  End If
End Sub
Private Sub RacquetMarkBox1_Change()
  Me.RacquetModelListBox1.Clear
  For Each c In shRacquet.Range("A7", shRacquet.[A65000].End(xlUp))
    If c = Me.RacquetMarkBox1 Or Me.RacquetMarkBox1 = "*" Then
       Me.RacquetModelListBox1.AddItem c.Offset(0, 1)
     End If
   Next c
   Me.RacquetModelListBox1.ListIndex = 0
   shWelcome.Range("c21") = RacquetMarkBox1.Value
End Sub
Private Sub RacquetModelListBox1_Click()
     Set c = shRacquet.[B:B].Find(what:=Me.RacquetModelListBox1)
  If Not c Is Nothing Then
     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)
  End If
     With shRacquet
     .Range("e21") = RacquetModelListBox1.Value
     .Range("h21") = Val(TextBox1.Value)
     .Range("i21") = Val(TextBox2.Value)
     .Range("j21") = Val(TextBox3.Value)
     .Range("k21") = Val(TextBox4.Value)
     End With
End Sub
Private Sub MAINmarkComboBox2_Change()
  Me.MAINmodelListBox2.Clear
  For Each c In shString.Range("A7", shString.[A65000].End(xlUp))
    If c = Me.MAINmarkComboBox2 Or Me.MAINmarkComboBox2 = "*" Then
       Me.MAINmodelListBox2.AddItem c.Offset(0, 1)
     End If
   Next c
   Me.MAINmodelListBox2.ListIndex = 0
   shWelcome.Range("E24") = MAINmarkComboBox2.Value
   End Sub
Private Sub MAINmodelListBox2_Click()
    Set c = shString.[B:B].Find(what:=Me.MAINmodelListBox2)
    If Not c Is Nothing Then
        Me.TextBox6 = shString.Cells(c.Row, 7)
        With shWelcome
            .Range("G24") = MAINmodelListBox2.Value
            .Range("L24") = (TextBox6.Value)
            .Range("L24") = CDbl(Range("L24").Value)
        End With
    End If
    If CheckBox1.Value = True Then
        Me.CROSSmarkComboBox3 = MAINmarkComboBox2.Value
        Me.CROSSmodelListBox3 = MAINmodelListBox2.Value
        Me.TextBox7 = TextBox6.Value
    End If
End Sub
Private Sub CROSSmarkComboBox3_Change()
  Set f = Sheets("String Characteristics")
  Me.CROSSmodelListBox3.Clear
  For Each c In f.Range("A7", f.[A65000].End(xlUp))
    If c = Me.CROSSmarkComboBox3 Or Me.CROSSmarkComboBox3 = "*" Then
       Me.CROSSmodelListBox3.AddItem c.Offset(0, 1)
     End If
   Next c
   Me.CROSSmodelListBox3.ListIndex = 0
   Sheets("WELCOME").Range("E30") = CROSSmarkComboBox3.Value
End Sub
Private Sub CROSSmodelListBox3_Click()
  Set c = Sheets("String Characteristics").[B:B].Find(what:=Me.CROSSmodelListBox3)
  If Not c Is Nothing Then
     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)
     End If
       If CheckBox1.Value = True Then
         Me.MAINmarkComboBox2 = CROSSmarkComboBox3.Value
         Me.MAINmodelListBox2 = CROSSmodelListBox3.Value
         Me.TextBox7 = TextBox6.Value
       End If
End Sub
Private Sub CheckBox1_Change()
    If CheckBox1.Value = False Then
    Exit Sub
    Else
    Me.CROSSmarkComboBox3 = MAINmarkComboBox2.Value
    Me.CROSSmodelListBox3 = MAINmodelListBox2.Value
    Me.TextBox7 = TextBox6.Value
    End If
    End Sub
Private Sub CommandButton1_Click()
     Unload Me
End Sub
Private Function ChargerListe(oListe As Control, oPlage As Range) As Integer
  Set mondico = CreateObject("Scripting.Dictionary")
  'contrôler si la liste est du bon type
  If InStr(1, "ComboBox,ListBox", TypeName(oListe)) = 0 Then
    ChargerListe = -1
    Exit Function
  End If
 
  If oListe.ListCount > 0 Then oListe.Clear
  For Each c In oPlage
    If Not mondico.Exists(c.Value) Then mondico.Add c.Value, c.Value
  Next c
  With oListe
    .List = mondico.items
    ChargerListe = .ListCount
  End With
End Function

Ton fichier doit avoir un problème car il a tendance à 'gonfler' exagérément en poids. Exportes ton userForm (click-droit sur son nom dans l'arborescence) après avoir fait la modification ci-dessus et enregistré le fichier.

Reconstruit tes feuilles dans un nouveau classeur sans copier/coller (ou uniqument les valeurs)

Dans l'éditeur de Macro-> Fichier->importer un fichier et localise le fichier .frm que tu as exporter. Valider, réenregistrer le fichier.

A+
 

MisterT

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

Bonjour Hasco,

Merci infiniment d'avoir pris le temps d'améliorer le code !

J'ai fait ce que tu m'as suggéré et le fichier est passé à 35k.

Ce qui est curieux est que les anomalies persistent et plus j'utilise le UserForm en essayant les différentes sélections, plus le poids du fichier augmente, il est rendu à 65k, QUOI FAIRE, le fichier est joint;
------------------------
Résumé des anomalies:
Il y a 2 problèmes, 1 avec le RacquetModelListBox1 et les TextBox1 à 4 associés et 1 autre avec le CrossModelListBox3 dont le nom de l'item n'apparaît pas dans ("G30") et son Code qui n'apparaît pas dans ("L30").

Les 2 problèmes n'apparaîssent pas en même temps, soit un, soit l'autre.

C'est un problème curieux car c'est intermittent, comme si le programme entre dans une mauvaise boucle et à chaque SUBMIT (Unload UserForm) et Press to START (Affiche UserForm), le problème est présent ou n'est pas présent du tout pour une bonne séquence.

Pour que le problème apparaisse ou disparaisse, simplement faire un ou plusieurs SAVE sur la barre d'outils.
--------------------
Serais-t-il possible aussi de vérifier les codes de fonctionnalité du CheckBox1 qui une fois à TRUE, doit faire en sorte que les Items du MainModelListBox2 et CrossModelListBox3 deviennent les mêmes.

Parfois l'un ou les 2 Items n'apparaissent pas en surbrillance.
-------------------

Merci encore pour l'aide, bon courage !!!
 

Pièces jointes

  • UserForm_Light_FORUM.zip
    20.8 KB · Affichages: 147
G

Guest

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

Hi MisterT,

T'es le roi du copier/coller sans contrôle de ce que tu fais, visiblement.
Je n'avais pas tout modifié, mais t'avais donné la démarche dans ce que j'avais fait. Visiblement tu n'as pas cherché à comprendre.

Voici ton fichier, il se peut que je me sois planté dans le chargement des deux listes MainModelListBox2 et CrossModelListBox3 à toi de vérifier si c'est les bonnes plage des cellules.

Déclare le plus possible de variables dans ton code. C'est plus facile à déboguer.

Par exemple tu cherches une valeur (Find)
Code:
Private Sub RacquetModelListBox1_Click()
    If RacquetModelListBox1.ListIndex = -1 Then Exit Sub
    Dim [B]Valeur[/B]
    [B]Valeur[/B] = RacquetModelListBox1.List(RacquetModelListBox1.ListIndex)
    Set c = shRacquet.[B:B].Find(what:=[B]Valeur[/B])

Cela m'a permis de voir que la valeur cherchée était vide:
RacquetModelListBox1 dans shRacquet.[B:B].Find(what:=RacquetModelListBox1)
Etait vide.

Alors cette fois-ci essaie de comprendre la démarche et de la reproduire.
Et vérifie le contenu de tes variables en faisant des debogages Pas à Pas ou en mettant des points d'arrêts(F9) sur les lignes critiques.

A+
 

MisterT

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

Bonjour Hasco,

Je suis réellement désolé, il est vrai que je n'ai pas pris le temps d'essayer de comprendre, j'ai plutôt coller le code et vérifié si tout fonctionnait et j'ai mentionné immédiatement les anomalies. Je suis trop méconnaissant pour faire autrement.

En fait, il y a bien des codes qui m'apparaissent comme du chinois, par exemple;
For Each c In shString.Range("A7", shString.[A65000].End(xlUp))

Je suis vraiment débutant en VBA Excel et je ne connais même pas la différence avec ou sans Me. ou entre un .List ou un .Value.
-----------------------

Merci d'avoir été assez patient et généreux pour solutionner le problème quand même, c'est très apprécié !

Il y a une anomalie restante avec le CheckBox1;
J'ai ajouté la ligne suivante dans CheclBox1_Change puisque rien ne se passait en cochant le CheckBox1, les valeurs MAINmodel et CROSSmodel ne devenaient pas identiques;
Me.CROSSmodelListBox3.List = MAINmodelListBox2.List

Le problème restant se produit lorsque le CheckBox1 se fait cocher au moment où les MAINmark et CROSSmark sont différents.

Lorsque ce sont les MAINmode et CROSSmodel qui sont différents, c'est OK ils deviennent identiques en cochant le CheckBox1.

J'ai essayé différentes choses sans succès.

J'ai joint le fichier.

Vraiment désolé encore pour mes méconnaissances !

Cordialement, MisterT
 

Pièces jointes

  • h_MisterT3.zip
    19.5 KB · Affichages: 70

MisterT

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

Bonjour Hasco,

J'ai réussi à corriger une partie du problème restant avec le CheckBox1.

j'ai remplacé
Code:
Me.CROSSmarkComboBox3.List = MAINmarkComboBox2.List
Me.CROSSmodelListBox3.List  = MAINmodelListBox2.List

Par ceci
Code:
Me.CROSSmarkComboBox3 = MAINmarkComboBox2.Value
Me.CROSSmodelListBox3 = MAINmodelListBox2.Value

Maintenant lorsque le CheckBox1 se fait cocher au moment où les MAINmark et CROSSmark sont différents, les MAINmodel et CROSSmodel deviennent identiques mais avec les Items du haut des Listes et non selon l'Item désiré qui était préalablement sélectionné dans le MAINmodelList.

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é.

J'ai encore essayé différentes choses sans succès, alors si tu as encore un intérêt à regarder ces subtilités, c'est vraiment la bienvenue...

Le fichier est joint.

Merci encore Hasco et bonne journée !!!

MisterT
 

Pièces jointes

  • h_MisterT4.zip
    20 KB · Affichages: 75
  • h_MisterT4.zip
    20 KB · Affichages: 75
  • h_MisterT4.zip
    20 KB · Affichages: 77
Dernière édition:
G

Guest

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

Hello MisterT,

Voici ton fichier modifié.
Dans UserForm_Initialize vois ce qui a changé pour MAINmarkCombobox et CROSSmarkCombobox. Puisqu'ils elles ont le même contenu, inutile d'appeler deux fois la macro de chargement. Attribuer la liste de l'une à l'autre est suffisant.

Vois aussi ce qui a changé pour CheckBox1.
Petit conseil, surtout si cette interface est destinée à d'autres utilisateurs: ne jamais préjugé du choix de l'utilisateur. Toujours tester s'il a fait un choix et lequel. Pour les combo: If LaComBoBox.ListIndex>-1 (un choix a été fait.

Dans UserForm_Initialize, l'appel de la fonction ChargerListe renvoie 0 ou le nombre d'items dans une liste, peut-être serait-il sage de prévoir ce qu'il faut faire si aucun Item n'a été chargé (retour de la fonction = 0). Ce cas peut se produire: déplacement des données, disparitions des données etc...

A +
 

MisterT

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

Bonjour Hasco,

Merci une fois de plus pour les ajustements et les explications, j'apprécie !!!

La raison pour laquelle je souhaite qu'au moment de cocher le CheckBox1, la valeur du CROSSmark & CROSSmodel deviennent comme le MAIN est que dans ce domaine le choix du MAIN se fait d'abord puis ensuite on détermine si l'on veut que le CROSS soit le même ou non, donc priorité au MAIN.

Une fois le CheckBox1 coché, l'usager a volontairement déterminé qu'il voulait que les MAIN et CROSS soient identiques, alors, qu'il clique sur le MAINmodel ou le CROSSmodel, l'autre Item devient identique.
-------------------

Dans le UserForm_Initialize, ce qui sera pratique pour l'usager est que le UserForm présente à son ouverture toutes les valeurs qu'il avait à sa fermeture. Je pensais donc utiliser les codes suivants, qu'en pense-tu?;
Code:
Private Sub UserForm_Initialize()
  CheckBox1.TripleState = False
  CheckBox1 = [A2009]
  
  RacquetMarkBox1.Value = GetSetting("Mes parametres", "RacquetMarkBox1", "Valeur RacquetMarkBox1")
  RacquetModelListBox1.Value = GetSetting("Mes parametres", "RacquetModelListBox1", "Valeur RacquetModelListBox1")
  MAINmarkComboBox2.Value = GetSetting("Mes parametres", "MAINmarkComboBox2", "Valeur MAINmarkComboBox2")
  MAINmodelListBox2.Value = GetSetting("Mes parametres", "MAINmodelListBox2", "Valeur MAINmodelListBox2")
  CROSSmarkComboBox3.Value = GetSetting("Mes parametres", "CROSSmarkComboBox3", "Valeur CROSSmarkComboBox3")
  CROSSmodelListBox3.Value = GetSetting("Mes parametres", "CROSSmodelListBox3", "Valeur CROSSmodelListBox3")
  TextBox1.Value = GetSetting("Mes parametres", "TextBox1", "Valeur TextBox1")
  TextBox2.Value = GetSetting("Mes parametres", "TextBox2", "Valeur TextBox2")
  TextBox3.Value = GetSetting("Mes parametres", "TextBox3", "Valeur TextBox3")
  TextBox4.Value = GetSetting("Mes parametres", "TextBox4", "Valeur TextBox4")
  TextBox5.Value = GetSetting("Mes parametres", "TextBox5", "Valeur TextBox5")
  TextBox6.Value = GetSetting("Mes parametres", "TextBox6", "Valeur TextBox6")
  TextBox7.Value = GetSetting("Mes parametres", "TextBox7", "Valeur TextBox7")

Et à la fermeture;
Code:
Private Sub UserForm_QueryClose(Cancel As Integer, CloseMode As Integer)
    SaveSetting "Mes parametres", "RacquetMarkBox1", "Valeur RacquetMarkBox1", RacquetMarkBox1.Value
    SaveSetting "Mes parametres", "RacquetModelListBox1", "Valeur RacquetModelListBox1", RacquetModelListBox1.Value
    SaveSetting "Mes parametres", "MAINmarkComboBox2", "Valeur MAINmarkComboBox2", MAINmarkComboBox2.Value
    SaveSetting "Mes parametres", "MAINmodelListBox2", "Valeur MAINmodelListBox2", MAINmodelListBox2.Value
    SaveSetting "Mes parametres", "CROSSmarkComboBox3", "Valeur CROSSmarkComboBox3", CROSSmarkComboBox3.Value
    SaveSetting "Mes parametres", "CROSSmodelListBox3", "Valeur CROSSmodelListBox3", CROSSmodelListBox3.Value
    SaveSetting "Mes parametres", "TextBox1", "Valeur TextBox1", TextBox1.Value
    SaveSetting "Mes parametres", "TextBox2", "Valeur TextBox2", TextBox2.Value
    SaveSetting "Mes parametres", "TextBox3", "Valeur TextBox3", TextBox3.Value
    SaveSetting "Mes parametres", "TextBox4", "Valeur TextBox4", TextBox4.Value
    SaveSetting "Mes parametres", "TextBox5", "Valeur TextBox5", TextBox5.Value
    SaveSetting "Mes parametres", "TextBox6", "Valeur TextBox6", TextBox6.Value
    SaveSetting "Mes parametres", "TextBox7", "Valeur TextBox7", TextBox7.Value
    
    [A2009] = CheckBox1
End Sub

Il m'a déjà été suggéré de sauvegarder les valeurs dans des cellules de la feuille comme j'ai fait pour la valeur du CheckBox1, qu'est-ce qui est le mieux selon toi et comment bien l'appliquer ?

Merci encore Hasco d'utiliser tes connaissances pour m'aider !

MisterT
 
G

Guest

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

Re MisterT,

le choix du MAIN se fait d'abord puis ensuite on détermine si l'on veut que le CROSS soit le même ou non

Cela tu ne peux pas le décider pour l'utilisateur. C'est pourquoi je te disais de toujours contrôler les actions utilisateur.

Garder les valeurs dans une feuille cachée est une bonne solution, si tu ne maîtrise pas la base de registre ni l'intallation/désinstallation de ton classeur.

A+
 

MisterT

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

Bonjour Hasco,

Merci pour te réponse !

Peut-être que quelque chose m'échappe mais je donne un autre exemple pour justifier ma demande;

Pour une raquette de tennis, il y a la possibilité de mettre une seule et même corde dans les Montants (MAIN) et les Travers (CROSS) et il y a aussi la possibilité de mettre une corde différente pour les MAIN et une pour les CROSS.

À l'ouverture du UserForm, l'utilisateur choisit en 1er le RacquetMark puis le RacquetModel, ensuite il choisit le MAINmark & MAINmodel.

Arrivé au CROSS, s'il veut le même cordage que le MAIN, il n'a pas à chercher dans la liste, il n'a qu'à cliquer sur le CheckBox1 (CROSS same as MAIN) qui placera instantanément les mêmes valeurs que le MAIN.

Je ne suis pas obligé d'avoir un CheckBox mais la liste de cordage peut être très longue et ce CHeckBox est très utile pour appliquer rapidement les mêmes valeurs que le MAIN, ce qui est le but de ce CheckBox, au lieu d'avoir à faire 2 sélections pour le CROSS (CROSSmark & CROSSmodel).

Actuellement en cochant le CheckBox1, rien ne bouge, le CROSS ne devient pas comme le MAIN, ce qui est pourtant le but premier de la présence du CheckBox ici.

C'est seulement cette fonctionnalité que je voudrais ajouter car une fois coché tout est excellent, que ce soit le MAIN ou le CROSS qui soit cliqué, l'autre prend la même valeur automatiquement, ça c'est SUPER !

Merci Hasco et A+

MisterT
 

Lii

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

Salut

2 cas, 1 Chekbox : cela me semble difficile à gérer.
Je préfère 2 Cases à Option.
Je suis revenu à mes fondamentaux (Combobox sans doublon, variables booléennes pour empêcher des appels indésirables, écriture dans la feuille à la fin …)
Si les données de l’USF sont toujours écrites aux mêmes endroits (comme ici), il te suffit de les récupérer à l’ouverture du formulaire et tu n’auras besoin de rien d’autre pour les retrouver.
La balle est dans ton camp.
 

Pièces jointes

  • USFListesOptions.zip
    12.4 KB · Affichages: 148

Statistiques des forums

Discussions
312 300
Messages
2 087 000
Membres
103 429
dernier inscrit
PhilippeH