XL 2019 Fonction si choix dans une liste alors afficher montant

phildav

XLDnaute Nouveau
Bonjour,
je cherche une formule qui me permette de sélectionner un ou plusieurs éléments dans une liste et d'afficher dans une cellule, un montant.
Exemple : si la cellule D6 contient une liste de choix (WPML, Duplicator, Form7...) et que je sélectionne Duplicator, alors en F6 j'affiche un montant de 20€, sinon si je choisi Duplicator et WPML alors j'affiche 50€ (20 + 30). En fait, j'ai un montant pour chaque élément de la liste et en F6, s'affiche le montant total des éléments sélectionnés de la liste.
Quelqu'un peut-il m'aider ?
Un grand merci d'avance à ceux ou celles qui me répondront.
 

Pièces jointes

  • Tarifs des services.xlsx
    105.9 KB · Affichages: 0

JHA

XLDnaute Barbatruc
Bonjour à tous,

Avec ce que je comprends, tu peux utiliser un segment ou un TCD et faire un choix multiple si besoin.

JHA
 

Pièces jointes

  • Classeur Phildav.xlsx
    14.2 KB · Affichages: 3
  • Classeur Phildav Rev1.xlsx
    17.5 KB · Affichages: 4
Dernière édition:

job75

XLDnaute Barbatruc
Bonjour phildav, R@chid, JHA,

Ou avec une ListBox et ce code :
VB:
Private Sub ListBox1_Change()
Dim i&, x$, v
With ListBox1
    For i = 0 To .ListCount - 1
        If .Selected(i) Then
            x = x & vbLf & .List(i, 0)
            v = v + .List(i, 1)
        End If
    Next
End With
[D6] = Mid(x, 2)
[F6] = v
End Sub
A+
 

Pièces jointes

  • Liste(1).xlsm
    22 KB · Affichages: 4

job75

XLDnaute Barbatruc
Bonjour phildav, JHA,

Avec 15 segments les uns à côté des autres ce n'est pas très ergonomique.

Voyez le fichier .xlsm joint avec 2 ListBoxes (ActiveX).

Mais le VBA est en effet assez compliqué, dans Module1 :
VB:
Public flag As Boolean 'mémorise la variable
Dans le code de la 1ère feuille :
VB:
Private Sub ListBox1_Change()
If flag Then Exit Sub 'variable Public dans Module1
Dim i&, x$, v
With ListBox1
    For i = 0 To .ListCount - 1
        If .Selected(i) Then
            x = x & ", " & .List(i)
            v = v + Application.Index(Evaluate(.ListFillRange).Columns(2), i + 1)
        End If
    Next
End With
[D6] = Mid(x, 3)
[F6] = v
End Sub

Private Sub ListBox2_Change()
If flag Then Exit Sub 'variable Public dans Module1
Dim i&, x$, v
With ListBox2
    For i = 0 To .ListCount - 1
        If .Selected(i) Then
            x = x & ", " & .List(i)
            v = v + Application.Index(Evaluate(.ListFillRange).Columns(2), i + 1)
        End If
    Next
End With
[D7] = Mid(x, 3)
[F7] = v
End Sub
Et dans ThisWorkbook pour réinitialiser :
VB:
Private Sub Workbook_Open()
Dim i&
flag = True 'variable Public dans Module1
Application.ScreenUpdating = False
Feuil1.Activate
With Feuil1.ListBox1
    For i = 0 To .ListCount - 1
        .Selected(i) = InStr(Range("D6"), .List(i)) > 0
    Next
    .Left = Range("D6").Left
    .Top = Range("D6").Top
    .Width = Range("D6").Width
    .Height = Range("D6").Height
End With
With Feuil1.ListBox2
    For i = 0 To .ListCount - 1
        .Selected(i) = InStr(Range("D7"), .List(i)) > 0
    Next
    .Left = Range("D7").Left
    .Top = Range("D7").Top
    .Width = Range("D7").Width
    .Height = Range("D7").Height
End With
flag = False
End Sub
A+
 

Pièces jointes

  • Tarifs des services(1).xlsm
    123.6 KB · Affichages: 1

Discussions similaires

Statistiques des forums

Discussions
315 091
Messages
2 116 113
Membres
112 662
dernier inscrit
lou75