Modifier petit code pour afficher nombre de "controls"

dudulleray -  
vieuxray Messages postés 16 Statut Membre -
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. Zoul67 Messages postés 2001 Statut Membre 149
     
    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
  2. lermite222 Messages postés 9042 Statut Contributeur 1 199
     
    Bizarre,
    tu a quel navigateur ?
    Avec Google Chrome pas de problème.
    1
  3. lermite222 Messages postés 9042 Statut Contributeur 1 199
     
    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
    1. dudulleray
       
      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
      0
    2. lermite222 Messages postés 9042 Statut Contributeur 1 199
       
      D'après ce que j'ai lu plus bas ce n'est que pour les non-membre.
      Inscrit-toi, ça coute rien.
      A+
      0
    3. dudulleray
       
      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
      0
    4. lermite222 Messages postés 9042 Statut Contributeur 1 199
       
      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.
      0
    5. vieuxray Messages postés 16 Statut Membre
       
      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
      0
  4. dudulleray
     
    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
    0
    1. Zoul67 Messages postés 2001 Statut Membre 149
       
      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+
      0
  5. Vous n’avez pas trouvé la réponse que vous recherchez ?

    Posez votre question
  6. dudulleray
     
    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
    0
    1. Zoul67 Messages postés 2001 Statut Membre 149
       
      Re,

      Le code de ta question amputé de "Range("S1").Value = Ctrl.Name" ne fonctionne pas ?
      0
  7. dudulleray
     
    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
    0
  8. lermite222 Messages postés 9042 Statut Contributeur 1 199
     
    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 .
    0
  9. dudulleray
     
    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
    0
    1. dudulleray
       
      salut lermite222

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

      ca va se résoudre en son temps
      0
    2. pijaku Messages postés 13513 Date d'inscription   Statut Modérateur Dernière intervention   2 773
       
      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!
      0
    3. dudulleray
       
      salut pijaku

      Merci beaucoup c'est nikel comme ca

      Re bon W-end

      Cdlt Ray
      0
    4. pijaku Messages postés 13513 Date d'inscription   Statut Modérateur Dernière intervention   2 773
       
      Bon week end à toi également Raymond.
      A+
      0
  10. dudulleray
     
    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
    0
    1. pijaku Messages postés 13513 Date d'inscription   Statut Modérateur Dernière intervention   2 773
       
      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+
      0
  11. dudulleray
     
    Salut pijaku

    Merci de faire remonter l'info

    Bon W-end

    Cordialement Ray
    0
  12. dudulleray
     
    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
    0