2 Combobox en cascade puis afficher résultat dans les textbox et labels
Bonjour à tous,
Je souhaite faire une fiche d'heures, j'ai pris des idées dans les forums et là je bloque complètement...
Je souhaite utiliser deux combobox's en cascade, puis afficher les résultats dans plusieurs textbox's et label's.
Jusqu'ici j'arrive a alimenter les 2
"combos" en cascade, mais je n'arrive pas a afficher AUCUN résultat sur textbox ou label.
Pouriez-vous svp m'aider a et compléter mon fichier en affichant un résultat sur un textbox et un sur un label, je me servirai de votre code pour compléter mes nombreux textbox's.....
Em vous remerciant par avance.
Audio
Private O As Worksheet 'déclare la variable O (Onglet)
Private TV As Variant 'déclare la variable TV (Tableau des Valeurs)
Private Sub UserForm_Initialize() 'à l'initialisation de l'UserForm
Dim D As Object 'déclare la variable D (Dictionnaire)
Dim I As Integer 'déclare la variable I (Incrément)
Set O = Worksheets("Pointage 2022") 'définit l'onglet O
TV = O.Range("A3").CurrentRegion 'définit le tableau des valeurs TV
Set D = CreateObject("Scripting.Dictionary") 'définit le dictionnaire D
For I = 4 To UBound(TV, 1) 'boucle sur toutes les lignes I du tableau des valeurs TV (en partant de la seconde)
D(TV(I, 1)) = "" 'alimente le dictionnaire D avec les données en colonne 2 du tableau des valeurs TV
Next I 'prochaine ligne de la boucle
Me.ComboBox1.List = D.keys 'alimente la ComboBox1 avec la liste des éléments du dictionnaire D sans doublons
End Sub
Private Sub ComboBox1_Change() 'au changement dans la Combobox1
Dim I As Integer 'déclare la variable I (Incrément)
Me.ComboBox2.Clear 'vide la ComboBox2
'si la ComboBox1 est effacée, lance la procédure [Effac] et sort de cette procédure
If Me.ComboBox1.Value = "" Then Call Effac: Exit Sub
For I = 4 To UBound(TV, 1) 'boucle sur toutes les lignes I du tableau des valeurs TV (en partant de la quatrième
'si la valeur de la ComboBox1 est égale à la valeur de la donnée ligne I colonne 2 de TV,
'ajoute la donnée ligne I colonne 1 de TV à la ComboBox2
If CStr(TV(I, 1)) = Me.ComboBox1.Value Then Me.ComboBox2.AddItem TV(I, 134)
Next I 'prochaine ligne de la boucle
'si la ComboBox2 ne contient qu'un seul élément, affiche cet unique élément
'ce qui a pour conséquence de lancer la procédure Change de la ComboBox2
If Me.ComboBox2.ListCount = 1 Then Me.ComboBox2.ListIndex = 0
End Sub
Private Sub ComboBox2_Change() 'au changement dans la Combobox1
Dim I As Integer 'déclare la variable I (Incrément)
Dim J As Byte 'déclare la variable J (incrément)
'si la ComboBox2 est effacée, lance la procédure [Effac] et sort de cette procédure
If Me.ComboBox2.Value = "" Then Call Effac: Exit Sub
For I = 4 To UBound(TV, 1) 'boucle 1 : sur toutes les lignes I du tableau des valeurs TV (en partant de la quatrieme)
'condition : si la valeur de la ComboBox1 est égale à la valeur de la donnée ligne I colonne 2 de TV,
'et si la valeur de la ComboBox2 est égale à la valeur de la donnée ligne I colonne 1 de TV
If CStr(TV(I, 134)) = Me.ComboBox1.Value And CStr(TV(I, 1)) = Me.ComboBox2.Value Then
For J = 1 To 134 'boucle 2 : sur les 5 colonnes du tableau des valeurs TV
Me.Controls(TextBox1 & J).Value = TV(I, J) 'renvoie dans la TextBox de la boucle, la donnée ligne I colonne J de TV
' Me.Controls(TextBox1.Text) = Sheets("Pointage 2022").Cells(I, 2)
Next J 'prochaine colonne de la boucle 2
End If 'fin de la condition
Next I 'prochaine ligne de la boucle 1
End Sub
Public Sub Effac()
Dim J As Byte 'déclare la variable J (incrément)
For J = 1 To 134 'boucle sur les 5 textboxes de l'UserForm1
Pointage.Controls(TextBox1.Text & J).Value = "" 'efface la TextBox de la boucle
Me.Controls(TextBox1) = Sheets("Pointage 2022").Cells(I, 2)
Next J 'prochaine colonne de la boujcle 2
End Sub
Bonjour,
d'abord ici, il faut inverser les combobox:
If CStr(TV(I, 134)) = Me.ComboBox1.Value And CStr(TV(I, 1)) = Me.ComboBox2.Value Then
**********************************************************************************************************************
là, je ne comprends pas:
For J = 1 To 134 'boucle 2 : sur les 5 colonnes du tableau des valeurs TV
Ne serait pas ; J=5 to 134? on commence à partir de la 5ème colonnejusquà la 134ème
et là aussi:
Me.Controls(TextBox1 & J).Value = TV(I, J)
***********************************************************************************************************************
et enfin et surtout, il faudrait renommer toutes vos TextBoxes, que le nom de chacune reprenne le N° de ligne et le N° de colonne du tableau de valeurs,
exemple pour la première textbox du tableau: Textbox45 pour la ligne 4 et la colonne 5 du tableau de valeurs, ce qui devient dans le code "TextBox" & I & J.
Cdlt
Bonjour Arturo,
Tout d'abord, merci pour essayer de m'aider, j'ai fait les modifs que tu me propose mais cela ne fonctionne toujours pas, ......
Mon but est de sélectionner une personne + un mois et que le résultat des 134 collones s'affichent sur les différents textbox et label .....
Merci de votre aide.
Audio
""""Bonjour,
d'abord ici, il faut inverser les combobox:
If CStr(TV(I, 134)) = Me.ComboBox1.Value And CStr(TV(I, 1)) = Me.ComboBox2.Value Then >>>>>>> changement effectuer<<<<<<<<<
**********************************************************************************************************************
là, je ne comprends pas:
For J = 1 To 134 'boucle 2 : sur les 5 colonnes du tableau des valeurs TV >>>>>>>>>>>>>>>j'ai fait la modif du texte explicatif, sur les 134 collones<<<<<<<<
Ne serait pas ; J=5 to 134? on commence à partir de la 5ème colonne jusquà la 134ème >>>>>>>>>>>>>>>>>sur les 134 collones<<<<<<<<<<<<<<<<<<<<<<
et là aussi:
Me.Controls(TextBox1 & J).Value = TV(I, J) <<<<<<<<<<<ici normalment c'est Me.Controls("TextBox" & J).Value = TV(I, J), mais je bloque, quid au moment d'afficher certains résultats sur les labels?.....<<<<<<<<<<<<<<<<<<<<<<<<
***********************************************************************************************************************
et enfin et surtout, il faudrait renommer toutes vos TextBoxes, que le nom de chacune reprenne le N° de ligne et le N° de colonne du tableau de valeurs,
exemple pour la première textbox du tableau: Textbox45 pour la ligne 4 et la colonne 5 du tableau de valeurs, ce qui devient dans le code "TextBox" & I & J.
Cdlt""""<<<<<<<<<<<<<<<<<<<<<<<< je pense qu'ici c'est pour l'organisation au vu du nombre de textbox et labels present dans mon code...>>>>>>>>>
ça je l'ai bien compris, je vois que vous avez modifié la ligne en défaut en inversant le nom des textboxes, mais vous n'avez pas corrigé celle-ci:
For J = 1 To 134 'boucle 2 : sur les 5 colonnes du tableau des valeurs TV
Ne serait pas ; J=5 to 134? on commence à partir de la 5ème colonne jusquà la 134ème.
************************************************************************************************
Ensuite vous parlez de remplir les textboxes et les labels, mais que doit-on y mettre précisément, "Horas Previstas", Horas Feitas", Horas extras", les 3 ? En fait ce n'est pas très clair.
En fait, c'est dés la 2eme collone (car l'adresse, le email et telephone s'afficheront eux sur les labels 1,2 et 3) j'ai ecris directement sur quelques labels ce que doit s'afficher, une fois que j'ai compris j'affecterais mois les textbox et labels restant....
Encore une fois merci de votre aide.
Bonjour,
Voici le fichier, je n'ai traité que les textbox du tableau des semaines et des labels sur le côté gauche de l'userform , je vous laisse le soin de finir le reste.
Pour le nom des textboxes, dans le tableau des semaines, voici comment elles sont renommées;
-le tableau des semaines, contient 5 colonnes sur 7 lignes. le nom de chaque textbox est constitué de: "Textbox" & Le n° de colonne du tableau des semaines de l'userform et du n° de colonnes du tableau des valeurs.
le fichier
Cdlt
Bonjour,
Miles merci a Arturo, le code fonctionne à merveille!
Je pensais que cela ne marcherais pas du fait que les textbox soit a l’intérieur des FRAME.
Merci beaucoup.
Audio