RH listbox, userform et textbox
- Messages
- 10
- Excel
- Ecel 2016 et 2019
- Inscrit
- 29/11/2023
- Emploi
- dessinatrice Méthode - cheffe de projet
Bonjour à tous,
Je suis débutante en Excel mais mon employeur ma demandé de réaliser un fichier RH... Vous vous doutez bien que je rencontre plusieurs problèmes. Pour des raisons de confidentialité, je ne peux pas vous joindre le fichier, je vais donc essayé d'être le plus claire possible. Je vous joint le code déjà réalisé à la fin.
Mon fichier et composé de 3 feuilles "Tableau de bord", "Filtre formations" et "Personnels"
dans mon "tableau de bord" j'ai 4 ListBox :
- la première récupère tous les noms et prénoms des personnels dans la feuille "personnels",
- la deuxième récupère tous les sous domaines de compétences dans la feuille "filtre compétences",
- la troisième récupère tous les domaines de compétences dans la feuille "filtre compétences",
- la quatrième récupère les énoncés des compétences dans la feuille "filtre compétences".
Mon premier problème et que je souhaiterais qu'en sélectionnant un domaine, seul les sous domaines et compétences rattachés dans mon tableau apparaissent dans les ListBox.
En ce qui concerne la ListBox des personnels, j'arrive à faire apparaitre mon UserForm en cliquant sur une personne, mais je voudrais qu'il se remplisse automatiquement avec les informations de cette personne contenue dans le tableau de la feuille "Personnels". Les cases à remplir sont des TextBox renommé en fonction du titre : BoxNom, BoxPrenom, BoxStatut, ...
Il faut qu'une photo d'identité de la personne apparaisse à coté du bouton accueil.
En bas de ce formulaire, il me faut une liste des compétences (entre 10 et 15) de la personne qui sont répertorié dans le tableau de la feuille "Personnels". Si mon employeur sélectionne une compétence, une fenêtre doit apparaitre avec le nom de toutes les personnes qui ont cette compétences tout en ayant le possibilité d'accéder à son formulaire propre.
De manière plus claire, il me faut une boucle sans fin entre les noms des personnels et les compétences...
Private Sub ListBox1_Click()
UserForm1.Show
End Sub
Private Sub UserForm_Initialize()
ListBox1.List = Sheets("PERSONNELS").Range("B2:C258").Value 'personnels
ListBox2.List = Sheets("FILTRE FORMATION").Range("C2:C30").Value 'sous-domaines
ListBox3.List = Sheets("FILTRE FORMATION").Range("B2:B7").Value 'domaines
ListBox4.List = Sheets("FILTRE FORMATION").Range("A2:A338").Value 'formations
End Sub
Private Sub ListBox2_Click()
' sous-domaines
End Sub
Private Sub ListBox3_Click()
' domaines
Dim domaine, sousdomaine As String
'
'Sheets(1).Cells(1, 1) = ListBox3.ListCount 'renvoie le nombre d'enregistrements
'Sheets(1).Cells(1, 1) = ListBox3.ListIndex 'renvoie le numéro de la ligne cliquée, commence à zéro
'
Sheets(1).Cells(1, 1) = ListBox3.Value
domaine = ListBox3.Value 'renvoie la valeur de la ligne cliquée
'
For i = 2 To 338
If Sheets("FORMATION").Cells(i, 3) = domaine Then
sousdomaine = Sheets("FORMATION").Cells(i, 4)
For j = 2 To 30
If Sheets("FILTRE FORMATION").Cells(j, 3) = sousdomaine Then
Sheets("FILTRE FORMATION").Cells(j, 4) = 1
Else
' Sheets("FILTRE FORMATION").Cells(j, 4) = 0
End If
Next j
End If
Next i
'
'ListBox3.LostFocus
'
End Sub
Private Sub ListBox4_Click()
' formations
End Sub
J'espère vraiment que vous pourrez m'aider car je ne sais plus quoi faire.
Merci d'avance
Bonjour
Sans fichier pour voir la structure de ton classeur difficle de répondre
Seule la partie nominative doit être anonymisée, les nom prenoms étant uniques , remplacer Nom1==>Nomxx et Prenom1==> xx devraient suffire
Les listes de choix sont plus importantes dans l'élaboration d'une solution
Dans l'attente
Cordialement
FINDRH
- Messages
- 10
- Excel
- Ecel 2016 et 2019
- Inscrit
- 29/11/2023
- Emploi
- dessinatrice Méthode - cheffe de projet
Je vous joint un fichier, je ne peux pas faire mieux.
Les ListBox ne s'affichent pas à l'ouverture (encore un problème), il faut effectuer le code à partir du VisualBasic.
Bonjour et
En décomposant les problemes =>
On commence par transfomer en plage ton "tableau1" puis on le refait en incluant la colonne "numero" ce tableau se nommera "Tab_Personnels".
Pour la feuille "Filtre formation", creation de 3 nouveau tableau qui seront "Tab_TypeFormations" "Tab_Domaines" "Tab_SousDomaines"
Pour la feuille "Formation", création de 1 nouveau tableau "Tab_Formations"
Ce sera plus facile de s'y retrouver dans le code par la suite.
Début de proposition :
Les ListBox ne s'affichent pas à l'ouverture (encore un problème), il faut effectuer le code à partir du VisualBasic.
Dans la partie ThisWorkbook, la precedure "Private Sub Workbook_Open()" s'éxecute a l'ouverture du classeur.
Sheets("TABLEAU").ListBox1.ColumnWidths = "20;90;90"
Cette ligne de code va donner la largeur des colonnes de ta listbox1, tu pourras mettre "0;90;90" si tu souhaites masquer le numero par la suite.
On utilise ce numero pour déterminer qu'elle ligne on doit utiliser pour remplir l'userform1
En ce qui concerne la ListBox des personnels, j'arrive à faire apparaitre mon UserForm en cliquant sur une personne, mais je voudrais qu'il se remplisse automatiquement avec les informations de cette personne contenue dans le tableau de la feuille "Personnels". Les cases à remplir sont des TextBox renommé en fonction du titre : BoxNom, BoxPrenom, BoxStatut, ...
Il faut qu'une photo d'identité de la personne apparaisse à coté du bouton accueil.
J'ai rajouté la variable "NumPersonnels" qui correspond aux numero dont je parle juste au dessus dans la procedure "ListBox1_Click".
(dans le Module1 j'ai défini cette variable comme public pour pouvoir la recupérer partout)
Private Sub ListBox1_Click()
NumPersonnels = ListBox1.Value
UserForm1.Show
End Sub
Le clic listbox1 nous ouvre donc l'userform:
J'ai remis la partie initialisation de l'userform a sa place (dans le code userform1)
Cette ligne va chercher la valeur qui se trouve dans la colonne "Nom" et la ligne "NumPersonnels" (donc la ligne cliqué sur lisbox1)
BoxNom.Value = .ListColumns("Nom").DataBodyRange.Rows(NumPersonnels).Value 'Nom
Je te laisse faire tes autres texbox et il faudra que tu ajoute a ton tableau une colonne Photo (qui aura comme valeur un lien vers la photo du personnels).
C'est là que s'arrete le fichier joint, il faudrait que tu confirme les question en dessous pour etre sûr de ce que tu souhaites
_____________________________________________________________________________________________________
Mon premier problème et que je souhaiterais qu'en sélectionnant un domaine, seul les sous domaines et compétences rattachés dans mon tableau apparaissent dans les ListBox.
Q1 ) A moins que j'ai zappé l'info, on connait pas les liens entre domaines et sous-domaines.
En bas de ce formulaire, il me faut une liste des compétences (entre 10 et 15) de la personne qui sont répertorié dans le tableau de la feuille "Personnels".
Q2 ) Les competences sont dans les colonnes F2 / NR2 / NA2 / ... ?
F2 | NR2 | NA2 | F3 | NR3 | NA3 | F4 | NR4 | NA4 | F5 | NR5 |
Si mon employeur sélectionne une compétence, une fenêtre doit apparaitre avec le nom de toutes les personnes qui ont cette compétences tout en ayant le possibilité d'accéder à son formulaire propre.
Q3 ) Il ne vaudrait pas mieux refaire un Userform qui s'ouvre quand il selectionne une valeur dans la listbox4 ?
Et cette Userform2 pourrait rappeler l'Userform 1 avec une nouvelle valeur dans la variable "NumPersonnels"
A+
- Messages
- 10
- Excel
- Ecel 2016 et 2019
- Inscrit
- 29/11/2023
- Emploi
- dessinatrice Méthode - cheffe de projet
Merci beaucoup Geof52 pour le temps que tu y as consacré.
Q1)
Pour avoir le lien il faut utiliser la feuille "formation" et faire des filtres. EX : avec le domaine de la qualité.
Q2)
F1 = Formation 1
NR1 = Niveau réel du personnel pour la formation 1
NA1 = Niveau attendu dans l'entreprise pour la formation 1
Q3)
J'avoue ne pas y avoir pensé mais je suis ouverte à toutes les propositions.
Bonsoir,
Q1) La selection d'un domaine tri les sous domaines et competences
Pas evident a expliquer la procedure "Private Sub ListBox3_Click()"
Pour chaque "Domaines" on va chercher les "sous domaines" et les "formations" en valeur unique
et on les inscrit dans listbox 2 et 4
Q2) La selection d'un nom ramene ses formations / competences
Q3) Selectionner la competence/formation AMPI-ROLL dans les competence a l'ouverture du fichier.
A+
- Messages
- 10
- Excel
- Ecel 2016 et 2019
- Inscrit
- 29/11/2023
- Emploi
- dessinatrice Méthode - cheffe de projet
Il faut juste une nouvelle colonne dans le tableau "Personnels" qui se nommera "Photo"
[ou autre mais a il faudra modifier la macro également au niveau de l'image. picture a chercher dans => .ListColumns("Photo")]
Dans cette nouvelle colonne, pour chaque ligne, il faudra le lien de la photo de la personne.
Un truc comme ça si on ajoute la colonne Photo apres NA15
Il faut bien sur retirer l'apostrophe devant "Image1.Picture"
Image1.Picture = LoadPicture(.ListColumns("Photo").DataBodyRange.Rows(NumPersonnels).Value) 'image
"C:\...\Jean Pierre.jpg" est à supprimer c'etait pour l'exemple a inscrire dans la colonne Photo.
A+
- Messages
- 10
- Excel
- Ecel 2016 et 2019
- Inscrit
- 29/11/2023
- Emploi
- dessinatrice Méthode - cheffe de projet
Bonjour et bonne année à tous,
Après cette période de fêtes et quelques essayes de mon coté, je reviens vers vous avec plusieurs question.
1) comment faire pour que la mise en page du tableau de bord reste la même sur tout les ordinateurs qui ouvrent mon fichier. C'est surtout les ListBox qui rétrécissent.
2) comment en créant un bouton à coté de ma liste de personnels ajouter les nouveaux arrivants dans le tableau "Personnels", en faisant apparaitre un formulaire déjà prérempli avec des listes déroulantes surtout pour les domaines, sous-domaines et compétences. Si possible avec le même système déjà réalisé il y a quelques mois, si un domaine est sélectionné les sous- domaines et compétences sont filtrés par rapport à lui.
3) comment faire la même chose pour supprimer les personnels si besoin.
4) une fois que j'ai appuyé sur un nom je ne peux pas re-cliquer directement sur le même, comment faire.
5) une fois que je sélectionne une personne le userform1 apparait, je dois pouvoir clique sur une formation et faire apparaitre le userform2. Il faut que l'utilisateur puisse cliquer en boucle. En partant d'une personne on sélectionne une formation, et toutes les personnes qui ont cette formation apparaissent dans le userform2, puis on doit pouvoir re-sélectionner un nom pour que le userform1 apparaisse etc...
6) j'ai réalisé des tableaux croisés dynamiques que j'ai ensuite convertis en graphiques, y a t'il un moyen qu'ils se mettent à jour automatiquement dès le changement du tableau "Personnel" car pour le moment je dois appuyer sur Alt+F5.
Merci pour votre aide.
- Messages
- 10
- Excel
- Ecel 2016 et 2019
- Inscrit
- 29/11/2023
- Emploi
- dessinatrice Méthode - cheffe de projet
Rebonjour,
Je viens de trouver la réponse à ma première question sur la mise en page, mais je me rends compte que les filtres mis en place pour les domaines, sous domaines et formations ne fonctionnent pas tous.
En sélectionnant un domaine je filtre bien les sous-domaines et formations mais en sélectionnant un sous- domaine je ne filtre pas les formations, comment puis-je faire ?
Bonjour et bonne année,
1 ) Mise en page ok mais en sélectionnant un sous- domaine je ne filtre pas les formations, comment puis-je faire ?
Dans la Feuil1, j’ai ajouté la procédure « Private Sub ListBox2_Click() » qui est presque identique à ce qui a été fait quand on sélectionne le domaine.
J’ai déclaré les variables en public sur le Module1 (au lieu des mettre dans la « Private Sub ListBox3_Click() »)
2) comment en créant un bouton à coté de ma liste de personnels ajouter les nouveaux arrivants dans le tableau "Personnels", en faisant apparaitre un formulaire déjà prérempli avec des listes déroulantes surtout pour les domaines, sous-domaines et compétences. Si possible avec le même système déjà réalisé il y a quelques mois, si un domaine est sélectionné les sous- domaines et compétences sont filtrés par rapport à lui.
3) comment faire la même chose pour supprimer les personnels si besoin.
Je regarde ça ce week-end mais je pense qu'il faudrait un troisieme UserForm pour ajouter / supprimer du personnels avec un maximum de choix rempli par liste déroulante.
4) une fois que j'ai appuyé sur un nom je ne peux pas re-cliquer directement sur le même, comment faire.
Il faut que la listebox perde sa valeur.
Exemple : Si tu clic sur un Nom1 dans la listbox1, cela va t’ouvrir l’Userform1 avec son nom.
Quand tu quitte l’userform1, (avec la croix rouge de l'UserForm ou un Unload Me [comme ton bouton Acceuil])
Il faut lui dire que dans la feuille "Tableau", la valeur de la listebox1 est vide
Private Sub UserForm_QueryClose(Cancel As Integer, CloseMode As Integer)
Sheets("TABLEAU").ListBox1.Value = ""
End Sub
5) une fois que je sélectionne une personne le userform1 apparait, je dois pouvoir clique sur une formation et faire apparaitre le userform2. Il faut que l'utilisateur puisse cliquer en boucle. En partant d'une personne on sélectionne une formation, et toutes les personnes qui ont cette formation apparaissent dans le userform2, puis on doit pouvoir re-sélectionner un nom pour que le userform1 apparaisse etc...
Pour ce point on a vu en privé ce qui n’allait pas, le mode modal et la fermeture de l’userform pour l'actualiser.
6) j'ai réalisé des tableaux croisés dynamiques que j'ai ensuite convertis en graphiques, y a t'il un moyen qu'ils se mettent à jour automatiquement dès le changement du tableau "Personnel" car pour le moment je dois appuyer sur Alt+F5.
On peut ajouter une mise a jour lorsque qu'on passe d'une feuille a une autre comme pour aller sur ton graphique. Dans ThisWorkbook :
Private Sub Workbook_SheetActivate(ByVal Sh As Object)
ActiveWorkbook.RefreshAll
End Sub
Le fichier avec les modifs :
A+
- Messages
- 10
- Excel
- Ecel 2016 et 2019
- Inscrit
- 29/11/2023
- Emploi
- dessinatrice Méthode - cheffe de projet
C'est génial tout fonctionne merci beaucoup j'attends le reste avec impatience.
Bonjour,
Une proposition avec l'ajout et la suppression d'une personne, les userforms Add / Supp s'ouvrent quand tu clic sur le bouton + ou - dans la feuille "Personnels".
Pour l'exemple j'ai supprimé le Nom3, apres cette suppression, il y a une renumerotation du tableau pour ne pas refaire les macro qui fonctionne a l'ouverture.
(A voir si le numero lié a un nom peut changer ou si il doit etre supprimé en meme temps que la personne)
J'ai mis la macro de mise a jour dans le Module1
J'ai aussi modifié les propriétés des textbox / comobox des Userform pour qu'a chaque Tabulation les données a remplir se suivent.
Cette propriété est TabIndex (numeroter dans l'ordre voulu ) et il faut que TabStop soit a True pour se stopper sur l'objet apres une tabulation.
Les combobox formations ont la même logique que les listes a l'ouverture du fichier. (tri suivant domaines / sous domaines et competences).
Pour Ajouter une competence, double clic sur une des 15 cases sous Formations,
Pour le niveau reel et attendu, il faudrait que je sache ce qui peut-etre ecrit dans ces cellules si tu souhaites l'intéget dans l'userform.
A+
- Messages
- 10
- Excel
- Ecel 2016 et 2019
- Inscrit
- 29/11/2023
- Emploi
- dessinatrice Méthode - cheffe de projet
Bonjour,
J'ai juste une petit problème avec cette solution. Une fois finie, l'utilisateur n'aura accès qu'au tableau de bord et non aux autres feuilles. Au final, j'ai besoin des boutons dans le rectangle rouge.
De plus, il me faudrait un autre bouton si un personnel existant doit être mis à jour (j'ai oublié de le préciser avant).
Pour le niveau réel et attendu voici la légende :
J'ai une autre question : Au travail je suis en Excel 2016 et tout va bien, mais sur mon ordinateur personnel rien ne fonctionne. J'ai les listbox du tableau de bord en double, les userform ne répondent pas, .... Est-ce parce que je suis en Excel 2019 ?
Merci et à plus tard.
J'ai juste une petit problème avec cette solution. Une fois finie, l'utilisateur n'aura accès qu'au tableau de bord et non aux autres feuilles. Au final, j'ai besoin des boutons dans le rectangle rouge.
Ce qui veux dire que n'importe quel utilisateur pourra supprimé du personnels ?
Si c'est le cas, il suffit de deplacer les bouton + et - sur la feuille Tableau et également leurs procedures qui sont dans la feuille "Personnels":
Private Sub ADD_Click()
UF_Add.Show 0
End Sub
Private Sub SUPP_Click()
UF_Supp.Show 0
End Sub
De plus, il me faudrait un autre bouton si un personnel existant doit être mis à jour (j'ai oublié de le préciser avant).
Pour le niveau réel et attendu voici la légende :
On peut faire un truc comme ça :
Sur l'userform qui ajoute du personnel on pourrait ajouter des textbox (ou combobox) pour les niveaux attendu et reel.
Pour modifier un personnel on peut (sur ta feuille tableau carré rouge) avoir 3 boutons (Ajouter Supprimer Modifier)
Si tu clic sur Ajouter c'est comme mon fichier precedent
Si tu clic sur modifier, L'userform va etre le meme mais le bouton Ajouter (dans l'userform) sera remplacé par un bouton modifer et en haut tu auras une combox pour choisir le personnel a modifier.
J'ai une autre question : Au travail je suis en Excel 2016 et tout va bien, mais sur mon ordinateur personnel rien ne fonctionne. J'ai les listbox du tableau de bord en double, les userform ne répondent pas, .... Est-ce parce que je suis en Excel 2019 ?
Non sur 2019 il n'y a pas de soucis mais il peut y avoir dans les options Excel des droits/emplacement qui sont refusé comme celui ci par exemple :
Si tu Active la modif tu sera en mode securisé avec ce message (les macro ne fonctionnent pas mais tu peux y avoir acces) :
Il faut ajouter l'emplacement (l'adresse où est stocké ton fichier) :
Tu n'as pas un message qui t'indique le probleme ?
A+
- Messages
- 10
- Excel
- Ecel 2016 et 2019
- Inscrit
- 29/11/2023
- Emploi
- dessinatrice Méthode - cheffe de projet
Ce qui veux dire que n'importe quel utilisateur pourra supprimé du personnels ?
Non car dans l’idéal, le fichier sera verrouillé par des codes, un pour le directeur, un pour les chefs d'ateliers, un pour les chefs d'équipes et un pour les RH. En fonction du code certaines fonction ne seront pas accessible (si c'est possible bien sûr).
Aucun problème avec le bouton "ajouter" mais j'ai un message d'erreur avec "supprimer" :
Que dois-je faire des ligne verte ?
J'ai également quelques problèmes avec les niveaux et le userform "modifier".
Je vous joins un fichier plus récent. Merci
Pour 1 mot de passe par personne, on peut le faire. (on verra quand il n'y aura plus que ça a regler)
_______________________________________________________________________________________________________________________
J'ai modifié la partie ThisWorkbook et Module1
Car on doit faire la mise a jour en sortie de chaque Userform pratiquement donc,
au lieu d'écrire la mise a jour dans chaque procedure, je la mets dans le Module1 et je l'appel quand j'en ai besoin.
Il y a également de nouvelles variables définit dans ce module (c'est ce qui te bloque).
_______________________________________________________________________________________________________________________
Pour le Choix_Mod que tu as créé (dans le UF_Mod [on aurait pu également garder seulement UF_Add]), tu peux t'inspirer de la combobox de l'userform Supp
Tu n'oubliras pas de modifier le nom de ton bouton modifer en BouttonMob sinon aucune procedure ne sera appelé
Private Sub ButtonMod_Click()
_______________________________________________________________________________________________________________________
Pour les lignes vertes c'est pour les niveaux reel et attendu a lier a tes textbox ici en vert
_______________________________________________________________________________________________________________________
Tu peux en profiter pour mettre les "TabIndex" dans l'ordre que tu souhaites.
_______________________________________________________________________________________________________________________
J'ai également quelques problèmes avec les niveaux et le userform "modifier".
J'ai pas compris ce qui bloque, en modifiant ce que je dit juste au dessus, peut etre le probleme sera réglé ?
_______________________________________________________________________________________________________________________
Essai de faire ça et envoi le fichier a jour quand tu as fini, je regarde ce soir si il te reste des problemes.
- Messages
- 10
- Excel
- Ecel 2016 et 2019
- Inscrit
- 29/11/2023
- Emploi
- dessinatrice Méthode - cheffe de projet
Je pense ne pas être trop mal partie, pouvez-vous vérifier tout de même. Surtout le bouton "modifier"
Tu peux en profiter pour mettre les "TabIndex" dans l'ordre que tu souhaites.
c'est à dire ?
Merci à plus tard.
Je pense ne pas être trop mal partie
Je ne vois pas de probleme, sauf le bouton "Modifier" de "UF_Mod" qui n'a pas de procedure.
Ce qu'il faudra faire ici c'est une copie de la procedure "Private Sub Choix_Mod_Change()" et faire l'inverse.
'Changer de ça :
BoxNom.Value = .ListColumns("Nom").DataBodyRange.Rows(NumPersonnels).Value
'A ça : (avec NumPersonnels = ModNumero.value pour retrouver la ligne a modifier)
.ListColumns("Nom").DataBodyRange.Rows(NumPersonnels).Value = BoxNom.Value
Je te laisse essayer ? (il faudra aussi ajouter des lignes pour les formations, les niveaux et toutes autres info manquantes)
Il n'y aura pas besoin de la boucle For, car on modifie une seule personne d'où la modification de NumPersonnels = ModNumero.value
____________________________________________________________________________________________________________________________
J'ai vu un souci quand on change de Userform1 à l'Userfom2 dans certains cas.
Pour corriger, il faut ajouter :
Ligne = ListBoxF1.ListCount - 1
Dans l'UserForm1 au niveau des 15 formations reprisent juste apres "ListeBoxF1.AddItem"
If .ListColumns("Formation1").DataBodyRange.Rows(NumPersonnels).Value <> "" Then
ListBoxF1.AddItem
Ligne = ListBoxF1.ListCount - 1 '<=============== A ajouter ici
ListBoxF1.List(Ligne, 0) = .ListColumns("Formation1").DataBodyRange.Rows(NumPersonnels).Value
ListBoxF1.List(Ligne, 1) = .ListColumns("NiveauRéel1").DataBodyRange.Rows(NumPersonnels).Value
ListBoxF1.List(Ligne, 2) = .ListColumns("NiveauAttendu1").DataBodyRange.Rows(NumPersonnels).Value
Ligne = Ligne + 1
End If
____________________________________________________________________________________________________________________________
Ce que j'explique dans ce message avec la capture (pour le TabIndex)
https://forum.excel-pratique.com/excel/rh-listbox-userform-et-textbox-189197#p1183249
TabIndex est l'ordre dans lequel tu va rentrer tes données dans l'userform,
la Tabulation (touche clavier) va passer d'une textbox a une autre.
Exemple : Tu souhaites remplir le Nom / Prenom / STATUT / GRADE / ... a chaque Tabulation
Si TabIndex de nom / prenom / ... ne se suis pas, la tabulation va passer de NOM / EQUIPE/ POSTE/ FORMATION / PRENOM / ...
Dans l'ordre dans lequel tu as créé tes textbox, qui n'est pas toujours l'ordre voulu.