Insertion automatique de mot dans liste déroulante

Carlettia

XLDnaute Nouveau
Bonjour à tous,

J'essaye de réaliser cette fonction depuis plusieurs jours mais je n'y arrive vraiment pas.

Je réalise une outil excel permettant de sélectionner un verbe d'action correspondant à un domaine technique particulier ( mécanique, programmation, électronique etc...). La liste de verbes d'actions apparait que lorsque le domaine technique est sélectionné ( liste déroulante en cascade).
Alors j'ai une liste déroulante(possédant plusieurs verbes d'actions) dont la liste est posée sur une plage pour que quand je rentre un verbe d'action, la liste se mete automatiquement à jour.
Maintenant ce que j'aimerais faire et vous me direz si c'est possible ou non, c'est lorsque je clique sur ma liste déroulante et que le verbe souhaité n'y est pas, que je puisse directement taper le mot dans la zone de la liste déroulabte et qu'il s'ajoute à ma liste automatique. Donc lorsque je recliquerais sur ma liste déroulante il devrait aparaitre.


Je vous remercie par avance si vous m'apportez une petite réponse sympas.

Merci en tout cas.

Cordialeement,
 

Carlettia

XLDnaute Nouveau
Re : Insertion automatique de mot dans liste déroulante

Bonjour,

Avec un petit fichier exemple joint, ce serait plus facile de comprendre ta demande.

mikachu

Voici le fichier exemple.
Dans le feuillet planing il y a la liste lexique qui apparait en fonction de la liste Type.
Il faudrait donc que quand j'écris un mot dans la liste lexique et que ce mot n'existe pas, il s'ajoute automatiquement dans le feuilelt Liste à l'emplacement de la liste correspondante et par ordre alphabétique.

Merci en tout cas de votre intérêt!

PS: apparement ce code le permet mais où l'insérer?

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, [Liste], 0)) Then
If MsgBox("On ajoute?", vbYesNo) = vbYes Then
[Liste].End(xlDown).Offset(1, 0) = Target.Value
Sheets("Liste").[Liste].Sort key1:=Sheets("Liste").Range("A2")
Else
Application.Undo
End If
End If
End If
End If
End Sub

Cordialement,
 

Pièces jointes

  • proto-V-final.xls
    62 KB · Affichages: 44
Dernière édition:

BOISGONTIER

XLDnaute Barbatruc
Repose en paix
Re : Insertion automatique de mot dans liste déroulante

Voir PJ

Ajout dynamique d'items

choix1 =DECALER(Liste!$E$1;;;;NBVAL(Liste!$E$1:$Z$1))
choix2 =Liste!$E:$E

Code:
Private Sub Worksheet_Change(ByVal Target As Range)
  Set f = Sheets("liste")
  If Not Intersect([E2:E100], Target) Is Nothing And Target.Count = 1 Then
    If Target <> "" Then
        If IsError(Application.Match(Target.Value, [choix1], 0)) Then
          If MsgBox("On ajoute?", vbYesNo) = vbYes Then
           [choix1].End(xlToRight).Offset(0, 1) = Target.Value
           c = f.Range("choix2").Column
           n = Application.CountA([choix1])
           f.Range(f.Cells(1, c), f.Cells(10, c + n)).Sort _
             Key1:=f.Cells(1, c), Order1:=xlAscending, Header:=xlNo, _
                Orientation:=xlLeftToRight
          Else
           Application.EnableEvents = False
           Application.Undo
           Application.EnableEvents = True
          End If
        Else
          Target.Offset(0, 1) = f.Range("choix2")(1).Offset(1, Application.Match(Target, [choix1], 0) - 1)
        End If
     End If
  End If
  If Not Intersect([F2:F100], Target) Is Nothing And Target.Count = 1 Then
     If Target <> "" Then
        d = Application.Match(Target.Offset(0, -1), [choix1], 0) - 1
        If IsError(Application.Match(Target.Value, [choix2].Offset(0, d), 0)) Then
          If MsgBox("On ajoute?", vbYesNo) = vbYes Then
           n = Application.CountA([choix2].Offset(0, d))
           c = f.Range("choix2").Column
           f.Cells(n + 1, c + d) = Target.Value
           If n > 1 Then
             f.Range(f.Cells(2, c + d), f.Cells(n + 1, c + d)).Sort _
              Key1:=f.Cells(2, c + d), Order1:=xlAscending, _
                 Orientation:=xlTopToBottom, Header:=xlNo
           End If
          Else
           On Error Resume Next
           Application.EnableEvents = False
           Application.Undo
           Application.EnableEvents = True
          End If
       End If
    End If
  End If
End Sub


JB
 

Pièces jointes

  • Copie de proto-V-final.xls
    79.5 KB · Affichages: 43
Dernière édition:

Carlettia

XLDnaute Nouveau
Re : Insertion automatique de mot dans liste déroulante

Bonjour à tous!

Je vous remercie mais maintenant lorsque je rentre un mot inconnu et quon me demande de l'ajouter , il intégre le titre de mes listes (électrotechnique, mécanique etc...) dans la liste et donc le nom de ma liste se modifie et je ne peux donc plus les sélectionner dans le feuillet planing car elles n'existent plus. J'aimerais donc que ça fasse excatement ce que ça fait aujourd'hui sans pour autant modifier la premiere cellule de chaque liste et que donc ça ne modifie en rien mes listes à part le fait qu'elles s'agrandissent.
J'ai essaye de modifier dans la formule choix1 mais rien ne fonctionne.
faut-il que je change mes listes, faut-il que je change la formule choix 1?

Cordialement,

Je vous suis vriament reconnaissant de l'aide que vous apportezà un débutant
 

Carlettia

XLDnaute Nouveau
Re : Insertion automatique de mot dans liste déroulante

Je note aussi que quand je rentre un mot dans la liste Mécanique, il s'y ajoute normalement, mais ensuite la liste mécanique fait réfèrence à une autre liste.

Il doit pas y avoir grand chose mais comme j'ai du mal à comprendre totalement le code vba que vous avez poster, c'est compliquer de pouvoir déboguer tout ça...

Je vous remercie par avance, vraiment.
 

Discussions similaires

Statistiques des forums

Discussions
312 155
Messages
2 085 811
Membres
102 986
dernier inscrit
nonoblez