XL 2019 Fonction si choix dans une liste alors afficher montant

  • Initiateur de la discussion Initiateur de la discussion phildav
  • Date de début Date de début

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 !

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

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

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

- 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

Réponses
2
Affichages
770
Retour