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. 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. 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. 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
        3. 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
        4. 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. 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. merci mais malhereusement un erreur s'affiche indiquant accés impossible

              voici le code comme vous me proposez

              0