Remplir des ComboBox lors de l'ouverture d'un classeur

Magic_Doctor

XLDnaute Barbatruc
Bonjour,

Dans chaque feuille (sauf les 3 dernières) d'un classeur il y a une ComboBox. Chacune de ces ComboBox porte le même nom, à savoir : "ComboGoToSheet".
Dans chacune de ces CombBox doit apparaître une liste d'items qui sont les noms des autres feuilles du classeur, sauf ceux de la feuille active et des 3 dernières feuilles du classeur.
Quand on clique sur l'un quelconque de ces items on est dirigé vers la feuille sélectionnée.
Je voudrais remplir les listes de ces ComboBox lors de l'ouverture du classeur.
M'inspirant d'une routine de BOISGONTIER pour un USF, j'ai tenté, mais sans succés, de la modifier ainsi pour toutes les ComboBox en question :
VB:
Private Sub Workbook_Open()
    Application.ScreenUpdating = False
    Dim i As Byte, combo As OLEObject, sh As Worksheet
    For i = 1 To Sheets.Count - 3
        Set combo = Sheets(i).OLEObjects("ComboGoToSheet")
        Sheets(i).combo.AddItem "---  ALLER À  ---"
        For Each sh In ActiveWorkbook.Sheets
            If sh.Name <> ActiveSheet.Name And sh.Index <= Sheets.Count - 3 Then Sheets(i).combo.AddItem sh.Name
        Next sh
        Sheets(i).combo.ListIndex = 0
    Next
    Application.ScreenUpdating = True
End Sub
Merci d'avance pour toute aide.
 

Pièces jointes

  • FormListesOnglets.xlsm
    58.9 KB · Affichages: 68
Dernière édition:

BOISGONTIER

XLDnaute Barbatruc
Repose en paix
Re : Remplir des ComboBox lors de l'ouverture d'un classeur

Bonjour,

Code:
Private Sub Workbook_Open()
    Application.ScreenUpdating = False
    Dim i As Byte, sh As Worksheet
    For i = 1 To Sheets.Count - 3
        Sheets(i).ComboGoToSheet.AddItem "---  ALLER À  ---"
        For Each sh In ActiveWorkbook.Sheets
          If sh.Name <> Sheets(i).Name And sh.Index <= Sheets.Count - 3 Then Sheets(i).ComboGoToSheet.AddItem sh.Name
        Next sh
        Sheets(i).ComboGoToSheet.ListIndex = 0
    Next
    Application.ScreenUpdating = True
End Sub

JB
 

Pièces jointes

  • Copie de FormListesOnglets.xls
    90 KB · Affichages: 65
  • Copie de FormListesOnglets.xls
    90 KB · Affichages: 68
  • Copie de FormListesOnglets.xls
    90 KB · Affichages: 75

phlaurent55

Nous a quittés en 2020
Repose en paix
Re : Remplir des ComboBox lors de l'ouverture d'un classeur

Bonjour Magic,

avec ceci:
Code:
Private Sub Workbook_Open()
    Application.ScreenUpdating = False
    Dim i As Byte, sh As Worksheet
    For i = 1 To Sheets.Count - 3
        Sheets(i).ComboGoToSheet.AddItem "---  ALLER À  ---"
        For Each sh In ActiveWorkbook.Sheets
            If sh.Name <> ActiveSheet.Name And sh.Index <= Sheets.Count - 3 Then Sheets(i).ComboGoToSheet.AddItem sh.Name
        Next sh
        Sheets(i).ComboGoToSheet.ListIndex = 0
    Next
    Application.ScreenUpdating = True
End Sub

à+
Philippe

Edit: Bonjour Jacques 100% identique !
 

Magic_Doctor

XLDnaute Barbatruc
Re : Remplir des ComboBox lors de l'ouverture d'un classeur

Re,

J'en profite pour poser une question concernant une sentence de BOISGONTIER qui m'intrigue.
Dans la routine :
VB:
Private Sub ComboGoToSheet_Click()
'BOISGONTIER
    If ComboGoToSheet.ListIndex > 0 Then
        Sheets(CStr(ComboGoToSheet.Value)).Select
        Menu
        AppActivate ("Microsoft Excel")
    End If
