actualiser une liste deroulante

ivan972

XLDnaute Occasionnel
Bonjour a tous et a chacun,

Ma difficulté est la suivante :

Est il possible d actualiser une liste deroulante deja creee en fonction des nouvelles entrees d un tableau sans avoir a reselectionner la colonne a chaque fois, autrement dit completer la liste deroulante avec les nouveaux noms sans avoir ceux deja existant?

Vous remerciant

Cordialement

ivan
 

ivan972

XLDnaute Occasionnel
Re : actualiser une liste deroulante

Bonjour,

merci robert d avoir pris le temps de lire.

a l aide du fichier ci joint je devrais etre plus explicite.

sur la feuille visible les ligne 14 a 18 sont les information qui completeront le tableau ci dessus. On constate que M. bleu et M. rouge existe deja mais que M.beige et jaune sable pas encore. donc l objectif est de completer la liste deroulante des deux (beige et jaune) sans avoir a tout reselectionner.

Te remerciant

ivan
 

Pièces jointes

  • actualisation liste deroulante.xlsx
    9.6 KB · Affichages: 45
  • actualisation liste deroulante.xlsx
    9.6 KB · Affichages: 47
  • actualisation liste deroulante.xlsx
    9.6 KB · Affichages: 51

Robert

XLDnaute Barbatruc
Repose en paix
Re : actualiser une liste deroulante

Bonjour Ivan, bonjour le forum,

En pièce jointe ton fichier modifié. J'ai utilisé la macro événementielle Change de l'onglet Feuil1 ci-dessous :
Code:
Option Explicit

Private Sub Worksheet_Change(ByVal Target As Range)
Dim DL As Integer 'déclare la variable DL (Dernière Ligne)
Dim PL As Range 'déclare la variable PL (PLage)
Dim D As Object 'déclare la variable D (DIctionnaire)
Dim CEL As Range 'déclare la variable CEL (CELlule)
Dim TMP As Variant 'déclare la variable TMP (tableau TeMPoraire)

If Target.Column <> 2 Then Exit Sub 'si le changement a lieu aillerus que dans la colonne 2 (=B), sort de la procédure
DL = Cells(Application.Rows.Count, 2).End(xlUp).Row 'définit la dernière ligne éditée DL de la colonne 2 (=B)
Set PL = Range("B2:B" & DL) 'définit la plage PL
Set D = CreateObject("Scripting.Dictionary") 'définit le dictionnaire D
For Each CEL In PL 'boucle sur toutes les cellules CEL de la plage PL
    If CEL.Value <> "" Then D(CEL.Value) = "" 'si la cellule n'est pas vide, alimente le dictionnaire DL
Next CEL 'prichaine cellule de la boucle
TMP = D.keys 'récupère dans le tableau temporaire TMP, les éléments uniques de la liste (sans doublon)
Range("E2").Resize(D.Count) = Application.Transpose(TMP) 'renvoie la liste des élément unique à partir de la cellule E2
'le reste est fait par la plage nommée "Liste" créée avec la formule : =DECALER(Feuil1!$E$2;;;NBVAL(Feuil1!$E:$E))
'via le Gestionnaire de noms. Voir "Gestionnaire de noms" dans le bandeau "Formules"
'la cellule H4 a la plage dynamique nommée "Liste" comme liste de validation de données...
'Chaque fois qu'un nom de faisant pas partie de la liste est tapé, il est automatiquement rajouté à la liste...
'en revanche, pour supprimer un nom de la liste déroulante, il faut le supprimer dans la plage de la colonne E
End Sub
La Validation de données en H4 se fait par la plage dynamique nommée Liste créée via le Gestionnaire de noms avec la formule DECALER. Voir dernier commentaire du code...
Le fichier :
 

Pièces jointes

  • Ivan_v01.xlsm
    17.4 KB · Affichages: 46
  • Ivan_v01.xlsm
    17.4 KB · Affichages: 55
  • Ivan_v01.xlsm
    17.4 KB · Affichages: 56
Dernière édition:

ivan972

XLDnaute Occasionnel
Re : actualiser une liste deroulante

bonsoir robert,

c est parfait cela fonctionne parfaitement suivant mes demandes.

un grand merci a toi pour le temps passé et la precision des reponses.

l aventure continue.

bonne continuation a toi.

ivan
 

Misange

XLDnaute Barbatruc
Re : actualiser une liste deroulante

Bonjour

avec du retard mais ça peut encore être utile à d'autres, une solution sans aucune macro
Il faut pour cela
1) extraire de la liste des agents (nommée agent) une liste de valeurs uniques. Ceci se fait avec la formule
=SIERREUR(INDEX(agent;EQUIV(0;NB.SI($D$1:D1;agent);0));"")
entrée en D2 (avec un titre en D1) et validée de façon matricielle (ctrl+maj+entrée) puis tirée vers le bas sur un nombre de cellules suffisant pour contenir tous les noms différents (on peut l'allonger par la suite sans difficulté si nécessaire)

2) définir un nom dynamique pour ne prendre en compte dans la colonne D que les cellules ayant un contenu
par exemple : uniques défini par la formule
=DECALER(Feuil1!$D$2;0;0;NB.SI(Feuil1!$D:$D;"><""")-1)

3) faire référence à ce nom "uniques" dans la liste de validation
 

Pièces jointes

  • actualisation liste deroulante.xlsx
    10.7 KB · Affichages: 59
  • actualisation liste deroulante.xlsx
    10.7 KB · Affichages: 54
  • actualisation liste deroulante.xlsx
    10.7 KB · Affichages: 61

ivan972

XLDnaute Occasionnel
Re : actualiser une liste deroulante

Bonjour Misange,

solution concluante mieux vaut plus que pas assez.

Merci d avoir pris le temps de repondre a ma demande

Ce forum est une mine de personnes bienveillantes

bonne continuation

ivan
 

Discussions similaires

Réponses
19
Affichages
2 K

Membres actuellement en ligne

Statistiques des forums

Discussions
312 084
Messages
2 085 194
Membres
102 813
dernier inscrit
kaiyi