Remplir une combobox à l'aide d'une checkbox!!!???

Signaler
Messages postés
4
Date d'inscription
samedi 15 août 2009
Statut
Membre
Dernière intervention
26 août 2009
-
Messages postés
4
Date d'inscription
samedi 15 août 2009
Statut
Membre
Dernière intervention
26 août 2009
-
Bonjour à tous,
Je suis novice en VBA, alors je bidouille un peu pour réussir à faire mon programme mais là je ne sais plus comment faire... Alors voila mon problème:

J'ai une useforme ou dedans j'ai une combobox et 4 checkbox. je viens charger ma combobox à l'aide de ce code:

Dim i As Long
i = 3
While Worksheets("Liste map").Range("B" & i).Value <= "<10" > ""
    UserForm1.comboboxmaps.AddItem Worksheets("Liste map").Range("B" & i).Value
    i = i + 1
Wend
End If


Je viens donc remplir ma liste à l'aide de la colonne B, en prenant tous les éléments.
Ce que je souhaiterais c'est que lorsque je coche ma checkbox, une macro regarde dans la colonne D et si la valeur est égale à ce que je lui demande, il prend dans cette même ligne la valeur de la colonne B pour la charger dans ma combobox.

J'espère que je suis compréhensible dans ma recherche...

Merci à tous pour vos réponse.

5 réponses

Messages postés
14008
Date d'inscription
samedi 29 décembre 2001
Statut
Modérateur
Dernière intervention
28 août 2015
74
Salut
Ouh lala :
  While Worksheets("Liste map").Range("B" & i).Value <=  "<10" > ""
équivaut à écrire
  While A <= B > C

En gros, je ne vois pas du tout comment VB pourrait interpréter cela :
- Quelque chose inférieur ou égal à "<10" : Qu'est ce que ça peut bien être ?
- En VB, si tu dois comparer une valeur entre deux seuils, il faut répéter l'élément de comparaison, exemple
  While (A <= B) And (A > C)
A revoir, donc

D'autre part, une ComboBox avec des CheckBox, je ne vois pas trop.
Quelle propriété de ta ComboBox as-tu utilisée pour avoir des CheckBox ?
Est-ce que tu es sûr qu'il s'agit d'une ComboBox ?
Quelle version de Excel ?

Bref, dans ton objet comboboxmaps, il doit y avoir une Sub qui se déclenche lorsque la CheckBox change d'état - à voir dans l'aide.
" une macro regarde dans la colonne D " Comment la macro saura t-elle le numéro de ligne à utiliser ?
Pour lire la donnée qui se trouve 2 colonnes avant elle, tu peux utiliser Offset :
ValeurColonneB  = Cells(maligne, 4).Offset(0, -2)
où :
[*] le 4 est ta colonne D
[*] le 0 est le décalage de ligne
[*] le -2 est le décalage de colonne (D - 2 -> B)

Vala
Jack, MVP VB
NB : Je ne répondrai pas aux messages privés

Le savoir est la seule matière qui s'accroit quand on la partage (Socrate)
Messages postés
4
Date d'inscription
samedi 15 août 2009
Statut
Membre
Dernière intervention
26 août 2009

Ok, tout d'abord, je te remercie jack pour ton aide...

Je reformule et explique exactement ce que je souhaite faire.
Oublions le <10 en fait c'était juste la valeur de ma case.
Ma combobox et mes checkbox sont deux objet différent....

Je souhaite me faire une bibliothèque ou base de donné en VBA avec Excel 2003.
Dans ma colonne B j'ai du texte avec lesquels je souhaite charger ma combobox (ex: nom de film).
Dans la C j'ai un chiffre (pour l'instant je ne ne le traite pas).
Dans la D j'ai du texte (ex: genre du film).

Exemple:
____B_________________C____________D_______
__Poirot________________________policier___
_Stargate_________________________S-F______
_Sherlock_______________________policier___
_Starwars_________________________S-F______
_Les Inconnues___________________Humour____
_robin des bois__________________Aventure__
_Rambo___________________________Action____
ect...

ma combobox1 doit donc comporter les noms de film en fonction de la checkbox que je coche.
Si je coche la checkbox1 la combobox doit me laisser le choix des films policier.
Si je cohe la checkbox2 la combobox doit me laisser le choix des films S-F.
Si je coche la checkbox1 et la checkbox2 la combobox doit me laisser le choix des films policier et S-F.

j'ai donc 1 combobox pour 4 checkbox caractérisant des critères de sélection sur ce que je souhaite afficher ou non dans ma combobox.

J'espère que c'est un peu plus compréhensible lol

Je pensai à une boucle qui regarde ma colonne D et dès qu'elle trouve la valeur correspondant à ce que ma checkox je charge la valeur de cette même ligne dans ma combobox et je continue de vérifier la colonne D.

j'ai essayer de bidouiller en essayant de mettre ma valeur à chercher dans <> "" mais ça na pas l'aire de marcher:

If userform1.checkbox1.value=true then
Dim i As Long
i = 3
While Worksheets("Liste map").Range("B" & i).Value <> ""
    UserForm1.comboboxmaps.AddItem Worksheets("Liste map").Range("B" & i).Value
    i = i + 1
