Microsoft 365 Combobox avec donnée horizontal

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

  • PREPACLAIM2.xlsm
    59.1 KB · Affichages: 24

M12

XLDnaute Accro
Bonjour sousou
Avec ta macro, le nom "ww" sera sur la ligne 4 uniquement
mon principe est de modifier le contenu du nom suivant la ligne de la cellule cliquée et de remplir la liste avec les données de la ligne
 

beloquinto

XLDnaute Nouveau
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:

M12

XLDnaute Accro
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
 

job75

XLDnaute Barbatruc
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

  • PREPACLAIM(1).xlsm
    72.4 KB · Affichages: 9
Dernière édition:

beloquinto

XLDnaute Nouveau
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
 

job75

XLDnaute Barbatruc
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

  • PREPACLAIM(2).xlsm
    75.5 KB · Affichages: 6

job75

XLDnaute Barbatruc
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

  • PREPACLAIM(3).xlsm
    76.5 KB · Affichages: 6

beloquinto

XLDnaute Nouveau
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 ?
 

Discussions similaires

Réponses
8
Affichages
374

Statistiques des forums

Discussions
313 112
Messages
2 095 392
Membres
106 263
dernier inscrit
xxSDe