XL 2016 Atteindre une colonne à partir d'un menu déroulant

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 !

Eric4709

XLDnaute Nouveau
Bonjour à tous,

Nouveau problème, nouvelle question 🙂

J'ai dans un tableau 280 colonnes. Je souhaiterai savoir s'il serait possible par un bouton faire apparaître sous forme de menu déroulant l'ensemble des intitulés des colonnes du tableau et cliquer sur un nom pour atteindre cette colonne ?

Merci d'avance pour votre aide.
 

Pièces jointes

Solution
Bonsoir,
Un essai en PJ avec :
VB:
Sub ChoixOnglets()
With ListWindows
    Dim Plage(), PlageOut(), Buffer, N%, x%, i%, j%
    N = Application.CountIf([1:1], "*")
    Plage = Range(Cells(1, 1), Cells(1, N))
    ReDim PlageOut(N)
    ' Tri alpha descendant
    For i = 1 To N
        For j = 1 To N
            If Plage(1, i) < Plage(1, j) Then
                Buffer = Plage(1, i)
                Plage(1, i) = Plage(1, j)
                Plage(1, j) = Buffer
            End If
        Next j
    Next i
    ' Transfert matrice pour passer double colonne en une seule
    For x = 1 To N
        PlageOut(x - 1) = Plage(1, x)
    Next x
    ' Mise dans ListBox
    .ListeOnglets.List = PlageOut
    .ListeOnglets.ListIndex = 0
    .Show
End With...
Bonjour Éric, bonjour le forum,

J'ai déplacé le tableau structuré, figé les volets et rajouté les deux événementielle ci-dessous :

VB:
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
Dim I As Integer
Dim L As String

If Target.Address <> "$A$1" Then Exit Sub
For I = 1 To Me.ListObjects("Tableau1").HeaderRowRange.Count
    L = IIf(L = "", Me.ListObjects("Tableau1").HeaderRowRange.Item(1, I), L & "," & Me.ListObjects("Tableau1").HeaderRowRange.Item(1, I))
Next I
With Target.Validation
    .Delete
    .Add xlValidateList, Formula1:=L
End With
End Sub

Private Sub Worksheet_Change(ByVal Target As Range)
If Target.Address <> "$A$1" Then Exit Sub
Me.Cells(2, Me.Rows(2).Find(Target.Value, , xlValues, xlWhole).Column).Select
End Sub
Le fichier :
 

Pièces jointes

Bonjour Eric,
Un essai en PJ avec :
Dans Thisworkbook, je redirige la touche "²" pour faire l'accès aux onglets :
VB:
Sub Workbook_Open()
     Application.OnKey "²", "ChoixOnglets"
End Sub
Private Sub Workbook_BeforeSave(ByVal SaveAsUI As Boolean, Cancel As Boolean)
     Application.OnKey "²"
End Sub
Dans l'userform l'accès aux onglets:
Code:
Private Sub CommandButton1_Click()
    N = Application.Match(ListeOnglets.Value, [1:1], 0)
    Unload Me
    ActiveSheet.Cells(1, N).Select
End Sub
En module le remplissage de l'userform :
Code:
Sub ChoixOnglets()
With ListWindows
    N = Application.CountIf([1:1], "*")
    Set Plage = Range(Cells(1, 1), Cells(1, N))
    .ListeOnglets.List = Application.Transpose(Plage)
    .ListeOnglets.ListIndex = 0
    .Show
End With
End Sub

Donc pour accéder à un onglet il suffit d'appuyer sur la touche "²" ( qui ne sert à rien généralement ) pour avoir la liste des onglets et le choisir.
 

Pièces jointes

Bonjour à tous,

Nouveau problème, nouvelle question 🙂

J'ai dans un tableau 280 colonnes. Je souhaiterai savoir s'il serait possible par un bouton faire apparaître sous forme de menu déroulant l'ensemble des intitulés des colonnes du tableau et cliquer sur un nom pour atteindre cette colonne ?

Merci d'avance pour votre aide.
Bonjour à tous,
Une proposition avec un combobox visible en permanence et colonne sélectionnée en début de feuille
 

Pièces jointes

Merci à tous pour vos réponses aussi intéressante les unes que les autres et qui fonctionnent parfaitement.

J'ai finalement retenu la solution de Sylvanu 🙂
Pour aller toujours un peu plus loin, est ce qu'il y aurait une ligne de code qui me permettrait de classer les intitulés dans la liste par ordre alphabétique ?

Encore merci
 
Bonsoir,
Un essai en PJ avec :
VB:
Sub ChoixOnglets()
With ListWindows
    Dim Plage(), PlageOut(), Buffer, N%, x%, i%, j%
    N = Application.CountIf([1:1], "*")
    Plage = Range(Cells(1, 1), Cells(1, N))
    ReDim PlageOut(N)
    ' Tri alpha descendant
    For i = 1 To N
        For j = 1 To N
            If Plage(1, i) < Plage(1, j) Then
                Buffer = Plage(1, i)
                Plage(1, i) = Plage(1, j)
                Plage(1, j) = Buffer
            End If
        Next j
    Next i
    ' Transfert matrice pour passer double colonne en une seule
    For x = 1 To N
        PlageOut(x - 1) = Plage(1, x)
    Next x
    ' Mise dans ListBox
    .ListeOnglets.List = PlageOut
    .ListeOnglets.ListIndex = 0
    .Show
End With
End Sub
 

Pièces jointes

- 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

Retour