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. 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. 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. Salut pijaku

      Merci de faire remonter l'info

      Bon W-end

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