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. Contributeur
      Bizarre,
      tu a quel navigateur ?
      Avec Google Chrome pas de problème.
      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
      2. 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+
      3. 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 ?
      4. 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. 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+
          3. 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