Private Sub Bouton_ComboChx_Click()
Dim ChxCombo As Byte
ChxCombo = ComboChx.ListIndex + 1
Select Case ChxCombo
Case 1 '"Pizza"
Actualiser_ComboChx 1, 1
Case 2 '"Banana"
Actualiser_ComboChx 2, 2
Case 3 '"Asado"
Actualiser_ComboChx 3, 3
Case 4 '"Malabar"
Actualiser_ComboChx 4, 4
Case 5 '"Calisson"
Actualiser_ComboChx 5, 5
End Select
End Sub
--------------------------------------------------------------------
Function RemplacerCaracteres$(LeTexte$, nouveau$, ParamArray supprimer() As Variant)
Dim i As Integer
For i = 0 To UBound(supprimer())
LeTexte = Replace(LeTexte, supprimer(i), nouveau) 'supprime les caractères spécifiés
Next i
RemplacerCaracteres = LeTexte
End Function
'
Function NbOc(chaine As String, Ch As String, Optional RC As Boolean = False) As Long
If RC Then
NbOc = (Len(chaine) - Len(Replace(chaine, Ch, "", , , 0))) / Len(Ch)
Else
NbOc = (Len(chaine) - Len(Replace(chaine, Ch, "", , , 1))) / Len(Ch)
End If
End Function
-------------------------------------------------------------------------------
Public compt(1 To 5) As Byte '5 compteurs : 1 compteur pour chacun des 5 items modifiables de la liste de la ComboBox "ComboChx"
----------------------------------------------------------------------------
Sub Compteurs(n As Byte, x As Byte)
'Administre tous les compteurs de la feuille
'- n : numéro du compteur
'- x : incrémentation
'job75
compt(n) = IIf(IsNumeric(Evaluate("Compteur" & n)), Evaluate("Compteur" & n), 0)
compt(n) = IIf(compt(n) < x, compt(n) + 1, 1)
ActiveWorkbook.Names.Add Name:="Compteur" & n, RefersTo:=compt(n), Visible:=False
End Sub
------------------------------------------------------------------------------------
Sub Actualiser_ComboChx(pos As Byte, Optional compteur As Byte = 0)
'Actualisation la liste de la ComboBox "ComboChx" après avoir sélectionné et validé l'item "Item" / "No Item"
'- pos : position de l'item sélectionné dans la liste de la ComboBox "ComboChx"
'- compteur : le numéro du compteur associé à l'un des items de la ComboBox "ComboChx" si on veut le modifier
'Magic_Doctor
Application.ScreenUpdating = False
Dim dico As Object, i As Byte, item$, listeoptions As Variant, c As Range
Set dico = CreateObject("Scripting.Dictionary")
listeoptions = Application.Transpose([Liste_ComboChx].Value) 'dresse la liste de tous les items mémorisés, après dernières modifications, de la ComboBox "ComboChx"
If compteur = 0 Then GoTo Fin 'l'item ne doit pas être modifié ("compteur" est donc omis en paramétrage)
Compteurs compteur, 2 'attribution du compteur ("compteur") correspondant à l'item choisi si on veut qu'il soit modifiable
item = listeoptions(pos) 'récupère, suivant sa position ("pos"), le nom de l'item dans la matrice
'********************************************************* Actualisation de la ComboBox "ComboChx" **********************************************************
For Each c In [Liste_ComboChx] '"Liste_ComboChx" est la plage nommée (occultée) sur la feuille qui reçoit tous les items de la liste de la ComboBox "ComboChx"
If item = c Then
If compt(compteur) = 1 Then
c = "No " & item
ElseIf compt(compteur) = 2 Then
If NbOc(c.Value, "No") > 0 Then c = RemplacerCaracteres(item, "", "No ")
End If
End If
Next
'************************************** Dresse la liste, dans la ComboBox "ComboChx", de tous les items modifiés ou pas *************************************
listeoptions = Application.Transpose([Liste_ComboChx].Value)
For i = 1 To UBound(listeoptions) 'rempli le dictionnaire ("dico") avec les éléments de la matrice "listeoptions"
dico(listeoptions(i)) = ""
Next
Sheets("Hoja1").ComboChx.List = dico.keys 'dresse la liste de la ComboBox "ComboChx" à partir du dictionnaire
Sheets("Hoja1").ComboChx.ListIndex = pos - 1 'sélection de l'item (qu'il soit "item" ou "No item") de la liste de la ComboBox "ComboChx"
Fin:
'*********************************** L'événement, après toute cette mise en scène, peut enfin commencer ************************************
'Événements pour le 1er item de la liste de la ComboBox "ComboChx"
If pos = 1 Then ActiveSheet.Shapes("Pizza").Visible = IIf(compt(compteur) = 1, True, False) 'l'image apparaît ou pas
'Événements pour le 2ème item de la liste de la ComboBox "ComboChx"
If pos = 2 Then ActiveSheet.Shapes("Banana").Visible = IIf(compt(compteur) = 1, True, False) 'l'image apparaît ou pas
'Événements pour le 3ème item de la liste de la ComboBox "ComboChx"
If pos = 3 Then ActiveSheet.Shapes("Asado").Visible = IIf(compt(compteur) = 1, True, False) 'l'image apparaît ou pas
'Événements pour le 4ème item de la liste de la ComboBox "ComboChx"
If pos = 4 Then ActiveSheet.Shapes("Malabar").Visible = IIf(compt(compteur) = 1, True, False) 'l'image apparaît ou pas
'Événements pour le 5ème item de la liste de la ComboBox "ComboChx"
If pos = 5 Then ActiveSheet.Shapes("Calissons").Visible = IIf(compt(compteur) = 1, True, False) 'l'image apparaît ou pas
[C2500].Select: Application.ScreenUpdating = True
End Sub