Ceci est une page optimisée pour les mobiles. Cliquez sur ce texte pour afficher la vraie page.

XL 2016 Vider combobox après sélection

  • Initiateur de la discussion Initiateur de la discussion Mimi
  • 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 !

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

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.
 
Bonjour Mimi, sousou,

Pour toutes les feuilles corrigez la macro :
VB:
Private Sub ChoixOnglet_Change()
If ChoixOnglet.ListIndex = -1 Then Exit Sub
Dim m$
m = ChoixOnglet
ChoixOnglet = ""
Sheets(m).Select
End Sub
A+
 
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

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

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

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

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

Dernière édition:
- 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
38
Affichages
892
Réponses
15
Affichages
673
Les cookies sont requis pour utiliser ce site. Vous devez les accepter pour continuer à utiliser le site. En savoir plus…