Microsoft 365 Combobox avec donnée horizontal

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

beloquinto

XLDnaute Nouveau
Bonjour
j'ai besoin de votre aide pour mettre une combobox (VBA) horizontal cellules AA4:AA171 qui va cherhcer les données lignes par lignes AD4:AO4

je ne souhaite pas utilisé de données validations.

Merci d'avance de votre aide.
 

Pièces jointes

Bonjour à tous, merci pour vos réponse
@M12, pourquoi mettre un "%" après le "i" ?

pour être plus claire je souhaite une combobox (liste) dans les cellules AA4:AA171 qui récupère les données ligne par ligne de AD4:AO4. de la manières validation des donnèes (liste).

Donc par exemple pour une combobox dans AA4 j'ai la liste des données de la même ligne AD4:AO4

merci de votre aide
 
Dernière édition:
Bonjour à tous, merci pour vos réponse
@M12, pourquoi mettre un "%" après le "i" ?

pour être plus claire je souhaite une combobox (liste) dans les cellules AA4:AA171 qui récupère les données ligne par ligne de AD4:AO4. de la manières validation des donnèes (liste).

Donc par exemple pour une combobox dans AA4 j'ai la liste des données de la même ligne AD4:AO4

merci de votre aide

Re,
C'est le cas,
pour info le "%" équivaut à l'expression "As Integer"
As-tu au moins testé que chaque ligne dans ta liste déroulante te donne les indications des colonnes correspondantes à la SEULE ligne
 
Bonjour beloquinto, M12, sousou,

Voyez le fichier joint et ces macros pour la ComboBox :
VB:
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
With ComboBox1
    If Intersect(ActiveCell, [AA4:AA171]) Is Nothing Then .Visible = False: Exit Sub
    .Top = ActiveCell.Top
    .Left = ActiveCell.Left
    .Height = ActiveCell.Height
    .Width = ActiveCell.Width
    .Visible = True
    .Activate
End With
End Sub

Private Sub ComboBox1_GotFocus()
Dim c As Range
With ComboBox1
    .Clear 'RAZ
    .AddItem "<vide>"
    For Each c In ActiveCell(1, 4).Resize(, 12)
        If c <> "" Then .AddItem c
    Next
    Application.ScreenUpdating = True 'mise à jour de l'écran
    .DropDown 'déroule la liste
End With
End Sub

Private Sub ComboBox1_Change()
With ComboBox1
    If .ListIndex > -1 Then ActiveCell = IIf(.ListIndex = 0, "", .Text): ActiveCell(1, 0).Select
End With
End Sub
A+
 

Pièces jointes

Dernière édition:
Bonjour beloquinto, M12, sousou,

Voyez le fichier joint et ces macros pour la ComboBox :
VB:
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
With ComboBox1
    If Intersect(ActiveCell, [AA4:AA171]) Is Nothing Then .Visible = False: Exit Sub
    .Top = ActiveCell.Top
    .Left = ActiveCell.Left
    .Height = ActiveCell.Height
    .Width = ActiveCell.Width
    .Clear 'RAZ
    .Visible = True
    .Activate
End With
End Sub

Private Sub ComboBox1_GotFocus()
Dim c As Range
With ComboBox1
    .AddItem "<vide>"
    For Each c In ActiveCell(1, 4).Resize(, 12)
        If c <> "" Then .AddItem c
    Next
    Application.ScreenUpdating = True 'mise à jour de l'écran
    .DropDown 'déroule la liste
End With
End Sub

Private Sub ComboBox1_Change()
With ComboBox1
    If .ListIndex > -1 Then ActiveCell = IIf(.ListIndex = 0, "", .Text): ActiveCell(1, 0).Select
End With
End Sub
A+

Super merci, ça fonctionne nickel

merci beaucoup pour ton aide
 
Bonjour beloquinto, le forum,

Le fonctionnement du fichier (1) n'est pas tout à fait satisfaisant, du moins chez moi.

Je sélectionne AA5 pour afficher la ComboBox, j'enregistre et ferme le fichier.

Je rouvre le fichier et clique sur la flèche de la ComboBox : la liste ne se déroule pas correctement.

Ce fichier (2) y remédie avec ce nouveau code :
VB:
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
With ComboBox1
    If Intersect(ActiveCell, [AA4:AA171]) Is Nothing Then .Visible = False: Exit Sub
    .Top = ActiveCell.Top
    .Left = ActiveCell.Left
    .Height = ActiveCell.Height
    .Width = ActiveCell.Width
    .Visible = True
    Application.OnTime 1, Me.CodeName & ".Activation" 'activation différée
