XL 2016 Vider combobox après sélection

Mimi

XLDnaute Occasionnel
Bonjour à tous,
Dans mon classeur il y a 7 feuilles, sur chaque feuille il y a une combobox qui me permet de naviguer dans le classeur, jusque là je n'ai pas de problème.
Lorsque je sélectionne un nom dans la combo, je change de feuille la non plus pas de problème.
Le soucis c'est quand je change de feuille la combo ne se vide pas.
D'ou ma question comment vider la combo quand je change de feuille ??
D'avance merci
Mimi
 

Pièces jointes

  • Essai combobox.xlsm
    56.2 KB · Affichages: 12

Mimi

XLDnaute Occasionnel
Bonjour,
Quand je change de feuille et que je reviens sur la page d'accueil par exemple il y a encore du texte dans la combo, ce qui m'empêche de sélectionné à nouveau la feuille semaine par exemple
D'ou vider la combo de la précédente feuille quand je change de feuille.
 

herve62

XLDnaute Barbatruc
Supporter XLD
Bonjour
Je suis dessus aussi , j'ai pigé mais on dirait que c'est loin d'être évident ..... à cause du Change , car si tu effaces le change s'active
il me semble que j'ai réussi à contourner , j'ai fait pour les 4 1ere feuilles
 

Pièces jointes

  • Clear_combobox.xlsm
    62 KB · Affichages: 5

job75

XLDnaute Barbatruc
Salut herve62,

Dans le fichier joint on utilise un module de classe, le code dans ThisWorkbook :
Code:
Dim CB() As New Classe1

Private Sub Workbook_Open()
Dim i%, temp()
For i = 1 To Sheets.Count
    ReDim Preserve temp(1 To i)
    temp(i) = Sheets(i).Name
Next
For i = 1 To Sheets.Count
    Sheets(i).ChoixOnglet.List = temp
    ReDim Preserve CB(i)
    Set CB(i).CB = Sheets(i).ChoixOnglet
Next
End Sub

Private Sub Workbook_SheetActivate(ByVal Sh As Object)
Sh.[A1].Select
End Sub
Et dans le module de classe :
VB:
Public WithEvents CB As MSForms.ComboBox

Private Sub CB_Change()
If CB.ListIndex = -1 Then Exit Sub
Dim m$
m = CB
CB = ""
Sheets(m).Select
End Sub
Il n'y a plus rien dans le code des feuilles.
 

Pièces jointes

  • ComboBox Module de classe(1).xlsm
    50.1 KB · Affichages: 11

sousou

XLDnaute Barbatruc
RE
Je te propose cette solution, plutôt que de vider la box, y mettre le nom de la feuille active.
De plus je me suis permis de remodeler ta façon de faire afin que tu puisses modifier plus facilement l'évolution de ton programme ou ajouter des feuilles, j'ai mis les action dans le module, chaque feuille faisant appel à ces actions en passant la feuille en paramétre.


Salut à tous
 

Pièces jointes

  • combobox-1.xlsm
    55.3 KB · Affichages: 8

job75

XLDnaute Barbatruc
Bonjour Mimi, le forum,

Prenez ce fichier (3) qui va mieux car la liste est mise à jours par l'activation de la feuille :
VB:
Dim CB() As New Classe1

Private Sub Workbook_Open()
Dim i%
For i = 1 To Sheets.Count
    ReDim Preserve CB(i)
    Set CB(i).CB = Sheets(i).ChoixOnglet
Next
Workbook_SheetActivate ActiveSheet 'lance la macro
End Sub

Private Sub Workbook_SheetActivate(ByVal Sh As Object)
Dim temp(), i%
Sh.[A1].Select
ReDim temp(1 To Sheets.Count)
For i = 1 To UBound(temp)
    temp(i) = Sheets(i).Name
Next
ActiveSheet.ChoixOnglet.List = temp 'MAJ de la liste
ActiveSheet.ChoixOnglet = Sh.Name
End Sub
VB:
Public WithEvents CB As MSForms.ComboBox

Private Sub CB_Change()
Dim m$
m = CB
If CB.ListIndex > -1 Then Sheets(m).Select
End Sub
Bonne journée.
 

Pièces jointes

  • ComboBox Module de classe(3).xlsm
    66 KB · Affichages: 12

patricktoulon

XLDnaute Barbatruc
Bonjour a tous
allez juste avant de partir au boulot
sans module classe?
il suffit t'attribuer l'events au combobox de l'activesheet dans l’événement sheetactivate

ca donne ceci dans le module thisworkbook
VB:
Option Explicit
Public WithEvents ComB As MSForms.ComboBox
Private Sub Workbook_Open()
    Dim i%, Liste
    Liste = listeSheet
    For i = 1 To Sheets.Count
        Sheets(i).ChoixOnglet.List = Liste
    Next
    Workbook_SheetActivate ActiveSheet    'lance la macro
End Sub

Private Sub Workbook_SheetActivate(ByVal Sh As Object)
    Sh.[A1].Select
     ActiveSheet.ChoixOnglet = Sh.Name
Set ComB = ActiveSheet.ChoixOnglet
End Sub
Public Sub comb_Change()
      Sheets(ComB.Value).Activate
End Sub

Public Function listeSheet()
    Dim i&
    ReDim tbl(1 To Sheets.Count)
    For i = 1 To Sheets.Count
        tbl(i) = Sheets(i).Name
    Next
    listeSheet = tbl
End Function
et voila
;)
 

Pièces jointes

  • gestion multi combo multisheet.xlsm
    45.7 KB · Affichages: 14
Dernière édition:

Discussions similaires

Statistiques des forums

Discussions
312 047
Messages
2 084 862
Membres
102 688
dernier inscrit
Biquet78