Bonjour à tous,
J’ai un projet informatique à réaliser pour mon stage, je dois créer une application pour suivre des rendez-vous. Je vous mets des captures d’écrans de mon fichier d’exemple :
Comme vous pouvez le voir, j’ai créé une zone de liste sur ma colonne B de ma feuille FeuilCom car je voulais avoir la possibilité de sélectionner plusieurs choix. Pour qu’elle fonctionne j’ai utilisé ces deux codes :
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30
| Option Explicit
Dim i2 As Long
Dim sTemp2 As String
Dim a2
Dim bTest2 As Boolean
Dim vrech2 As Range
Private Sub ListBoxCom_Change()
Dim FeuilCom As Worksheet
If bTest2 Then
Exit Sub
End If
sTemp2 = ""
' Si l'item est coché nous viendront l'afficher dans la cellule
For i2 = 0 To Me.ListBoxCom.ListCount - 1
If Me.ListBoxCom.Selected(i2) Then
sTemp2 = sTemp2 & Me.ListBoxCom.List(i2) & " - "
End If
Next
ActiveCell = sTemp2
End Sub |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40
| Private Sub Worksheet_SelectionChange(ByVal Target As Range)
'Liste déroulante à choix multiples dans la colonnes des moyens de commercialisation
If ActiveCell.Column = 2 Then
'Propriétés de la liste déroulante
With Me.ListBoxCom
.MultiSelect = fmMultiSelectMulti
.ListStyle = fmListStyleOption
.Height = 100
.Width = 170
.Top = ActiveCell.Top
.Left = ActiveCell.Offset(0, 1).Left
.Visible = True
End With
'Où sont les options à placer dans la liste
Me.ListBoxCom.List = Worksheets("FeuilCom").Range("A1:E5").Value
'Les options doivent restées cochées dans la liste
a2 = VBA.Split(ActiveCell, " - ")
If UBound(a2) >= 0 Then
For i2 = 0 To Me.ListBoxCom.ListCount - 1
If Not IsError(Application.Match(Me.ListBoxCom.List(i2), a2, 0)) Then
bTest2 = True
Me.ListBoxCom.Selected(i2) = True
bTest2 = False
End If
Next
End If
'Si nous ne sommes pas placés dans la colonne 2 la ListBox n'est pas visible
Else
Me.ListBoxCom.Visible = False
End If
End Sub |
Mon souci est que je voudrais pouvoir afficher des alertes dans la colonne D en fonction des items sélectionnés dans ma liste. Mes alertes se trouvent sur ma feuille FeuilCom.
J’ai essayé de faire des formules avec des SI et des RECHERCHEV imbriqués mais je n’arrive pas à les faire fonctionner quand je sélectionne plus d’un item car je pense qu’il y aurait trop de combinaisons possibles. Alors je me suis résolue à essayer avec VBA mais je ne maîtrise pas trop le codage.
J’ai essayé deux techniques différentes :
- Avec un Set vrech et la seconde ligne que je place dans mon If après ma ligne "sTemp2 = sTemp2 & Me.ListBoxCom.List(i2) & " - "" du code Private Sub ListBoxCom_Change()
Mais ça ne fonctionne pas.
Set vrech2 = Sheets("FeuilCom").Columns("A:a").Find(Me.ListBoxCom.Value, LookIn:=xlValues)
Cells(4, 2).Value = vrech2.Offset(0, 1).Value
- ou alors de cette manière que je place au même endroit que la technique précédente
Cells(4, 2).Value = Application.WorksheetFunction.VLookup(Range("Me.ListBoxCom.Selected(i2)").Value, FeuilCom.Range("A2:E6"), 2, False)
Mais ma ligne est surlignée est <La méthode ‘Range’ de l’objet ‘Worksheet’ a échoué>
Je dois surement avoir un souci de syntaxe ou alors je place pas mon code au bon endroit ou carrément ma méthode n'est pas bonne mais est-ce que quelqu’un peut m’aider à comprendre comment je pourrai parvenir à mon résultat, s’il vous plait ?
N’hésitez pas à me dire si mes explications ne sont pas assez claires ou si vous souhaitez que je vous partage mon fichier exemple.
Merci d’avance et bonne journée
Partager