End With
End Sub

Sub Activation()
ComboBox1.Activate
End Sub

Private Sub ComboBox1_GotFocus()
Static flag As Boolean 'mémorise la variable
If flag Then Exit Sub
Dim c As Range
With ComboBox1
    .Clear 'RAZ
    .AddItem "<vide>"
    For Each c In ActiveCell(1, 4).Resize(, 12)
        If c <> "" Then .AddItem c
    Next
    flag = True
    ActiveCell.Activate 'désactive ComboBox1
    .DropDown 'déroule la liste
    .Activate 'réactive ComboBox1
    flag = False
End With
End Sub

Private Sub ComboBox1_Change()
With ComboBox1
    If .ListIndex > -1 Then ActiveCell = IIf(.ListIndex = 0, "", .Text): ActiveCell(1, 0).Select
End With
End Sub
La petite gymnastique active/désactive/réactive permet de dérouler correctement la liste.

Bonne journée.
 

Pièces jointes

Une solution peut-être plus simple avec ce fichier (3) :
VB:
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
Dim c As Range
With ComboBox1
    If Intersect(ActiveCell, [AA4:AA171]) Is Nothing Then .Visible = False: Exit Sub
    .Clear 'RAZ
    .AddItem "<vide>"
    For Each c In ActiveCell(1, 4).Resize(, 12)
        If c <> "" Then .AddItem c
    Next
    .Top = ActiveCell.Top
    .Left = ActiveCell.Left
    .Height = ActiveCell.Height
    .Width = ActiveCell.Width
    .Visible = True
    Application.ScreenUpdating = True 'mise à jour de l'écran
    .Activate
End With
End Sub

Private Sub ComboBox1_GotFocus()
ComboBox1.DropDown 'déroule la liste
End Sub

Private Sub ComboBox1_Change()
With ComboBox1
    If .ListIndex > -1 Then ActiveCell = IIf(.ListIndex = 0, "", .Text): ActiveCell(1, 0).Select
End With
End Sub
Mais il faut en plus ce code dans ThisWorkbook pour créer la liste si la ComboBox est affichée :
VB:
Private Sub Workbook_Open()
Dim c As Range
With Sheets("ARM").ComboBox1
    If Not .Visible Then Exit Sub
    .AddItem "<vide>"
    For Each c In .TopLeftCell.Offset(, 3).Resize(, 12)
        If c <> "" Then .AddItem c
    Next
End With
End Sub
 

Pièces jointes

Une solution peut-être plus simple avec ce fichier (3) :
VB:
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
Dim c As Range
With ComboBox1
    If Intersect(ActiveCell, [AA4:AA171]) Is Nothing Then .Visible = False: Exit Sub
    .Clear 'RAZ
    .AddItem "<vide>"
    For Each c In ActiveCell(1, 4).Resize(, 12)
        If c <> "" Then .AddItem c
    Next
    .Top = ActiveCell.Top
    .Left = ActiveCell.Left
    .Height = ActiveCell.Height
    .Width = ActiveCell.Width
    .Visible = True
    Application.ScreenUpdating = True 'mise à jour de l'écran
    .Activate
End With
End Sub

Private Sub ComboBox1_GotFocus()
ComboBox1.DropDown 'déroule la liste
End Sub

Private Sub ComboBox1_Change()
With ComboBox1
    If .ListIndex > -1 Then ActiveCell = IIf(.ListIndex = 0, "", .Text): ActiveCell(1, 0).Select
End With
End Sub
Mais il faut en plus ce code dans ThisWorkbook pour créer la liste si la ComboBox est affichée :
VB:
Private Sub Workbook_Open()
Dim c As Range
With Sheets("ARM").ComboBox1
    If Not .Visible Then Exit Sub
    .AddItem "<vide>"
    For Each c In .TopLeftCell.Offset(, 3).Resize(, 12)
        If c <> "" Then .AddItem c
    Next
End With
End Sub


Franchement merci pour ton aide. je vais pouvoir avancé, par hasard comme ça tu serais comment ajouter aussi les couleurs des cellules correspondante dans la combobox ?
 
- 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
40
Affichages
1 K
Réponses
18
Affichages
183
Réponses
15
Affichages
732
Retour