RH listbox, userform et textbox

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

image

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

image
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

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"

image

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.

image
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

image

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)

image

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 / ... ?

F2NR2NA2F3NR3NA3F4NR4NA4F5NR5

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+

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

image

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

image

Q2) La selection d'un nom ramene ses formations / competences

image

Q3) Selectionner la competence/formation AMPI-ROLL dans les competence a l'ouverture du fichier.

image image image

A+

Merci pour votre retour rapide.

Par contre j'avoue ne pas avoir compris la ligne verte pour l'insertion de la photo d'identité par rapport à la personne sélectionné.

image

Comment dois-je procéder ?

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

image image image

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+

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.

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+

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)

image

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.

image

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,

image

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+

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.

image

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 :

image

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.

image

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 :

image

Si tu Active la modif tu sera en mode securisé avec ce message (les macro ne fonctionnent pas mais tu peux y avoir acces) :

image

Il faut ajouter l'emplacement (l'adresse où est stocké ton fichier) :

image

Tu n'as pas un message qui t'indique le probleme ?

A+

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" :

image

Que dois-je faire des ligne verte ?

image

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.

image

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

image

Tu n'oubliras pas de modifier le nom de ton bouton modifer en BouttonMob sinon aucune procedure ne sera appelé

Private Sub ButtonMod_Click()
image

_______________________________________________________________________________________________________________________

Pour les lignes vertes c'est pour les niveaux reel et attendu a lier a tes textbox ici en vert

image

_______________________________________________________________________________________________________________________

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.

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

image

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.

Rechercher des sujets similaires à "listbox userform textbox"