End Sub
Que signifie et à quoi sert :
VB:
AppActivate ("Microsoft Excel")
qui, du reste, ne semble pas indispensable ?

Merci pour éclairer ma lanterne.
 

Magic_Doctor

XLDnaute Barbatruc
Re : Remplir des ComboBox lors de l'ouverture d'un classeur

ReBonsoir,

Je viens de constater un truc bizarre, en tout cas chez moi.
Contre toute attente, quand je choisis une feuille on accède bien toujours à celle-ci, mais curieusement, et pas toujours, dans la liste d'items de sa ComboBox figure son nom (alors qu'il ne devrait jamais apparaître) au détriment d'un nom de feuille qui devrait lui figurer.
Comment remédier à cette curiosité ?
 

BOISGONTIER

XLDnaute Barbatruc
Repose en paix
Re : Remplir des ComboBox lors de l'ouverture d'un classeur

Voir PJ

Si le focus est sur un formulaire, AppActivate "Microsoft Excel" donne le focus à la feuille de calcul.

Code:
Option Explicit
Private Sub ComboGoToSheet_Click()
    If ComboGoToSheet.ListIndex > 0 Then Sheets(CStr(ComboGoToSheet.Value)).Select
End Sub

>Je viens de constater un truc bizarre, en tout cas chez moi.
Contre toute attente, quand je choisis une feuille on accède bien toujours à celle-ci, mais curieusement, et pas toujours, dans la liste d'items de sa ComboBox figure son nom (alors qu'il ne devrait jamais apparaître) au détriment d'un nom de feuille qui devrait lui figurer.
Comment remédier à cette curiosité ?


Je ne constate pas cette curiosité sur le classeur que j'ai posté.

Private Sub Workbook_Open()
Application.ScreenUpdating = False
Dim i As Byte, sh As Worksheet
For i = 1 To Sheets.Count - 3
Sheets(i).ComboGoToSheet.AddItem "--- ALLER À ---"
For Each sh In ActiveWorkbook.Sheets
If sh.Name <> Sheets(i).Name And sh.Index <= Sheets.Count - 3 Then Sheets(i).ComboGoToSheet.AddItem sh.Name
Next sh
Sheets(i).ComboGoToSheet.ListIndex = 0
Next
Application.ScreenUpdating = True
End Sub


JB
 

Pièces jointes

  • Copie de FormListesOnglets.xls
    85 KB · Affichages: 88
  • Copie de FormListesOnglets.xls
    85 KB · Affichages: 90
  • Copie de FormListesOnglets.xls
    85 KB · Affichages: 93
Dernière édition:

Magic_Doctor

XLDnaute Barbatruc
Re : Remplir des ComboBox lors de l'ouverture d'un classeur

Bonjour BOISGONTIER,

Je viens d'essayer la PJ de votre dernier post (#7). C'est vraiment très curieux ; chez moi, quand je clique successivement sur un item des ComboBox des feuilles où je suis dirigé, à un moment donné, le 1er item commun à toutes les ComboBox, à savoir "--- ALLER À ---", n'est plus sélectionné par défaut.
C'est vraiment bizarre.
 

BOISGONTIER

XLDnaute Barbatruc
Repose en paix
Re : Remplir des ComboBox lors de l'ouverture d'un classeur

Bonjour,Bonsoir,

Code:
Option Explicit
Private Sub ComboGoToSheet_Click()
    If ComboGoToSheet.ListIndex > 0 Then
      Sheets(CStr(ComboGoToSheet.Value)).Select
      ComboGoToSheet.ListIndex = 0
    End If
End Sub

Voir pj

JB
 

Pièces jointes

  • Copie de FormListesOnglets.xls
    83 KB · Affichages: 47
  • Copie de FormListesOnglets.xls
    83 KB · Affichages: 55
  • Copie de FormListesOnglets.xls
    83 KB · Affichages: 52

Magic_Doctor

XLDnaute Barbatruc
Re : Remplir des ComboBox lors de l'ouverture d'un classeur

Bonjour BOISGONTIER,

Pas pu répondre avant.

