Pour insérer codes combobox

Bonjour,

Ci-joint 2 fichiers, un c'est mon tableau et l'autre c'est les codes à insérer

Comment peut t'on faire , j'aimerais avoir les explication !

Merci de votre réponse

Jean Yves.

29essai.xlsx (71.19 Ko)
33code-combobox.xlsx (17.41 Ko)

Bonjour,

ci-jointe proposition dans l'esprit de la demande.

41essai01.xlsm (70.88 Ko)

bonsoir

merci de répondre

je voudrais mettre ça dans un fichier

Pour cela, il faudrait disposer d'un extrait non confidentiel de ce fichier pour que je puisse vous communiquer la procédure à suivre d' adaptation du code.

rien q'une simple feuille excel vierge c tout

Procédure à suivre sur feuille vierge

1-création du contrôle Combobox

menu Développeur --> Insérer --> Contrôles ActiveX --> Choisir Zone de Liste déroulante --> La créer sur la feuille

Par défaut, son nom est Combobox1. En cliquant sur le bouton Propriétés du menu Développeur, son nom apparaît et peut être changé auquel le code devra être modifié en conséquence.

Terminer en cliquant sur le bouton "Mode Création" pour revenir au mode normal.

2-copie du code

Dans l'éditeur VBA, copier le code suivant dans la feuille concernée a priori Feuil1, et changer les valeurs des constantes selon le fichier.

'************* Constantes à définir selon fichier   ********************************
Const valeur_cellule_départ As String = "A1"
Const valeur_plage_action_cbx As String = "C3:C995"         'valeur de la plage où agira la ComboBox
Const valeur_plage_liste_cbx As String = "M:M"              'valeur de la plage où se trouvera la liste de la ComboBox
Const décalage_ligne_liste_cbx As String = 3                'valeur du décalage pour obtenir la première ligne de la liste de la ComboBox

'************* Définition variables relatives à la feuille   ***********************
Dim nb_items As Integer
Dim plage As Range, champ_maj As Range

Private Sub Worksheet_Activate()

    'RAB Combobox1
    ComboBox1.Clear
    'Nombre d'items de la liste
    nb_items = Application.CountA(Range(valeur_plage_liste_cbx))
    'Affectation Liste Combobox1
    ComboBox1.List = Range(valeur_plage_liste_cbx).Resize(nb_items).Offset(décalage_ligne_liste_cbx).Value
    'Initialisation Combobox
    Call Combobox1_LostFocus
    'Positionnement sur la cellule de départ
    Range(valeur_cellule_départ).Select

End Sub

Private Sub Worksheet_SelectionChange(ByVal Target As Range)

    'plage de modification des champs du tableau via Combobox
    Set plage = Range(valeur_plage_action_cbx)

    'positionnement et affichage Combobox selon cellule sélectionnée
    If Not Intersect(Target, plage) Is Nothing And Target.Count = 1 Then
        'positionnement Combobox
        ComboBox1.Value = Target.Value
        ComboBox1.Height = Target.Height
        ComboBox1.Width = Target.Width
        ComboBox1.Top = Target.Top
        ComboBox1.Left = Target.Left
        ComboBox1.Visible = True
        'activation de la Combobox
        With ComboBox1
            .Activate
            .SelStart = 0
            .SelLength = Len(.Text)
        End With
        'affectation champ à mettre à jour
        Set champ_maj = Target
    End If

End Sub

Private Sub Combobox1_KeyDown(ByVal KeyCode As MSForms.ReturnInteger, ByVal Shift As Integer)

    'RAB champ tableau
    If KeyCode = vbKeyDelete Then champ_maj.Value = Empty: Range(valeur_cellule_départ).Select

    'Pas de mise à jour champ tableau
    If KeyCode = vbKeyEscape Then Range(valeur_cellule_départ).Select

End Sub

Private Sub Combobox1_Change()

    'mise à jour champ tableau
    If champ_maj Is Nothing Then Exit Sub
    If ComboBox1.Value <> Empty Then
        champ_maj.Value = ComboBox1.Value     'mise à jour
        champ_maj.Offset(1).Select              'sélection champ ligne suivante
    End If

End Sub

Private Sub Combobox1_LostFocus()

    'initialisation Combobox
    ComboBox1.Value = Empty
    ComboBox1.Visible = False

    'désaffectation champ à mettre à jour
    Set champ_maj = Nothing

End Sub

3-exécution à l'ouverture du fichier, de la procédure relative à l'événement d'activation de la feuille

recopier le code suivant dans ThisWorkBook en supposant que la feuille est Feuil1

Private Sub Workbook_Open()
    Application.Run "Feuil1.Worksheet_Activate"
End Sub

re bonsoir

j'ai une ligne sur 2 sur la liste déroulante

Je n'ai pas ce souci avec exactement le même code sur l'exemple fourni (ci-joint)

Sans ton fichier, bien difficile de répondre.

25essai02.xlsm (71.75 Ko)

bonjour ,

je me suis mal exprimé

ce n'est pas dans la liste déroulante mais dans la colonne tiers

