Je viens une nouvelle fois solliciter votre précieuse aide pour quelque chose que je croyais simple au départ.
J'ai trouvé divers sujets sur la question, mais depuis deux jours j'ai tout essayé mais je n'arrive pas à adapter les différentes solutions à mon problème.
(Je suis surement une T..... !!)
Je possède un classeur avec une feuille paramètres et une feuille impression.
Dans la feuille paramètres, j'ai 2 groupes Base et Ligne composé chacun d'un nombre d'équipes à qui on attribue un service en fonction de la journée de travail (Le service variant d'une journée à l'autre....)
J'ai essayé de créer un userform ( cela viendra s'intéger dans userform final qui est plus compliqué) qui me permette en cochant le bon bouton radio de me proposer la liste d'équipes et de services correspondante.
Les valeurs retenues devant être ensuite reporté dans des cellules spécifiques d'une feuille destinée à l'impression.
Je bute complètement sur ce problème alors que je suis certain qu'il ne doit pas être si compliqué.
Je suis encore débutant sur VBa !!!
1. Comment faire pour que le choix du bouton limite les listes?
2. ListBox ou ComboBox quel est le meilleur choix dans ce cas ?
Je viens d'ouvrir ton fichier parce que tu disais:
J'ai trouvé divers sujets sur la question, mais depuis deux jours j'ai tout essayé mais je n'arrive pas à adapter les différentes solutions à mon problème.
D'après ce que j'ai compris, tu veux afficher les mêmes valeurs dans les listbox et les cellules de la feuille impresssion.
Alors vois si cela te convient.
Si les listBox ne servent qu'à l'affichage des données, il faut les étendres, pour quelles puissent afficher toutes les lignes.
Code:
Private sh As Worksheet 'déclare la variable sh (SHeet)
Private f As Worksheet 'déclare la variable sh (SHeet)
Private Sub OpButBase_Click()
Call affich 'lance la procédure "affich"
End Sub
Private Sub OpButLigne_Click()
Call affich 'lance la procédure "affich"
End Sub
Public Sub affich()
LBoxEquipe.Clear 'vide les anciennes valeur de ListBox
LBoxService.Clear 'vide les anciennes valeur de ListBox
f.Range("C6:C17").ClearContents 'vide les anciennes valeur des cellules
f.Range("F6:F17").ClearContents 'idem
If OpButBase = True Then 'premier cas
LBoxEquipe.List = sh.Range("C3:C14").Value 'remplissage de la ListBox Equipe
LBoxService.List = sh.Range("E3:E14").Value 'remplissage de la ListBox Service
f.Range("D4") = "Base"
f.Range("C6").Resize(12).Value = sh.Range("C3:C14").Value
f.Range("F6").Resize(12).Value = sh.Range("E3:E14").Value
Else 'deuxième cas
LBoxEquipe.List = sh.Range("C15:C24").Value 'remplissage de la ListBox Equipe
LBoxService.List = sh.Range("E15:E24").Value 'remplissage de la ListBox Service
f.Range("D4") = "Ligne"
f.Range("C6").Resize(10).Value = sh.Range("C15:C24").Value
f.Range("F6").Resize(10).Value = sh.Range("E15:E24").Value
End If
End Sub
Private Sub UserForm_Initialize()
'Les initialiser ici est suffisant
Set sh = Sheets("Paramètres") 'définit la variable sh
Set f = Sheets("Impression")
End Sub
Sinon précise ta question.
A+
[Edition précision] les boutons options d'un même 'Frame' s'excluant l'un l'autre, il n'est pas besoin de ligne telle que 'if optButBase=true then optButLigne=false' cela se fait automatiquement.
Après le tri par OptionButton, je veux sélectionner une valeur dans chaque ListBox et que celle-ci se reporte dans la feuille impression au bon emplacement après sélection (une seule valeur par ListBox).
Super !!!
C'est le résultat souhaité en effet et c'est vrai que je n'avais pas été précis...
Une petite question si je souhaitais que le report des valeurs se fasse sans bouton validation mais uniquement par la sélection de la valeur dans la ListBox, est-ce possible et comment comment s'y prendre ?
Merci de ton aide.
Cordialement
Brutor
PS : Pour mieux comprendre le code à quoi correspond les "caractères" des lignes de code
Code:
Dim [COLOR=red][B]DerLigne[/B][/COLOR] As Long (que je ne retrouve pas dans le code
.Range("D4") = [COLOR=red][B]IIf[/B][/COLOR](OpButBase, "Base", "Ligne")
Crois moi, laisse le bouton valider.
Sinon tu vas obtenir une usine à gaz simplement pour pouvoir afficher deux valeurs qui riquent de perdre toute cohérence.
Si tu veux vraiment tu enlève le bouton, laisse son code que tu appelles sur
Code:
Private Sub LboxEquipe_Click()
cmdValider_Click
End Sub
Private Sub LboxEquipe_Click()
cmdValider_Click
End Sub
C'est plus suceptible d'erreur, car tu ne maîtrises plus les erreurs de manip de l'utilisateur sur les listBox.
A+
Merci de ton conseil que je vais surement adopter.
Pour mieux comprendre le code à quoi correspond les "caractères" des lignes de code
Code:
Dim [COLOR="Red"][B]DerLigne[/B][/COLOR] As Long (que je ne retrouve pas dans le code
.Range("D4") =[COLOR="Red"][B] IIf[/B][/COLOR](OpButBase, "Base", "Ligne")
Encore merci de ton aide qui m'a été précieuse dans la réalisation de mon projet.