Enfin ça marche. Dans mon application j'ai dû faire une toute petite modification (sinon ça plantait) qui peut-être pourra intéresser ceux confrontés au même problème :
VB:
Private Sub ComboGoToSheet_Click()
'ComboBox qui permet de se déplacer vers certaines feuilles du classeur
'BOISGONTIER
    If ComboGoToSheet.ListIndex > 0 Then
        Application.EnableEvents = False
        Sheets(CStr(ComboGoToSheet.Value)).Select
        ComboGoToSheet.ListIndex = 0
        Application.EnableEvents = True
    End If
End Sub
Encore une question, si vous me lisez.
Une fois que je suis dans la feuille que j'ai choisie dans la ComboBox, je voudrais sélectionner, par défaut, la cellule A2, et toujours la même cellule quelle que soit la feuille où je me dirige. Ça paraissait simple, je n'y suis jamais arrivé !

Quoi qu'il en soit, encore merci pour votre aide.
 

BOISGONTIER

XLDnaute Barbatruc
Repose en paix
Re : Remplir des ComboBox lors de l'ouverture d'un classeur

Bonjour,

Code:
Option Explicit
Private Sub ComboGoToSheet_Click()
    If ComboGoToSheet.ListIndex > 0 Then
      Sheets(CStr(ComboGoToSheet.Value)).Select
      ComboGoToSheet.ListIndex = 0
      ActiveSheet.[A2].Select
    End If
End Sub

JB
 

Pièces jointes

  • Copie de Copie de FormListesOnglets.xls
    87.5 KB · Affichages: 47
  • Copie de Copie de FormListesOnglets.xls
    87.5 KB · Affichages: 46
  • Copie de Copie de FormListesOnglets.xls
    87.5 KB · Affichages: 46

Magic_Doctor

XLDnaute Barbatruc
Re : Remplir des ComboBox lors de l'ouverture d'un classeur

Bonjour BOISGONTIER,

J'avais écrit "[A2].select" en oubliant de le précéder d'"ActiveSheet".
Merci, ça marche très bien.

Je me posais la question suivante : si nous avons un nombre conséquent de feuilles dans le classeur (dans la PJ j'ai rajouté des feuilles) dont les noms ne se suivent pas forcément par ordre alphabétique, comment faire en sorte qu'à l'ouverture du classeur la liste des feuilles de chaque ComboBox soit triée par ordre alphabétique ?
Dans un récent fil (https://www.excel-downloads.com/threads/combobox.210508/), pierrejean et mapomme résolvent ce problème mais avec un USF. Ici les ComboBox sont dans les feuilles.

Muy buenas tardes a todos.
 

Pièces jointes

  • FormListesOnglets3.xlsm
    83.6 KB · Affichages: 57
Dernière édition:

BOISGONTIER

XLDnaute Barbatruc
Repose en paix
Re : Remplir des ComboBox lors de l'ouverture d'un classeur

Bonjour,

Cf pj

Code:
Option Explicit
Private Sub Workbook_Open()
    Application.ScreenUpdating = False
    Dim i As Byte, k As Byte, sh As Worksheet
    For i = 1 To Sheets.Count - 3
        Dim temp()
        k = 1
        ReDim Preserve temp(1 To k)
        temp(k) = "---  ALLER À  ---"
        k = k + 1
        For Each sh In ActiveWorkbook.Sheets
          If sh.Name <> Sheets(i).Name And sh.Index <= Sheets.Count - 3 Then
              ReDim Preserve temp(1 To k)
              temp(k) = sh.Name
              k = k + 1
          End If
        Next sh
        Call Tri(temp, 1, UBound(temp))
        Sheets(i).ComboGoToSheet.List = temp
        Sheets(i).ComboGoToSheet.ListIndex = 0
        Erase temp
    Next i
    Application.ScreenUpdating = True
End Sub

jb
 

Pièces jointes

  • Copie de Copie de FormListesOnglets.xls
    91 KB · Affichages: 88
  • Copie de Copie de FormListesOnglets.xls
    91 KB · Affichages: 77
  • Copie de Copie de FormListesOnglets.xls
    91 KB · Affichages: 114
Dernière édition:

Discussions similaires

Statistiques des forums

Discussions
311 725
Messages
2 081 945
Membres
101 849
dernier inscrit
florentMIG