ça le fait une ligne sur 2 je le voudrais a toutes les lignes ( encadrement avec la petite flèche )

capture

voila le fichier ou c'est a toutes les lignes et quand on clique sur la petite flèche

ça m'affiche la liste déroulante

24essai-compte.zip (45.41 Ko)

Je ne vois pas où est le problème. Quand je clique sur C7, C8,C9,C10 ...., la liste déroulante apparaît bien.

De plus, tu n'as pas retenu mon code. C'est ton choix.

Je laisse à d'autres intervenants le soin de te répondre.

bonjour du lundi

tu me dit que j'ai changé ton code

regarde quand tu ma répondu et que tu a mis le fichier essai01

j'ai bien une ligne sur 2 dans colonne tiers qui s'affiche

capture
16essai01.xlsm (70.88 Ko)

c'est bizarre quand je clique sur une case de la colonne tiers j'ai la liste déroulante c'est normal

mais si je clique aussitôt en dessous je l'ai pas, je clique en dessous je l'ai ( 1 ligne sur 2 )

par contre je clique je l'ai, je clique sur une autre colonne et je revient sur la case en dessous ( tiers )la ça fonctionne

donc toutes les cases fonctionnent sauf si on remplis a suivre en dessous ( 1 sur 2 )

Cette fois, j'ai bien vu l'anomalie, ci-jointe correction :

'************* Constantes à définir selon fichier   ********************************
Const valeur_cellule_départ As String = "A1"
Const valeur_plage_action_cbx As String = "C3:C995"         'valeur de la plage où agira la ComboBox
Const valeur_plage_liste_cbx As String = "M:M"              'valeur de la plage où se trouvera la liste de la ComboBox
Const décalage_ligne_liste_cbx As String = 3                'valeur du décalage pour obtenir la première ligne de la liste liste de la ComboBox

'************* Définition variables relatives à la feuille   ***********************
Dim nb_items As Integer
Dim plage As Range, champ_maj As Range

Private Sub Worksheet_Activate()

    'RAB Combobox1
    ComboBox1.Clear
    'Nombre d'items de la liste
    nb_items = Application.CountA(Range(valeur_plage_liste_cbx))
    'Affectation Liste Combobox1
    ComboBox1.List = Range(valeur_plage_liste_cbx).Resize(nb_items).Offset(décalage_ligne_liste_cbx).Value
    'Initialisation Combobox
    Call Combobox1_LostFocus
    'Positionnement sur la cellule de départ
    Range(valeur_cellule_départ).Select

End Sub

Private Sub Worksheet_SelectionChange(ByVal Target As Range)

    'plage de modification des champs du tableau via Combobox
    Set plage = Range(valeur_plage_action_cbx)
    'positionnement et affichage Combobox selon cellule sélectionnée
    If Not Intersect(Target, plage) Is Nothing And Target.Count = 1 Then
        'positionnement Combobox
        ComboBox1.Value = Target.Value
        ComboBox1.Height = Target.Height
        ComboBox1.Width = Target.Width
        ComboBox1.Top = Target.Top
        ComboBox1.Left = Target.Left
        ComboBox1.Visible = True
        'activation de la Combobox
        With ComboBox1
            .Activate
            .SelStart = 0
            .SelLength = Len(.Text)
        End With
        'affectation champ à mettre à jour
        Set champ_maj = Target
    Else
        Set champ_maj = Nothing
    End If

End Sub

Private Sub Combobox1_KeyDown(ByVal KeyCode As MSForms.ReturnInteger, ByVal Shift As Integer)

    'RAB champ tableau
    If KeyCode = vbKeyDelete Then champ_maj.Value = Empty: Range(valeur_cellule_départ).Select

    'Pas de mise à jour champ tableau
    If KeyCode = vbKeyEscape Then Range(valeur_cellule_départ).Select

End Sub

Private Sub Combobox1_Change()

    'mise à jour champ tableau
    If champ_maj Is Nothing Then Exit Sub
    If ComboBox1.Value <> Empty Then
        champ_maj.Value = ComboBox1.Value     'mise à jour
        champ_maj.Offset(1).Select              'sélection champ ligne suivante
    End If

End Sub

Private Sub Combobox1_LostFocus()

If champ_maj Is Nothing Then
    'initialisation Combobox
    ComboBox1.Value = Empty
    ComboBox1.Visible = False
End If

End Sub
26essai03.xlsm (71.75 Ko)

voila c 'est bon j'ai réussit a faire ce que j'ai voulu grâce a tes conseils et code

j'ai réussi a comprendre aussi la fonction propriété pour modifier le nombre de ligne de la liste déroulante

ainsi que les caractères et couleur

j'ai pu faire complètement une feuille comme je voulais et surtout en la comprenant

c'est que pour m'exprimer c'est pas toujours facile de ce faire comprendre

mais avec ta patience et compréhension nous y somme arrivé

merci encore

et je met en résolu

cordialement

jean yves.

Rechercher des sujets similaires à "inserer codes combobox"