compéter une liste déroulante cacher

Boostez vos compétences Excel avec notre communauté !

Rejoignez Excel Downloads, le rendez-vous des passionnés où l'entraide fait la force. Apprenez, échangez, progressez – et tout ça gratuitement ! 👉 Inscrivez-vous maintenant !

gildas lechat

XLDnaute Occasionnel
bonsoir le forum,

voila, sur un tableau j'ai identifié une liste déroulante pour compléter la cellule.Les données de la liste déroulante sont dans une colonne (F) masquée ( que je souhaite laisser masquer).

Je souhaiterai créer macro pour ajouter une donnée dans la liste déroulante quand celle ci est manquante.
Pour être plus claire voici le principe sur le fichier ci joint.

Merci d'avance de votre aide
Gildas
 

Pièces jointes

Re : compéter une liste déroulante cacher

Bonjour Bonsoir gildas lechat,

Le principe est simple :

- la liste de validation "Liste" doit être une liste "dynamique", définie par :

=DECALER($F$7;;;NBVAL($F:$F))

- la macro entre la valeur de la cellule active dans la cellule en dessous de la dernière valeur de la colonne F :

[F65536].End(xlUp)(2) = ActiveCell

- puis on trie la colonne F par ordre alphabétique :

[Liste].Sort Key1:=[F7], Order1:=xlAscending, Header:=xlNo

C'est simple. Cela dit un utilisateur qui fait semblant d'être bête risque d'entrer n'importe quoi...

A+
 
Re : compéter une liste déroulante cacher

Bonjour,

J'ai essayé de mettre en pratique également tes consignes job... mais vu mon niveau.

VOici le fichier, j'ai mis ton code dans un module standard... ca ne semble pas marcher, qu'ai je oublié ?

Je précise que je trouve cela intéressant pour moi, pour cela que je m'y penche aussi.

Merci encore.
 

Pièces jointes

Re : compéter une liste déroulante cacher

Bonjour,

Si l'élément frappé n'appartient pas à la liste, il est ajouté à la liste dans le tableur.

Code:
Private Sub Worksheet_Change(ByVal Target As Range)
 If Target.Column = 2 And Target.Count = 1 Then
    If Target <> "" Then
      If IsError(Application.Match(Target.Value, [maliste], 0)) Then
        If MsgBox("On ajoute?", vbYesNo) = vbYes Then
          [maliste].End(xlDown).Offset(1, 0) = Target.Value
          [maliste].Sort key1:=[maliste]
        Else
          Application.Undo
        End If
      End If
    End If
  End If
End Sub


Données/Validation

JB
 

Pièces jointes

Dernière édition:
Re : compéter une liste déroulante cacher

Bonjour à tous,

Un essai avec les préconisations de Job :

Code:
Private Sub TextBox1_Exit(ByVal Cancel As MSForms.ReturnBoolean)
[F65536].End(xlUp)(2) = TextBox1
Range("Liste").Sort Key1:=[F7], Order1:=xlAscending, Header:=xlNo
End Sub


Bises à T'ites Couettes
A+ à tous
 

Pièces jointes

Re : compéter une liste déroulante cacher

Bonjour gildas, Brigitte, JB, JC,

Fichier joint

Une fois le nom du client créé, la liste s'affiche dans la cellule :

Code:
Private Sub CommandButton1_Click()
If TextBox1 = "" Then TextBox1.SetFocus: Exit Sub
If Application.CountIf(Range("Liste"), TextBox1) Then _
  MsgBox "Ce client existe déjà...": TextBox1.SetFocus: Exit Sub
[F65536].End(xlUp)(2) = TextBox1
Range("Liste").Sort Key1:=[F7], Order1:=xlAscending, Header:=xlNo
Unload Me
ActiveCell.Activate 'au cas où la propriété TakeFocusOnClick du bouton Ajouter serait True
If Not Intersect(ActiveCell, Range("B7:B65536")) Is Nothing _
  Then SendKeys "%{DOWN}" 'pour afficher la liste
End Sub

A+
 

Pièces jointes

Re : compéter une liste déroulante cacher

Re,

Tiens une chose que je ne connaissais pas 😕

Dans le fichier du post #8 sélectionnez la cellule B15 (pas de validation) et créez un nouveau client.

Il faut arrêter le sablier (???) par la touche Echap !!!

Edit : et maintenant cela ne le fait plus... comprends rien...

Pour éviter ça j'ai modifié la macro :

Code:
Private Sub CommandButton1_Click()
If TextBox1 = "" Then TextBox1.SetFocus: Exit Sub
If Application.CountIf(Range("Liste"), TextBox1) Then _
  MsgBox "Ce client existe déjà...": TextBox1.SetFocus: Exit Sub
[F65536].End(xlUp)(2) = TextBox1
Range("Liste").Sort Key1:=[F7], Order1:=xlAscending, Header:=xlNo
Unload Me
ActiveCell.Activate 'au cas où la propriété TakeFocusOnClick du bouton Ajouter serait True
[COLOR="red"]On Error Resume Next[/COLOR]
If Intersect(ActiveCell, Range("B7:B65536")) Is Nothing _
[COLOR="Red"]Or ActiveCell.Validation.InCellDropdown = False[/COLOR] Then Exit Sub
SendKeys "%{DOWN}" 'pour afficher la liste
End Sub

A+
 

Pièces jointes

Dernière édition:
Re : compéter une liste déroulante cacher

Bonjour Le forum,
,
Merci à BOISGONTIER pour ca réponse et son site queje recommende pour tout les débutants.....

Voila,j'essai de modifier la macro en l'adaptant à mon fichier, mais sans succes. 😡
J'applique la macro proposée, celle ci est valable pour la colonne 2 (B) de la page avec la liste déroulante et pour la page contenant la liste complète la colonne 1 (A) ligne 1.

Est il possible de m'expliquer comment adapter cette macro pour, par exemple, une liste déroulante sur la collone 3 (C) de la page avec la liste déroulante et pour la page contenant la liste complète la colonne 4 (D) ligne 1.

Merci d'avance.


Bonjour,

Si l'élément frappé n'appartient pas à la liste, il est ajouté à la liste dans le tableur.

Code:
Private Sub Worksheet_Change(ByVal Target As Range)
 If Target.Column = 2 And Target.Count = 1 Then
    If Target <> "" Then
      If IsError(Application.Match(Target.Value, [maliste], 0)) Then
        If MsgBox("On ajoute?", vbYesNo) = vbYes Then
          [maliste].End(xlDown).Offset(1, 0) = Target.Value
          [maliste].Sort key1:=[maliste]
        Else
          Application.Undo
        End If
      End If
    End If
  End If
End Sub


Données/Validation

JB
 
- Navigue sans publicité
- Accède à Cléa, notre assistante IA experte Excel... et pas que...
- Profite de fonctionnalités exclusives
Ton soutien permet à Excel Downloads de rester 100% gratuit et de continuer à rassembler les passionnés d'Excel.
Je deviens Supporter XLD

Discussions similaires

Retour