Controls en vb

Bonjour,

J'ai un soucis avec la fonction "Controls" je n'arrive pas à l'activer. En effet dès que je souhaite l'utiliser j'obtiens une erreur du type " Sub ou Fonction non défini" .

J'utilise Exel 2002

Je l'utilise dans une boulce for : Controls("Listbox" & i).List(i)

Comment faire ? Merci
Configuration: Windows XP
Internet Explorer 6.0

11 réponses

  1. Contributeur
    Bonjour,
    En VBA il n'est pas possible de définir des index.
    Une solution ici si tu ne t'en sort pas revient je tâcherai de t'aider.
    A+
    1. Merci mais je vais t'avouer que je n'ai pas vraiment compris le système.

      Donc si tu dis que la fonctions Controls ne fonctionne pas...

      Voila ce que je souhaite faire peut être que avec le code ca ira mieux.

      nom = Controls("ListBox" & i).Name

      For compt = 0 To (nom.ListCount - 1)
      If nom.Selected(compt) = True Then
      .....
      End If
      Next

      J'ai essayer aussi en remplacant dans la boucle "nom" par " Feuil12.OLEObjects(i + 1).Name " Mais cela ne marche pas ...

      As tu une idée ?
      1. Contributeur
        Bien sûr que j'ai une idée puisque c'est moi qui te donne l'adresse d'une astuce que j'ai fait.
        Tu renomme tes listBox comme indiqué.. Ex List01.. List02..List03 etc..
        Tu remplace TextBox par ListBox (dans l'astuce)
        Relit là avec attention, tu va certainement trouver.
        Ah question, tes Listbox sont sur une feuille ou un UF, parce que c'est pas la même chose pour y arriver.

        A+
    2. Elles sont sur une feuille c'est pour ca peut être que je n'ai pas bien compris ton astuce :/
      1. Contributeur
        Le principe est exactement le même, c'est juste le nom des objets qui change...
        Sub ObjListbox()
        Dim obj As OLEObject
        Dim i as Integer
        For Each obj In ActiveSheet.OLEObjects
        If TypeOf obj.Object Is MSForms.ListBox Then
        i = Val(Right(obj.Name, 2))
        'Ici tu a le N° du Listbox dans i
        'Faire action sur obj.
        Stop
        End If
        Next obj
        End Sub
        Tu dit, j'ai pas tester avec des listes, ça fonctionne avec textBox et checkBox..
        1. Merci,
          mais le nom et le numéro de la listbx j'ai pu desj les recuperer au préalable grace a ca :
          Feuil12.OLEObjects(i + 1).Name
          et a partir de la je fait comme tu le dit pour recuperer le numéro mais à partir de ce point je suit bloqué car je ne peux point reutiliser ces 2 variables ainsi obtenues.

          Car je veux verifier si la ligne une de la listebox est coché .

          Donc en reutilisant tes variables cela ne marche pas ==> obj.Name.Selected(i) ceci du a la non exitence d'index comme tu disais ?

          For compt = 0 To (ListBox1.ListCount - 1)
          If ListBox1.Selected(compt) = True Then
          Feuil2.Rows(J + 1).Insert Shift:=x1Up
          End If
          Next

          Mais comme tu peux le voir dessus ce code marche. Or je doit l'executer sur 5 Listbox

          Enfin je ne sais pas si je suis bien clair .....
          1. Contributeur
            tu doit employer l'objet exactement comme si c'était la Listbox, Cad, Obj.selected(-...
            aller..encore un exemple :)

            Sub ObjCheckbox()
            Dim obj As OLEObject
            Dim i As Integer, compt As Integer
                For Each obj In ActiveSheet.OLEObjects
                    If TypeOf obj.Object Is MSForms.ListBox Then
                        i = Val(Right(obj.Name, 2))
                        'Ici tu a le N° du text box.
                        'Faire action
                        Select Case i
                        Case XX ' le N° de la listBox que tu veux traiter
                            For compt = 0 To obj.ListCount - 1
                                If obj.Selected(compt) = True Then
                                    Feuil2.Rows(J + 1).Insert Shift:=x1Up
                                End If
                            Next
                        Case YY 'Autre liste etc.
                    End Select
                    Stop
                    End If
                Next obj
            End Sub

            Mais tu à combien de ListBox sur ta feuille ?
            Est-ce que ça vaux la peine de travailler par index ?

            1. Merci mais je me demande si le probleme ne vient pas de exel ....

              Car j'ai une erreur générer à obj.ListCount et obj.Selected(compt)
              erreur 438
              Propriété ou méthode non gérer par cette objet.

              je comprend pas pourquoi ca m'intrigue.

              Sinon j'ai contourner ce probleme grace à ton idée des "Case" J'avais oublier cette méthode merci a toi.
              J'obtiens un code lours mais bon.

              Si jamais tu vois d'ou vient l'erreur que j'obtient je suis preneur.

              merci
              1. Contributeur
                comme je l'ai dit j'ai pas tester mais essaye avec...
                obj.Object.ListCount et obj.Object.Selected(compt)
                fort probable que ça va aller.
                1. Merci plus d'erreur sauf que je revoit le code car ca ne m'affiche pas ce que je souhaite.

                  Mais tu as relger mon probleme principal Merci bien.

                  et une derniere question mais la plus en rapport avec les Objet.
                  Est ce que dans l'appel d'une fonction je peux passer toute les caracterisqitque d'une listbox
                  explication du genre

                  Call traitement (Listbox1)
                  .....

                  Sub traitement (Dim obj As OLEObject)
                  dans cette parti je peux recuperer le nom de la liste box via obj.Objet.Name ???

                  Merci encore
                  1. Contributeur
                    Pas comme ça...
                    Sub traitement (List as ListBox)
                    ....
                    ....
                    End Sub

                    et pour l'appel, si c'est dans la boucle
                    Call Traitement Obj

                    A+
                    1. Désolé pour ma réponse tardive et merci encore pour ton aide, et ta patience ^^
                      @plus