XL 2013 Liste déroulante comprenant une colonne d'information

Rhox

XLDnaute Nouveau
Bonjour à tous,

Je suis un petit nouveau avec un petit niveau sur Excel (du moins comparé au niveau de question que je vois sur le forum ^^ ) donc excusez moi d'avance si je manque de technique ou de précision.

J'aimerais savoir si il est possible dans une liste déroulante de faire apparaître une colonne d'information en plus de la donnée de la liste.
Je m'explique :
Je suis en train de créer un fichier qui me permettra d'importer directement certaines écritures comptables sur notre logiciel de comptabilité.
Dans le fichier joint (feuille "fichier d'import" colonne "général") je dois faire apparaître un compte comptable (7 chiffres) que je vais chercher dans ma feuille "database des comptes" avec une liste déroulante.

Mon problème est que je ne connais pas les 1855 comptes par cœur... donc quand je fais apparaître ma liste avec tous mes comptes... je risque d'être un peu perdu et de perdre beaucoup de temps :)
Donc j'aimerais savoir si il est possible de faire apparaître dans ma liste : le compte + le libellé, mais que seul le compte apparaisse dans ma colonne "général" quand je clique sur ce que je souhaite.

Bonus : Si en plus vous avez la solution en conservant ma formule (Decaler/Equiv qui se trouve en source dans ma validation des données ça serait génial !)
 

Pièces jointes

  • fichier importation ecriture bilan - version forum.xlsx
    68.3 KB · Affichages: 7

BOISGONTIER

XLDnaute Barbatruc
Repose en paix
Bonjour,

-Solution sans VBA
-Avec saisie intuitive (frapper les premiers caractères du compte ou du libellé)

Boisgontier
 

Pièces jointes

  • Copie de fichier importation ecriture bilan - version forum.xlsm
    86.6 KB · Affichages: 8
  • Copie de fichier importation ecriture bilan - version forum-1.xlsx
    69.4 KB · Affichages: 6
Dernière édition:

BOISGONTIER

XLDnaute Barbatruc
Repose en paix

Pour créer ComboBox:

-Onglet Développeur

-La propriété MatchEntry du ComboBox doit être positionnée à frmMatchEntryNone

-Clic-droit sur le nom de la feuille
-Visualiser le code

VB:
Dim f, a(), choix1()
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
  If Not Intersect([C2:C1000], Target) Is Nothing And Target.Count = 1 Then
    Set f = Sheets(1)
    choix1 = f.Range("a2:b" & f.[a65000].End(xlUp).Row).Value
    Tri choix1, 1, LBound(choix1), UBound(choix1)
    Me.ComboBox1.List = choix1
    Me.ComboBox1.Height = Target.Height + 3
    Me.ComboBox1.Width = Target.Width
    Me.ComboBox1.Top = Target.Top
    Me.ComboBox1.Left = Target.Left
    Me.ComboBox1 = Target
    Me.ComboBox1.Visible = True
    Me.ComboBox1.Activate
  Else
    Me.ComboBox1.Visible = False
  End If
End Sub

Private Sub ComboBox1_Change()
   If Me.ComboBox1.ListIndex = -1 Then  'And IsError(Application.Match(Me.ComboBox1, Application.Index(choix1, , 1), 0)) Then
     Dim b()
     clé = UCase(Me.ComboBox1) & "*"
     n = 0
     For i = LBound(choix1) To UBound(choix1)
       If UCase(choix1(i, 1)) Like clé Or UCase(choix1(i, 2)) Like clé Then
         n = n + 1: ReDim Preserve b(1 To 2, 1 To n)
         b(1, n) = choix1(i, 1): b(2, n) = choix1(i, 2)
       End If
      Next i
      If n > 0 Then
        ReDim Preserve b(1 To 2, 1 To n)
        Me.ComboBox1.Column = b
      End If
      Me.ComboBox1.DropDown
    Else
       ActiveCell.Value = Me.ComboBox1
    End If
End Sub

Private Sub ComboBox1_DblClick(ByVal Cancel As MSForms.ReturnBoolean)
  choix1 = f.Range("d2:e" & f.[d65000].End(xlUp).Row).Value
  'Tri choix1, 1, LBound(choix1), UBound(choix1)
  Me.ComboBox1.DropDown
End Sub

Private Sub Combobox1_KeyDown(ByVal KeyCode As MSForms.ReturnInteger, ByVal Shift As Integer)
  If KeyCode = 13 Then ActiveCell = Me.ComboBox1.List(0): ActiveCell.Offset(, 1) = ComboBox1.List(0, 1): Me.ComboBox1.Visible = False
End Sub

Sub Tri(a(), ColTri, gauc, droi) ' Quick sort
  ref = a((gauc + droi) \ 2, ColTri)
  g = gauc: d = droi
  Do
    Do While a(g, ColTri) < ref: g = g + 1: Loop
    Do While ref < a(d, ColTri): d = d - 1: Loop
    If g <= d Then
       For k = LBound(a, 2) To UBound(a, 2)
         temp = a(g, k): a(g, k) = a(d, k): a(d, k) = temp
       Next k
       g = g + 1: d = d - 1
    End If
  Loop While g <= d
  If g < droi Then Call Tri(a, ColTri, g, droi)
  If gauc < d Then Call Tri(a, ColTri, gauc, d)
End Sub

Boisgontier
 

Victor21

XLDnaute Barbatruc
Bonjour Rhox, @BOISGONTIER

Après avoir ajouté en colonne A les données de la colonne B avec votre code
VB:
Sub AjouteCommentaire()
  Selection.ClearComments
  For Each c In Selection
    c.AddComment CStr(c.Offset(0, 1).Value)
    c.Comment.Shape.TextFrame.AutoSize = True
    c.Comment.Shape.OLEFormat.Object.Font.Size = 8
  Next c
End Sub
j'ai tenté sans succès de récupérer ces commentaires avec cet autre code :
VB:
Private Sub Worksheet_Change(ByVal Target As Range)
 If Target.Column = 3 Then
   Application.EnableEvents = False
   Target.ClearComments
   [listecompte].Find(Target, LookAt:=xlWhole).Copy
   Target.PasteSpecial Paste:=xlPasteComments
   Application.EnableEvents = True
  End If
End Sub
Mais je ne vois pas où se situe l'erreur...
 

Discussions similaires

Réponses
12
Affichages
254
Réponses
21
Affichages
1 K

Statistiques des forums

Discussions
311 733
Messages
2 082 009
Membres
101 865
dernier inscrit
MLL