Saisie automatique d'une valeur à partir d'une liste

Bonjour,

Je débute en VBA mais cela fait une semaine que je suis à temps plein sur un fichier Excel. J'ai réussi à bidouiller quelques trucs plutôt sympas grâce à toutes les questions et réponses présentes sur ce forum et je tiens à remercier tout le monde car sans vous, je n'aurais jamais pu rien faire ...

Mon problème:

J'ai un tableau d'entreprises et pour chaque entreprise, plusieurs employés sont inscrits ainsi que leur fonction (pas tous les employés ont leur fonction renseignée mais c'est pas bien grave je pense)

J'ai réussi à créer une liste qui permet de sélectionner une entreprise, et une liste qui indique les noms des employés de cette entreprises.

J'aimerais qu'en ayant sélectionné le nom de l'employé, sa fonction s'affiche automatiquement. Or, après trois jours d'arrachage de cheveux intensifs, je n'y arrive toujours pas. La seule chose que j'arrive à faire, c'est une liste de toutes les fonctions répertoriées pour l'entreprise en question.

Si une âme charitable était en quête de faire le bonheur de quelqu'un, elle en a à présent l'occasion

PS: Je suis conscient que la forme de mon tableau n'est pas forcément adaptée, si vous avez des idées, n'hésitez pas !

En pièce jointe mon fichier XL, sachant que par la suite, les trois cases d'affichage seront dans une autre feuille du même fichier.

30select-employe.xlsx (29.57 Ko)

Bonjour,

Un essai

52select-employe.xlsm (39.17 Ko)

Bonjour JRC (DjiDji59430)

Effectivement

JRC a écrit :

PS: Je suis conscient que la forme de mon tableau n'est pas forcément adaptée, si vous avez des idées, n'hésitez pas !

donc voici une proposition plus adaptée à mon avis à la nature du problème

J'ai mis 2 tableaux dans l'onglet LISTES

Le 1er pour les entreprises sans doublons

Le 2ème pour les employés et fonctions respectives

Cette "structuration" offre je pense une meilleure ergonomie en terme d'ajout, de modification et même de visualisation des listes

PS/ j'ai mis une macro-cmde qui se charge de trier mes tableaux à chaque fois que l'on quitte l'onglet liste "Worksheet_Deactivate" de l'onglet LISTES

Bonjour, JRC, Andrea73 et DjiDji !

Je me suis mélangé les pieds ! Hier j'avais entamé une recomposition de la base de données de JRC... et j'ai eu la flemme de poursuivre... Revenant voir où cela en était aujourd'hui, j'ai regardé le dernier fichier, trouvé que JRC avait fait des progrès fulgurants ! , et je ne me suis rendu compte qu'après coup que je travaillais sur le fichier d'Andrea73 .

Cela n'est en fait pas bien grave, l'essentiel étant que cela constituait une bonne base de travail, que j'ai pris la liberté de modifier de façon un peu conséquente, en conservant toutefois la philosophie de développement présente...

Pour que JRC s'y retrouve :

Noms conservés :

tabEmp : c'est le nom du tableau Excel (mis d'office par Excel en tant que nom dans le classeur...)

tabEnt : ainsi définie :

=DECALER(tabEmp[[#En-têtes];[ENTREPRISE]];;;NBVAL(LISTES!$A:$A))

soit la colonne A de la base, en-tête comprise [NB: j'ai fait débuter le tableau en A1]

selectEnt : ainsi définie :

=DECALER(LISTES!$H$2;;;NBVAL(LISTES!$H:$H)-1)

En colonne H, liste des entreprises, issue du filtrage avancé de tabEnt.

Procédure à la désactivation de la feuille Listes modifiée :

Sub TrierListes()
    [tabEmp].Sort key1:=[tabEmp].Cells(1, 4), order1:=xlAscending, Header:=xlYes
    [selectEnt].ClearContents
    [tabEnt].AdvancedFilter xlFilterCopy, , [tabEnt].Cells(1, 8), True
End Sub

Lorsqu'on va sur cette feuille (modifier des éléments de la base) la préocédure retriera la base [NB la méthode Range.Sort se code en une ligne...], effacera la liste d'entreprises et la recomposera par filtrage avancé...

Listes déroulantes (validation) :

[NB- J'ai effacé toutes les autres données de cette feuille pour ne conserver que les sélections...]

En C3 sélection Entreprise : la liste est définie par selectEnt (comme précédemment).

En D3 sélection Employé : la liste est définie par la formule :

=DECALER(tabEnt;EQUIV(C3;tabEnt;0)-1;1;NB.SI(tabEnt;C3))

En E3 : affichage de la fonction : formule :

=SI(D3<>"";DECALER(DECALER(tabEnt;EQUIV(C3;tabEnt;0)-1;1);EQUIV(D3;DECALER(tabEnt;EQUIV(C3;tabEnt;0)-1;1);0)-1;1;1);"")

Affichage de "Pas de fonction" lorsque celle-ci manque (la formule renvoie alors 0) obtenue par le format de cellule personnalisé :

[b]Standard;;"Pas de fonction"[/b]

Effacement de D3 si sélection en C3 change (ou C3 effacée) :

Private Sub Worksheet_Change(ByVal Target As Range)
    If Target.Address = "$C$3" Then Me.Range("D3").ClearContents
End Sub

Cordialement et bonne journée à tous.

Bonjour MFerrand, Alexia et DjiDji

Je vous remercie ENORMEMENT pour le travail que vous avez fait, c'est tout simplement GENIAL !

Quel bonheur de voir vos messages ce matin et de contempler la puissance de la bête !

Merci pour vos explications, j'ai pu comprendre le fonctionnement du système, je vais maintenant essayer de m'attaquer à un formulaire pour pouvoir alimenter cette base de données correctement

Je ne sais comment vous remercier pour le temps que vous m'avez consacré et surtout pour votre réactivité. Mon respect le plus total est dirigé vers vous.

Rechercher des sujets similaires à "saisie automatique valeur partir liste"