Comment remplir un combobox sans utilisation d'une colonne

Résolu
Bonjour ,

je cherche à remplir mon combobox par une série numérique {1,2...11}
sans utilisation d'une colonne d'Excel.

d'autre part je m'adresse à vous pour m'indiquer comment compter le nombre de items de combobox c'est à dire si je séléctionne 3 items chaque fois il me donne n=3

je vous remercie beaucoup pour votre aide!!!

10 réponses

  1. Contributeur
    voici un exemple avec une ListBox,a adapter a une ComboBox:

    Dim I As Long, j As Long
    j = 0
    With ListBox1
    For I = 0 To .ListCount - 1
    If .Selected(I) Then
    j = j + 1
    End If
    Next
    MsgBox j
    End With

    1
    1. malhereusement une erreur s'affiche
      0
      1. Contributeur
        Si tu n'arrives pas a mettre :

        With ComboBox1


        a la place de

        With ListBox1


        parce que c'était la seule chose à changer dans le copier coller. Il y a un soucis pour la suite!

        Il faudrait prendre quelques cours de vba pour connaitre les fondamentaux.

        Quand on met
        With Combobox1
        , cela évite de le remettre partout on démarre ensuite avec un point:

        .Selected


        au lieu de:

        ComboBox1.Selected


        Voilà
        0
    2. je m'execuse cs_Le Pivert car j'ai déjà fait et je suis débutant en vba et chaque fois avant de poser des questions je cherche mais parfois des astuces comme cela , je n'arrive pas à les arracher:
      j'ai déjà fait with combobox1 à la place de listbox et j'ai déjà fait .selected

      je vous remercie toujours et pardonne moi :

      voir ce qui m'affiché même je fais .selected
      0
      1. Contributeur
        cependant j'ai pas pu trouver comment on compte le nombre de séléctions dans le combobox

        Je serais curieux de voir de quelle façon tu sélectionnes plusieurs items dans une ComboBox!

        Si tu veux sélectionner plusieurs items, il faut utiliser une ListBox dont tu mets la propriété Multiselect à fmMultiSelectMulti comme ceci:

        ListBox1.MultiSelect = fmMultiSelectMulti


        Consulte sans modération le site cité ici sur les ListBox

        https://forums.commentcamarche.net/forum/affich-34447046-comment-remplir-un-combobox-sans-utilisation-d-une-colonne#1

        @+ Le Pivert
        1
        1. Bonjour,

          ma problème n'est pas dans la séléction des plusieurs items d'un combobox en effet j'ai besoin d'un text box qui affiche le nombre des items séléctionnées d'un combobox pour un cas d'étude :
          voici une capture d'écran


          c'est à dire si je séléctionne un élément donc textbox affiche 1
          puis si je séléctionne le deuxième il affiche 2 et ainsi de suite
          0
          1. Contributeur
            C'est en effet plus clair, comme ceci:

            Option Explicit
            Dim j As Integer
            Private Sub ComboBox1_Change()
            TextBox1.Value = j
            j = j + 1
            End Sub
            Private Sub UserForm_Initialize()
                Dim i As Byte
                For i = 1 To 15
                    ComboBox1.AddItem "Ligne" & i
                Next i
                ComboBox1.ListIndex = 0
               j = 1
             End Sub
            
            

            1
            1. merci mais malhereusement un erreur s'affiche indiquant accés impossible

              voici le code comme vous me proposez

              0
              1. Contributeur
                Il faut quand même réfléchir!!!!!!!!!!!!

                Ce code empêche la saisie dans tous les TextBox:

                'boucle sur les Textbox
                Dim Ctrl As Control
                For Each Ctrl In Me.Controls
                    If TypeOf Ctrl Is MSForms.TextBox Then
                     Ctrl.Object.Enabled = False
                End If
                Next Ctrl


                Il faut donc mettre après ce code:

                TextBox11.Enabled= True
                TextBox11.Value = j
                j = j + 1


                si l'on veut que la saisie se fasse!!!!!!!

                Au lieu de mettre des captures d'écran mettre le code dans les balises.
                1
                1. malhereusement ca ne marche pas c'est pourquoi je décidé de faire une autre méthode qui consiste de faire un contrôle chaque fois sur la séléction d'un item d'un combobox alors on ajoute un aux textbox mais encore il ne marche pas

                  corrige moi svp

                  j = 0
                  TextBox11.Enabled = True
                  
                  If SelectedItem.ComboBox1 = True Then
                  TextBox11.Value = j + 1
                  End If
                  0
              2. Contributeur
                Où as-tu trouvé cela:

                If SelectedItem.ComboBox1 = True 


                Cela n'existe pas.

                Je te donne toutes les infos et tu ne les mets pas en pratique.
                Je fais une dernière tentative, mets moi la totalité du code de l'évenement

                Private Sub ComboBox1_Change()


                Je vois ce que je peux faire!
                1
                1. n'oublier pas que mon combobox est dont ses items sont d'origine d'une colonne définie dans excel :

                  voici le code :

                  Private Sub ComboBox1_Change()
                  Dim j As Integer
                  
                  
                  Dim Ctrl As Control
                  For Each Ctrl In Me.Controls
                      If TypeOf Ctrl Is MSForms.TextBox Then
                       Ctrl.Object.Enabled = False
                  End If
                  Next Ctrl
                  
                  TextBox11.Enabled = True 'c'est le text box qui doit compter chaque fois le nombre des items chaque fois
                  TextBox11.Value = j
                  j = j + 1
                  TextBox8.Enabled = True
                  TextBox8.Value = Date
                   Select Case ComboBox1.Value
                  Case "Swaps de taux d'intérêt : Payer"
                  
                  TextBox7.Enabled = False
                  TextBox6.Enabled = True
                  TextBox4.Enabled = True
                  TextBox5.Enabled = True
                  TextBox9.Enabled = True
                  TextBox10.Enabled = True
                  
                  
                  Case "Swaps de taux d'intérêt : Recevoir"
                  
                  TextBox7.Enabled = False
                  TextBox6.Enabled = True
                  TextBox4.Enabled = True
                  TextBox5.Enabled = True
                  TextBox9.Enabled = True
                  TextBox10.Enabled = True
                  
                  
                  Case "Contrats de taux à terme : Acheter (court)"
                  
                  TextBox6.Enabled = False
                  TextBox7.Enabled = True
                  TextBox4.Enabled = True
                  TextBox5.Enabled = True
                  TextBox9.Enabled = True
                  TextBox10.Enabled = True
                  
                  
                  Case "Contrats de taux à terme : Vendre (long)"
                  
                  TextBox6.Enabled = False
                  TextBox7.Enabled = True
                  TextBox4.Enabled = True
                  TextBox5.Enabled = True
                  TextBox9.Enabled = True
                  TextBox10.Enabled = True
                  
                  
                  Case "Obligations et billets du gouvernement"
                  
                  TextBox6.Enabled = False
                  TextBox7.Enabled = False
                  TextBox4.Enabled = True
                  TextBox5.Enabled = True
                  TextBox9.Enabled = True
                  TextBox10.Enabled = False
                  
                  
                  Case "Swaps de devises : Recevoir (variable)"
                  
                  TextBox6.Enabled = False
                  TextBox4.Enabled = False
                  TextBox7.Enabled = True
                  TextBox5.Enabled = True
                  TextBox9.Enabled = True
                  TextBox10.Enabled = False
                  
                  Case "Swaps de devises : Payer (variable)"
                  
                  TextBox6.Enabled = False
                  TextBox4.Enabled = False
                  TextBox7.Enabled = True
                  TextBox5.Enabled = True
                  TextBox9.Enabled = True
                  TextBox10.Enabled = False
                  
                  
                  Case "Acceptations bancaires à terme : Acheter"
                  
                  TextBox6.Enabled = False
                  TextBox4.Enabled = False
                  TextBox7.Enabled = False
                  TextBox5.Enabled = True
                  TextBox9.Enabled = True
                  TextBox10.Enabled = True
                  
                  
                  Case "Acceptations bancaires à terme : Vendre"
                  
                  TextBox6.Enabled = False
                  TextBox4.Enabled = False
                  TextBox7.Enabled = False
                  TextBox5.Enabled = True
                  TextBox9.Enabled = True
                  TextBox10.Enabled = True
                  
                  Case "Swaps de devises : Recevoir (fixe)"
                  
                  TextBox6.Enabled = False
                  TextBox7.Enabled = False
                  TextBox4.Enabled = True
                  TextBox5.Enabled = True
                  TextBox9.Enabled = True
                  TextBox10.Enabled = False
                  
                  Case "Swaps de devises : Payer (fixe)"
                  
                  TextBox6.Enabled = False
                  TextBox7.Enabled = False
                  TextBox4.Enabled = True
                  TextBox5.Enabled = True
                  TextBox9.Enabled = True
                  TextBox10.Enabled = False
                  
                  Case "Contrats à terme sur devise"
                  
                  TextBox6.Enabled = False
                  TextBox4.Enabled = False
                  TextBox7.Enabled = True
                  TextBox5.Enabled = True
                  TextBox9.Enabled = True
                  TextBox10.Enabled = True
                  
                  End Select
                  
                  
                  End Sub
                  


                  et je vois pas l'utilité de ce code :

                  </code basic>
                  Private Sub UserForm_Initialize()
                  Dim i As Byte
                  For i = 1 To 15
                  ComboBox1.AddItem "Ligne" & i
                  Next i
                  ComboBox1.ListIndex = 0
                  j = 1
                  End Sub</code>

                  je vous remercie énormement pour votre aide et effort!!!
                  0
                2. Contributeur
                  @amiro2017et je vois pas l'utilité de ce code :

                  j = 1 

                  C'est grave tu ne comprends rien!

                  Ce code sert a initialiser la variable j à l'ouverture de l'UserForm

                  Par contre cela ne sert pas dans ton cas, c'est pour mon exemple
                  Dim i As Byte 
                  For i = 1 To 15 
                  ComboBox1.AddItem "Ligne" & i 
                  Next i 
                   


                  ensuite cette variable j doit être déclarée en dehors des sub et non pas comme tu l'as fait dans

                  Private Sub ComboBox1_Change()
                  Dim j As Integer


                  Si tu n'appliques pas ce que je dit, j'abandonne.

                  Ensuite pourquoi mettre dans les Select case des TextBox.Enabled = False cela ne sert a rien car il sont tous à false au changement de sélection de la comboBox
                  Je t'ai expliqué ici:

                  https://forums.commentcamarche.net/forum/affich-34447046-comment-remplir-un-combobox-sans-utilisation-d-une-colonne#12

                  il suffit donc de mettre seulement les TextBox.Enabled = True

                  Corrige tout ça et on verra la suite
                  0
                3. @cs_Le Pivertje vous explique concernant le TextBox.Enabled = False pour chaque case car j'ai besoin de ca et ca marche avec mes besoins car lorsqu'on parle des obligations on parle donc seulement de l'échéance donc les autres données ne doivent pas entrée <gras>sela empêche l'utilisateur d'entrer des informations erronées!<gras>

                  d'autre part , jai déja fait j endehors de procédure mais ca ne marche pas !

                  par contre j'ai une idée pour dépasser ce problème : je vous explique : en effet j'ai un bouton ajouter (qui sert à enregistrer les données pour chaque cas d'étude) ainsi je vous prie de m'indiquer est-il possible pour chaque appye sur ajouter le textbox de comptage avance d'un pas? car j'ai déjà décidé
                  je pense cette idée plus efficace

                  voici le code d'ajouter:

                  Private Sub CommandButton5_Click()
                  Dim dernier As Integer
                  Dim j As Integer
                  j = 0
                  
                  Sheets("Approche_standards").Activate
                  dernier = Application.WorksheetFunction.CountA(Range("B:B")) + 1
                  
                  Select Case ComboBox1.Value
                  
                  Case "Swaps de taux d'intérêt : Payer"
                  If (TextBox4.Value <> "") Then
                  Cells(dernier, 5).Value = -Val(TextBox4)
                  End If
                  
                  
                  Case "Swaps de taux d'intérêt : Recevoir"
                  If (TextBox4.Value <> "") Then
                  Cells(dernier, 6).Value = -Val(TextBox4)
                  End If
                  
                  
                  Case "Contrats de taux à terme : Acheter (court)"
                  If (TextBox4.Value <> "") Then
                  Cells(dernier, 6).Value = -Val(TextBox7)
                  End If
                  
                  
                  Case "Contrats de taux à terme : Vendre (long)"
                  If (TextBox4.Value <> "") Then
                  Cells(dernier, 5).Value = -Val(TextBox7)
                  End If
                  
                  
                  Case "Obligations et billets du gouvernement"
                  If (TextBox4.Value <> "") Then
                  Cells(dernier, 5).Value = Val(TextBox4)
                  End If
                  
                  
                  Case "Swaps de devises : Recevoir (variable)"
                  If (TextBox4.Value <> "") Then
                  Cells(dernier, 4).Value = Val(TextBox4)
                  End If
                  
                  Case "Swaps de devises : Payer (variable)"
                  If (TextBox4.Value <> "") Then
                  Cells(dernier, 4).Value = -Val(TextBox4)
                  End If
                  
                  Case "Swaps de devises : Recevoir (fixe)"
                  If (TextBox4.Value <> "") Then
                  Cells(dernier, 5).Value = Val(TextBox4)
                  End If
                  
                  Case "Swaps de devises : Payer (fixe)"
                  If (TextBox4.Value <> "") Then
                  Cells(dernier, 5).Value = -Val(TextBox4)
                  End If
                  
                  Case "Contrats à terme sur devise: Acheter"
                  If (TextBox5.Value <> "") Then
                  Cells(dernier, 4).Value = Val(TextBox4)
                  End If
                  
                  Case "Contrats à terme sur devise: Vendre"
                  If (TextBox5.Value <> "") Then
                  Cells(dernier, 4).Value = -Val(TextBox4)
                  End If
                  
                  End Select
                  textbox11.value=j+1
                  Cells(dernier, 2).Value = TextBox8.Value
                  Cells(dernier, 3).Value = ComboBox1.Value
                  Cells(dernier, 4).Value = Val(TextBox7)
                  Cells(dernier, 6).Value = Val(TextBox6)
                  Cells(dernier, 7).Value = Val(TextBox5)
                  Cells(dernier, 11).Value = Val(TextBox9)
                  Cells(dernier, 12).Value = Val(TextBox10)
                  
                  End Sub
                  0
                4. Contributeur
                  @amiro2017Je crois que tu ne comprends toujours rien

                  En mettant :

                  Private Sub CommandButton5_Click()
                  Dim dernier As Integer
                  Dim j As Integer
                  j = 0


                  Tu sera toujours à 0.

                  Si tu ne comprends pas ce que j'explique:

                  Il faut que l'initialisation de j se face à l'ouverture de l'UserForm

                  Je ne peux plus rien pour toi

                  désolé
                  0
                5. @cs_Le Pivertje m'execuse je suis débutant et je ne maîtrise pas parfaitement le vba .
                  je vous remercie en tout cas cs_Le Pivert
                  c'est pas grave , je veux décider et vraiment je vous remercie beaucoup !!!
                  0