Wend
End If



En tout cas,je te remercie pour l'offcet je vais essayer avec ça ce soir mais je doute que ça me suffise...
Messages postés
14008
Date d'inscription
samedi 29 décembre 2001
Statut
Modérateur
Dernière intervention
28 août 2015
74
Oui, excuse-moi, je n'avais pas les yeux en face des trous, faut que je réapprenne à lire !
Mais tes explications sont bien plus claires.

Donc, tu dois simplement parcourrir ta liste et ne choisir les titres de la colonne B que si le genre en colonne D est coché.
Je te propose cette boucle et ces tests :
Je les écris de mémoire, vérifie les syntaxes.

Dim maCell As Object
Dim sListe As String
' On confectionne la liste des Genres, séparés par des virgules
' Ces virgules serviront de délimiteur
If maCheckBox1.Value = True Then
  sListe = sListe & "," & "policier"
End If
If maCheckBox2.Value = True Then
  sListe = sListe & "," & "S-F"
End If
If maCheckBox3.Value = True Then
  sListe = sListe & "," & "Humour"
End If
' etc ...
' Une dernière virgule
sListe = sListe & ","
' On va donc se retrouver avec ,policier,S-F,
' si CheckBox1 et 2 sont cochées
With Worksheets("Liste map")
  For Each maCell in .Range("B3:B10000")
    If maCell.Value = "" Then Exit For
    If sListe Like "*," & maCell.Offcet(0, 2).Value & ",*" Then
      ' Ce genre fait partie de la liste
      UserForm1.comboboxmaps.AddItem .maCell.Value
    End If
  Next
End With

A confirmer, mais il me semble que le Like compare avec la méthode Text, c'est à dire qu'il se fiche des min/maj.
Les virgules permettent de bien détecter les mots car, sans ces délimiteurs, tu ne pourrais pas faire la différence entre "humour" et "humour noir", par exemple, car si tu cherches "humour" il trouverait aussi "humour noir"

Vala
Jack, MVP VB
NB : Je ne répondrai pas aux messages privés

Le savoir est la seule matière qui s'accroit quand on la partage (Socrate)
Messages postés
4
Date d'inscription
samedi 15 août 2009
Statut
Membre
Dernière intervention
26 août 2009

Oki merci jack, j'ai changer le code afin que cela fonctionne avec mes données,
mais j'ai une erreur 438 qui fais de la résistance au niveau de:

If sListe Like "*," & maCell.Offcet(0, 2).Value & ",*" Then


voici ce que j'ai changé pour le moment:

Dim maCell As Object
Dim sListe As String
' On confectionne la liste des Genres, séparés par des virgules
' Ces virgules serviront de délimiteur
If UserForm1.CheckBox1m10.Value = True Then
  sListe = sListe & "," & "<10"
End If
If UserForm1.CheckBox2m20.Value = True Then
  sListe = sListe & "," & "<20"
End If
If UserForm1.CheckBox3p20.Value = True Then
  sListe = sListe & "," & ">20"
End If
If UserForm1.CheckBox4p25.Value = True Then
  sListe = sListe & "," & ">25"
End If
' etc ...
' Une dernière virgule
sListe = sListe & ","
' On va donc se retrouver avec ,policier,S-F,
' si CheckBox1 et 2 sont cochées
With Worksheets("Liste map")
  For Each maCell In .Range("B3:B10000")
    If maCell.Value = "" Then Exit For
    If sListe Like "*," & maCell.Offcet(0, 2).Value & ",*" Then
      ' Ce genre fait partie de la liste
      UserForm1.comboboxmaps.AddItem .maCell.Value
    End If
  Next
End With
Messages postés
4
Date d'inscription
samedi 15 août 2009
Statut
Membre
Dernière intervention
26 août 2009

J'ai trouver l'erreur, il venait de l'orthographe de offset et non offcet... mais le programme ne fonctionne toujours pas...
J'ai donc essayer:

Dim maCell As Object
Dim sListe As String
' On confectionne la liste des Genres, séparés par des virgules
' Ces virgules serviront de délimiteur
If UserForm1.CheckBox1m10.Value = True Then
  sListe1 = "<10"
End If
If UserForm1.CheckBox2m20.Value = True Then
  sListe2 = "<20"
End If
If UserForm1.CheckBox3p20.Value = True Then
  sListe3 = ">20"
End If
If UserForm1.CheckBox4p25.Value = True Then
  sListe4 = ">25"
End If
sListe= 
' etc ...
' Une dernière virgule
sListe = sListe1 & "," & sListe2 & "," & sListe3 & "," & sListe4
' On va donc se retrouver avec ,policier,S-F,
' si CheckBox1 et 2 sont cochées
With Worksheets("Liste map")
  For Each maCell In .Range("B3:B10000")
    If maCell.Value = "" Then Exit For
    If sListe Like "*," & maCell.Offcet(0, 2).Value & ",*" Then
      ' Ce genre fait partie de la liste
      UserForm1.comboboxmaps.AddItem .maCell.Value
    End If
  Next
End With


Mais toujours rien... Si une bonne âme s'égare... toutes aide me serait utile Merci