Modifier petit code pour afficher nombre de "controls"

Bonjour a toutes et tous, forum bonjour



Excel 2007 VBA windows 7 32 bits

je souhaiterai svp compter le nombre de controls (Tous) de mon Userform1

et l'afficher dans l'ordre dans la colonne (S) a partir de S1

j'ai bidouiller ce petit code mais ca marche pas bien pour l'ordre d'affichage.

Merci a vous pour votre temps et bonne journée

Cdlt Ray


'Compte le nombre de contrôles dans l'userform(1)

Dim Ctrl As Control, Cpt As Long
Cpt = 1
For Each Ctrl In Me.Controls

Cells(Cpt, 19).Value = Ctrl.Name
Range("S1").Value = Ctrl.Name

Cpt = Cpt + 1
Next Ctrl

11 réponses

  1. Bonjour Raymond,

    Ceci est faux :
    Cells(Cpt, 19).Value = Ctrl.Name
    Range("S1").Value = Ctrl.Name

    car S1 est écrasé à chaque passage de boucle.
    Il ne faut conserver que la première ligne.
    Ensuite, tu parles d'ordre... Quel ordre ? alphabétique ? TabIndex ? position dans le UserForm ?

    A+
    1. Salut Zoul67,

      Merci bien pour ta réponse

      ça démarre mal, LOL, mais, je ne sais pas faire autrement.


      Ceci est faux :

      Cells(Cpt, 19).Value = Ctrl.Name
      Range("S1").Value = Ctrl.Name


      Bon je souhaiterai svp juste savoir le nombre de controls tout confondu que j'ai dans mon USF

      Quand je dis dans l'ordre c'est tout simplement compter tous le Labels puis les

      Textboxs les Frames etc etc

      J'avais vu un petit code sur le net qui faisait ce que tu dit (Quel ordre ? alphabétique ? TabIndex ? position dans le UserForm ? )

      mais bien sur, je ne retrouve plus.

      Merci beaucoup pour ton aide

      Cdlt Ray
      1. Re,

        Quand je disais première ligne, je pensais à celle-ci :
        Cells(Cpt, 19).Value = Ctrl.Name
        qui est bonne.
        Soit tu les listes, soit tu les comptes en te basant sur ceci (ici : décompte des Listbox-es) :
        Dim ctrl As msforms.Control, cnt As Long
        cnt = 0
        For Each ctrl In UserForm1.Controls
        If TypeOf ctrl Is msforms.ListBox Then
        cnt = cnt + 1
        End If
        Next
        MsgBox cnt


        A+
    2. Re Zoul67

      Merci pour le petit code, j'ai essayer ca fonctionne bien.

      Mais comment svp je peux faire pour lister tous les controls en une seule fois

      et afficher le tout dans la colonne S

      Merci beaucoup

      a plus tard

      Cdlt Ray
      1. Re,

        Le code de ta question amputé de "Range("S1").Value = Ctrl.Name" ne fonctionne pas ?
    3. Re,

      Si cela fonctionne mais l'affichage n'ai pas comme je souhaitai

      Exemple qui serai afficher dans la colonne (S)

      label1
      label2
      label3
      textbox1
      textbox2
      textbox3
      frame1
      frame2
      combobox1
      combobox2

      etc etc etc

      Merci a toi

      Ray
      1. Contributeur
        Bonjour,
        Un exemple pour afficher tout les contrôles par catégorie
        Private Sub CommandButton4_Click()
        Dim Ctl As Control
        Dim Lab() As String, Command() As String, Txt() As String, Autre() As String
        Dim Lb As Integer, Cd As Integer, Tx As Integer, Aut As Integer
        ReDim Lab(0): ReDim Command(0): ReDim Txt(0): ReDim Autre(0)
        Dim Mess As String, i As Integer, CR
        CR = Chr(13)
            For Each Ctl In Me.Controls
                Select Case TypeName(Ctl)
                Case "Label": ReDim Preserve Lab(Lb): Lab(Lb) = Ctl.Name: Lb = Lb + 1
                Case "CommadButton": ReDim Preserve Command(Cd): Command(Cd) = Ctl.Name: Cd = Cd + 1
                Case "TextBox": ReDim Preserve Txt(Tx): Txt(Tx) = Ctl.Name: Tx = Tx + 1
                Case Else: ReDim Preserve Autre(Aut): Autre(Aut) = Ctl.Name: Aut = Aut + 1
                End Select
            Next Ctl
            'Exemple d'affichage par catégorie de contrôles.
            Mess = "Il y a " & Lb & " Label" & CR
            For i = 0 To Lb - 1
            Mess = Mess & Lab(i) & CR
            Next i
            Mess = Mess & "Il y a " & Tx & " TextBox" & CR
            For i = 0 To Tx - 1
            Mess = Mess & Txt(i) & CR
            Next i
            '... la suite
            Mess = Mess & "Il y a " & Me.Controls.Count & " controls dans l'userform"
            MsgBox Mess
        End Sub 

        A adapter bien entendu.
        A+
        Si tu te cognes à un pot et que ça sonne creux, c'est pas forcément le pot qui est vide. ;-)(Confucius)
        Note: Je ne répond pas aux MP pour les questions techniques. Et ma boule de cristal est cassée .
        1. Salut lermite222

          Merci pour ta réponse et pour le code

          impossible de prendre ton code en copier coller pour faire l'essai

          ca mets tout les lignes de code bout a bout, ça donne une ligne de code de 300 metres LOL

          je vais imprimer et le taper

          Merci a toi bonne après midi

          Cdlt Ray
          1. salut lermite222

            tu a vu la reponse faite de pijaku, il y a bien un soucis

            ca va se résoudre en son temps
          2. Modérateur
            En attendant, j'ai édité le code de lermitte222 et ajouté la balise <code basic> qui va te permettre de copier-coller.........

            Au passage, je te salue lermitte222! Bonne journée à toi!
          3. salut pijaku

            Merci beaucoup c'est nikel comme ca

            Re bon W-end

            Cdlt Ray
          4. Modérateur
            Bon week end à toi également Raymond.
            A+
        2. Contributeur
          Bizarre,
          tu a quel navigateur ?
          Avec Google Chrome pas de problème.
          1. Google Chrome sous windows 7 32 bits

            ca marchai encore bien tout a l'heure, ca arrive assez souvent mème quand je réponds aux gens le curseur se bloque pour écrire disparait

            c'est uniquement sur ce forum, sinon jamais d'ennuie particulier

            tant pis je vais le taper tout a l'heure
            1. Modérateur
              Bonjour,

              Il y a effectivement un petit bug avec les balises <code>.
              Le copié-collé (donc le copié en l'occurrence) bug pour les non-inscrits.

              Par contre, je n'ai pas ton souci de curseur, même en tant que non-inscrit.

              Je fais remonter l'info, en tout cas.
              Merci et bonne continuation

              A+
          2. Salut pijaku

            Merci de faire remonter l'info

            Bon W-end

            Cordialement Ray
            1. Re lermite222

              Bon après ce petit soucis , j'ai pu copier ton code

              je l'ai essayer ca m'a l'air de fonctionner mais a l'affichage dans la MSGBOX

              comme il y a beaucoup de controls

              la msgbox s'affiche sur toute la hauteur de l'ecran et je ne peux pas la faire défiler

              ce qui fait que je ne vois que le début de la liste.

              Mais si on pouvais svp faire en sorte d'afficher la liste dans ma colonne (S) ça

              m'arrangerai bien

              Merci pour ton aide

              Ray
              1. Contributeur
                Je pensais que tu serais assez "fort" pour transcrire sur une feuille. :=)
                Private Sub CommandButton9_Click()
                Dim Ctl As Control
                Dim Lab() As String, Command() As String, Txt() As String, Autre() As String
                Dim Lb As Integer, Cd As Integer, Tx As Integer, Aut As Integer
                ReDim Lab(0): ReDim Command(0): ReDim Txt(0): ReDim Autre(0)
                Dim i As Integer

                For Each Ctl In Me.Controls
                Select Case TypeName(Ctl)
                Case "Label": ReDim Preserve Lab(Lb): Lab(Lb) = Ctl.Name: Lb = Lb + 1
                Case "CommadButton": ReDim Preserve Command(Cd): Command(Cd) = Ctl.Name: Cd = Cd + 1
                Case "TextBox": ReDim Preserve Txt(Tx): Txt(Tx) = Ctl.Name: Tx = Tx + 1
                Case Else: ReDim Preserve Autre(Aut): Autre(Aut) = Ctl.Name: Aut = Aut + 1
                End Select
                Next Ctl
                'Exemple d'affichage par catégorie de contrôles.
                Dim Lig As Long
                Lig = 2
                With ActiveSheet
                .Columns("S:S").ClearContents
                .Cells(Lig, "S") = "Il y a " & Lb & " Label"
                Lig = Lig + 1
                For i = 0 To Lb - 1
                .Cells(Lig, "S") = Lab(i)
                Lig = Lig + 1
                Next i
                Lig = Lig + 1
                .Cells(Lig, "S") = "Il y a " & Tx & " TextBox"
                Lig = Lig + 1
                For i = 0 To Tx - 1
                .Cells(Lig, "S") = Txt(i)
                Lig = Lig + 1
                Next i
                '... la suite
                Lig = Lig + 1
                .Cells(Lig, "S") = "Il y a " & Me.Controls.Count & " controls dans l'userform"
                End With
                End Sub
                A+
                1. Salut lermite222

                  merci pour la reponse et le code modifier c'est sympa

                  rassure toi bien que j'ai essayer de modifier et que je voulais arriver seul

                  Mais hélas pour moi je n'y suis pas parvenu

                  Heureusement qu'il y a internet et surtout des gens comme toi qui partage

                  leur savoir

                  je partage souvent mes bras ( bricoles en tout genre ) et je peux te dire que je n'ai pas

                  souvent de merci.

                  Bon en tout cas le code proposer fonctionne bien

                  je te souhaite un excellent W-end accompagner de tous mes remerciements.

                  Cordialement Raymond

                  PS: tu a vu qu'il y a bien un soucis de copier coller sur le site
                2. Contributeur
                  D'après ce que j'ai lu plus bas ce n'est que pour les non-membre.
                  Inscrit-toi, ça coute rien.
                  A+
                3. Salut lermite222

                  Merci ok je vais m'inscrire

                  Pendant que je te tiens iihihihih

                  j'ai excel 2007 version etudiant depuis un moment, on m'offre l'achat d'une version plus récente

                  Excel 2010 ou 2013 officielle bien sur

                  tu pourrai svp m'aiguiller et conseiller pour acheter un Excel

                  j'ai fouiller un peu mais je suis un peu indécis

                  Merci a toi bon W-end

                  Cdlt Raymond
                4. Contributeur
                  Tant qu'il n'y a pas de changement fondamental entre les versions comme par exemple entre le 2003 et le 2007, ça ne vaux pas beaucoup la peine de changer.
                  De plus, certaine fonctions sont déjà différentes entre le 2007 et le 2010 ce qui nécessite du remaniement de code.
                5. Ok merci pour ta réponse, c'est gentil,

                  je voulais refaire mon programme de compta sur une autre version

                  mon programme est sensible a excel

                  Excel a cesser de fonctionner
                  Excel doit redemarer

                  Mon excel est installer correctement sur un bon pc, suis peut etre pas bon pour le VBA
                  mais le matos je connais.

                  peut etre mon fichier corrompu ou je ne sais plus quoi d'ailleurs
                  un coup le poids grossi ensuite ca rebaisse

                  c'est a plus rien y comprendre

                  j'ai fait plusieurs le tour du code et fait fonctionner le programme tourne nikel
                  si je modifie des fois c'est bon, des fois non, (réponse de Normand)

                  Bon sinon suis inscrit voila

                  merci a toi bon w-end

                  Raymond