Liste déroulante EXCEL

Bonjour a tous, je suis sincèrement désolée de solliciter votre aide mais je ne m'en sors pas (je suis actuellement à mon poste de travail donc c'est assez urgent).
Comment créer une liste déroulante à partir de libellés et quand je clique sur ce libellé dans la liste de choix je me retrouve qu'avec l'initial de ce libellé ???
C'est à dire : j'ai dans la liste "absence non justifiée" et quand je clique dessus je voudrais que ca me mette simplement ANJ mais qu'en qu'une seule colonne, je ne veux pas en creer 2.

Merci d'avance pour votre aide !

3 réponses

  1. Bonjour, ce n'est pas très clair ce que tu veux! J'ai compris que tu voulais créer une liste déroulante, c'est expliqué ici mais pas "j'ai dans la liste "absence non justifiée" et quand je clique dessus je voudrais que ca me mette simplement ANJ mais qu'en qu'une seule colonne, je ne veux pas en creer 2. "
    0
    1. Bonjour,
      Si j'ai bien compris ta demande tu souhaiterais avoir une validation de donnée (liste de déroulanle) avec les libellés entier et lorsque tu sélectionnes un libellé dans la liste déroulante ce soit les initiales qui soient renvoyées dans ta cellule... c'est bien ça?
      0
      1. Si j'avais bien compris ta demande voici un code qui te permettras d'avoir ce que tu souhaites.
        Tu crée un validation de donnée (liste déroulante) alimenté par tes libellés en entier dans la colonne où tu souhaites voir apparaitre les initiales puis dans l'interface Visual Basic :
        - colle le code ci-dessous directement dans la feuille qui contient ton tableau
        - mets a jour les coordonnées de la plage qui déclenche la macro "Set plage = ActiveSheet.Range("A1:A" & l)" >>> remplace les A par l'adresse de la colonne en question et le 1 par la première ligne de ton tableau

        La macro s’exécutera automatiquement dès lors qu'une cellule comprise dans la plage sus-nommée est modifiée et renverra les initiales du libellé sélectionné :

        Option Explicit
        Private Sub Worksheet_Change(ByVal Target As Range)
        Application.EnableEvents = False
        Application.ScreenUpdating = False

        Dim l As Integer
        Dim plage As Range

        l = Range("A65536").End(xlUp).Row 'la macro détermine la longueur du tableau en fonction de la dernière ligne non vide de la colonne A (à mettre en jour si besoin)
        Set plage = ActiveSheet.Range("A1:A" & l) 'remplace les "A" par l'adresse de la colonne où sont contenues les cellules où tu souhaites inscrire les initiales
        'si ton tableau ne commence pas à la ligne 1 remplace le "1" par la première ligne de ton tableau

        If Not Intersect(Target, plage) Is Nothing And Target.Cells.Count = 1 Then

        Dim i As Integer, lg As Integer
        Dim lib As String, initial As String
        lib = ActiveCell.Value
        lg = Len(ActiveCell.Value)

        '1er lettre de la chaine si lettre
        initial = Mid(lib, 1, 1)

        'analyse du reste de l'intitulé et extrait les caractères situés après les espaces
        For i = 2 To lg
        If Mid(lib, i, 1) = " " And Mid(lib, i + 1, 1) <> " " Then
        initial = initial & Mid(lib, i + 1, 1)
        End If
        Next i

        'reporte les initiales dans la cellule
        ActiveCell = UCase(initial)

        End If
        Application.EnableEvents = True

        End Sub


        En espérant avoir été suffisamment clair dans mon explication
        Jc
        0