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 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95
| Option Explicit
Dim interne As Boolean
Sub LbxObservations_Change()
Dim ch As String, i As Long, sep As String
'==================================
'interne ??
'==================================
If Not interne Then
ch = ""
sep = [separateur]
For i = 0 To LbxObservations.ListCount - 1
If LbxObservations.Selected(i) = True Then ch = ch & sep & LbxObservations.List(i)
Next i
ch = Mid(ch, Len(sep) + 1)
ActiveCell = ch
End If
End Sub
Sub LbxObservations_MouseUp(ByVal Button As Integer, ByVal Shift As Integer, ByVal X As Single, ByVal Y As Single)
' un clic gauche désélectionne ou sélectionne l'ensemble de la liste
Dim i As Long, cpt As Long, state As Boolean
'Dim LbxObservations
If Button = xlSecondaryButton Then ' si clic-droit
' nb sélections
For i = 0 To LbxObservations.ListCount - 1
If LbxObservations.Selected(i) Then cpt = cpt + 1
Next i
' si aucune sélection, sélectionner tout
' sinon désélectionner tout
If cpt = 0 Then state = True Else state = False
interne = True ' palliatif, EnableEvents ne marche pas
For i = 0 To LbxObservations.ListCount - 1
LbxObservations.Selected(i) = state
Next i
interne = False
End If
LbxObservations_Change
End Sub
Sub Worksheet_SelectionChange(ByVal Target As Range)
Dim ch As String, ch2 As String, pos As Long, i As Long
Dim nomListe, numListe As Long, topIndex As Boolean
Dim plage
Dim LbxObservations
' plage avec sélection multiple sur cette feuille
plage = Array("D3:D6")
'initialisation du nom de la liste "observaions" de la feuille "Glossaire" (en liaison avec la plage définie au-dessus)
nomListe = Array("observations")
' plage concernée ?
'===================================================
'le UBound(plage) reste toujours à 0
'Normalement il devrait être = 4 ??
'Lorsque je redéfinis la variable "plage" de cette façon : plage = ActiveSheet.Range("D3:D6"), le UBound (plage) passe bien à 4, mais ça bugue quand même après
'===================================================
For numListe = 0 To UBound(plage)
If Not Intersect(Target, Range(plage(numListe))) Is Nothing Then Exit For
Next numListe
If numListe <= UBound(plage) Then ' si plage de liste existant
' initialiser listbox
'===============================================
'numListe est à 0 = bug sur la ligne suivante
'cause : UBound = 0
'===============================================
LbxObservations.ListFillRange = "Glossaire!" & Worksheets("Glossaire").Range(nomListe(numListe)).Address
LbxObservations.Top = Target.Offset(0, 1).Top
LbxObservations.Left = Target.Offset(0, 1).Left
interne = True ' palliatif, EnableEvents ne marche pas
ch = ActiveCell
ch2 = [separateur] & ch & [separateur]
topIndex = False
' sélectionner selon contenu cellule
For i = 0 To LbxObservations.ListCount - 1
If InStr(ch2, [separateur] & LbxObservations.List(i) & [separateur]) > 0 Then
' l'item a été trouvé dans la cellule
LbxObservations.Selected(i) = True
If Not topIndex Then
LbxObservations.topIndex = i ' le 1er sélectionné doit être visible dans la textbox
topIndex = True
End If
End If
Next i
interne = False
' afficher textbox
LbxObservations.Visible = True
Else
' ne plus afficher la textbox
LbxObservations.Visible = False
End If
End Sub
Sub reinit()
Application.EnableEvents = True
End Sub |
Partager