VBA : Objets dans USERFORM

mprexcel

XLDnaute Junior
Bonjour à toutes et à tous,
Et félicitations "aux tenanciers" pour cette nouvelle mouture du forum.
J'ai actuellement un userform qui comporte pas moins de 80 objets (listbox, textbox, labels, multipages, commandbuttons, calendars, Optionbuttons et... 1 image).

Existe-t-il dans l'éditeur VBA une commande qui permet de lister les objets avec leurs valeurs (caption)? Par exemple, Label1= "Bonjour"?

D'avance, merci pour vos réponses.
Cordialement,
Michel
 

Fred0o

XLDnaute Barbatruc
Re : VBA : Objets dans USERFORM

Bonjour mprexcel,

Dans VBE, sélectionnes "Affichage" "Explorateur d'objets" ou tout simplement <F2>. Là, tu te mets dans la partie gauche sur le nom de ton USF, par exemple "UserForm1". Dans la partie droite, tu as le nom de tous les objets contenus dans l'USF.

A+
 
Dernière édition:

Dan

XLDnaute Barbatruc
Re : VBA : Objets dans USERFORM

Bonjour,

Un petite ajoute au code de Robert que je salue au passage...
Si tu veux voir le résultat n'oublie pas d'afficher en VBE la fenêtre d'exécution (Menu Affichage / Fenetre d'exécution ou faire CTRL + G)

Amicalement
 

mprexcel

XLDnaute Junior
Re : VBA : Objets dans USERFORM

Bonjour FredOo,
Merci pour ta réponse.
Je ne connaissais pas cette "astuce" et c'est très utile, je retrouve tous mes objets ainsi que d'autres informations.
J'ai entretemps continué mes recherches et j'ai trouver sur l'excellent
HTML:
http://silkyroad.developpez.com/VBA/ControlesUserForm/
le début d'un code pour lire les objets et les écrire dans un classeur Excel, dont voici le code :

Code:
Sub controle_USF()
Dim Ctrl As Control
i = 1
'Boucle sur la collection de contrôles
For Each Ctrl In UserForm2.Controls
Worksheets("controle").Cells(i, 1).Value = Ctrl.Name
i = i + 1
Next Ctrl
End Sub
J'essaie maintenant de lire les valeurs (Caption) des objets ... mais j'ai des soucis.
Il se pourrait donc que je reviens demander d'autres conseils...
A bientôt,
Michel
 

mprexcel

XLDnaute Junior
Re : VBA : Objets dans USERFORM

Re- FredOo,
Bonjour Dan, bonjour Robert,
Bonjour Le Fil,

Merci à vous pour votre aide.
J'ai donc continué à gratter et je suis arrivé plus ou moins à un résultat.
J'ai modifié mon code (voir post précédent) comme suit :

Code:
Sub controle_USF2()
Dim Ctrl As Control
i = 1
'Boucle sur la collection de contrôles
For Each Ctrl In UserForm2.Controls
Worksheets("controle").Cells(i, 1).Value = Ctrl.Name
If TypeName(Ctrl) Like "Label" Or TypeName(Ctrl) Like "CommandButton" Or TypeName(Ctrl) Like "Page*" Then
        Worksheets("controle").Cells(i, 2).Value = Ctrl.Object.Caption
End If
i = i + 1
Next Ctrl
End Sub

Tout va bien pour les labels et les commandbuttons.
Par contre, cela ne fonctionne pas pour les Multipages. Si je remplace Page* par MultiPage, j'ai une erreur lors de l'exécution de la macro.
Si je laisse page, je ne vois rien dans mon tableau (Worksheets("controle")).

Pourtant si je me réfère à l'aide (F1) de VBA, la commande Caption s'applique à Multipage et à d'autres également. Voir la photo attachée.

Sauriez-vous pour quelle raison, celà ne fonctionne pas dans mon cas.
Pour votre info, je suis pas un as d'Excel ni du VBA, je me débrouille avec la touche F1, beaucoup de temps et... ce forum.
A bientôt,
Cordialement,
Michel
 

Pièces jointes

  • caption.JPG
    caption.JPG
    41.6 KB · Affichages: 256

Banzai64

XLDnaute Accro
Re : VBA : Objets dans USERFORM

bonjour

Mon idée

VB:
Sub controle_USF2()
Dim Ctrl As Control

On Error Resume Next

i = 1
'Boucle sur la collection de contrôles
For Each Ctrl In UserForm2.Controls
Worksheets("controle").Cells(i, 1).Value = Ctrl.Name
'If TypeName(Ctrl) Like "Label" Or TypeName(Ctrl) Like "CommandButton" Or TypeName(Ctrl) Like "Page*" Then
        Worksheets("controle").Cells(i, 2).Value = Ctrl.Caption     'Ctrl.Object.Caption
'End If
i = i + 1
Next Ctrl
End Sub
 

mprexcel

XLDnaute Junior
Re : VBA : Objets dans USERFORM

Bonjour Banzai64,
Merci pour ta contribution.
J'ai essayé ton code et dans mon cas, en colonne 1, je retrouve bien les objets mais je n'ai rien en colonne 2.
J'avais essayé la même chose mais dans mon cas, une erreur était signalé lors de l'exécution. Sauf erreur de ma part, dans ton cas, l'erreur n'est pas apparue car il y a ON ERROR RESUME NEXT.
Cordialement,
Michel
 

laetitia90

XLDnaute Barbatruc
Re : VBA : Objets dans USERFORM

bonjour tous
un code qui donne pas mal d'infos
Private Sub UserForm_Initialize()
i = 1
Cells(1, 1) = "Name": Cells(1, 2) = "ControlTipText": Cells(1, 3) = "Height": Cells(1, 4) = "Left": Cells(1, 5) = "TypeName(Ctrl)": Cells(1, 6) = "TabIndex": Cells(1, 7) = "TabStop": Cells(1, 8) = "Tag": Cells(1, 9) = "Top": Cells(1, 10) = "Visible": Cells(1, 11) = "Width": Cells(1, 12) = "RowSource": Cells(1, 13) = "RowSourceType": Cells(1, 14) = "BoundValue": Cells(1, 15) = "[_GetID]": Cells(1, 16) = "[_GethWnd]": Cells(1, 17) = "InSelection": Cells(1, 18) = "Parent Name": Cells(1, 19) = "Cancel": Cells(1, 20) = "ControlSource": Cells(1, 21) = "Default": Cells(1, 22) = "HelpContextID": Cells(1, 23) = "LayoutEffect": Cells(1, 24) = "Object"
Cells(1, 25) = "Parent": Cells(1, 26) = "Accelerator": Cells(1, 27) = "Caption": Cells(1, 28) = "ForeColor": Cells(i, 29) = "BackColor"
On Error Resume Next
For Each c In Me.Controls
i = i + 1
With c
Cells(i, 1) = .Name
Cells(i, 2) = .ControlTipText
Cells(i, 3) = .Height
Cells(i, 4) = .Left
Cells(i, 5) = TypeName(c)
Cells(i, 6) = .TabIndex
Cells(i, 7) = .TabStop
Cells(i, 8) = .Tag
Cells(i, 9) = .Top
Cells(i, 10) = .Visible
Cells(i, 11) = .Width
Cells(i, 12) = .RowSource
Cells(i, 13) = .RowSourceType
Cells(i, 14) = .BoundValue
Cells(i, 15) = .[_GetID]
Cells(i, 16) = .[_GethWnd]
Cells(i, 17) = .InSelection
Cells(i, 18) = .Parent.Name
Cells(i, 19) = .Cancel
Cells(i, 20) = .ControlSource
Cells(i, 21) = .Default
Cells(i, 22) = .HelpContextID
Cells(i, 23) = .LayoutEffect
Cells(i, 24) = .Object
Cells(i, 25) = .Parent
Cells(i, 26) = .Accelerator
Cells(i, 27) = .Caption
Cells(i, 28) = .ForeColor
Cells(i, 29) = .BackColor
End With
Next c
End Sub
 

tototiti2008

XLDnaute Barbatruc
Re : VBA : Objets dans USERFORM

Bonjour à tous,

Juste pour le plaisir de proposer un code un peu plus court que l'excellent code de Laetitia ;)

Code:
Private Sub UserForm_Initialize()
Dim i As Long, j As Long
i = 1
Cells(1, 1) = "Name": Cells(1, 2) = "ControlTipText": Cells(1, 3) = "Height": Cells(1, 4) = "Left": Cells(1, 5) = "TypeName(Ctrl)": Cells(1, 6) = "TabIndex": Cells(1, 7) = "TabStop": Cells(1, 8) = "Tag": Cells(1, 9) = "Top": Cells(1, 10) = "Visible": Cells(1, 11) = "Width": Cells(1, 12) = "RowSource": Cells(1, 13) = "RowSourceType": Cells(1, 14) = "BoundValue": Cells(1, 15) = "[_GetID]": Cells(1, 16) = "[_GethWnd]": Cells(1, 17) = "InSelection": Cells(1, 18) = "Parent Name": Cells(1, 19) = "Cancel": Cells(1, 20) = "ControlSource": Cells(1, 21) = "Default": Cells(1, 22) = "HelpContextID": Cells(1, 23) = "LayoutEffect": Cells(1, 24) = "Object"
Cells(1, 25) = "Parent": Cells(1, 26) = "Accelerator": Cells(1, 27) = "Caption": Cells(1, 28) = "ForeColor": Cells(i, 29) = "BackColor"
On Error Resume Next
For Each c In Me.Controls
i = i + 1
With c
For j = 1 To 29
Cells(i, j) = CallByName(c, Cells(1, j), VbGet)
Next j
End With
Next c
End Sub
 
G

Guest

Guest
Re : VBA : Objets dans USERFORM

Bonjour tous,

En parlant de réduction::)
Code:
Range(Cells(1, 1), Cells(1, 29)) = Array("Name", "ControlTipText", "Height", "Left", "TypeName(Ctrl)", "TabIndex", "TabStop", "Tag", "Top", "Visible", "Width", "RowSource", "RowSourceType", "BoundValue", "[_GetID]", "[_GethWnd]", "InSelection", "Parent Name", "Cancel", "ControlSource", "Default", "HelpContextID", "LayoutEffect", "Object", "Parent", "Accelerator", "Caption", "ForeColor", "BackColor")
A+:)
 

mprexcel

XLDnaute Junior
Re : VBA : Objets dans USERFORM

Re- Laetitia90, tototiti2008, Hasco, le fil,
Voilà, j'ai testé vos propositions et c'est.... nickel. C'est exactement cela que je cherchais. Je l'ai rêvé, vous l'avez fait.
Voilà un code que je fais immédiatement mettre en bonne place, pour références futures (et nombreuses!).

Encore mille, merci.

Ceci dit, ne trouvez-vous pas que c'est le genre de "chose" qui devrait se trouver en base dans l'éditeur VBA?

Cordialement,
Michel
 

mprexcel

XLDnaute Junior
Re : VBA : Objets dans USERFORM

Re-bonjour à tous,

Les solutions proposées m'ont "mis l'eau à la bouche"....
Est-il possible de faire l'opération contraire?
Je m'explique :
grâce aux codes donnés, j'écris dans une feuille tous les renseignements. J'ai donc un tableau qui me permet très facilement de voir si par exemple, j'ai la même couleur de fond pour tous les textbox.
Si ce n'est pas le cas, je pourrais modifier dans la feuille et puis renvoyer aux objets présents dans l'Userform.
Je crois qu'en "retournant" le code déjà proposé et en faisant quelque chose comme :

For Each c In Me.Controls
With c
.Name = Cells(i, 1)
.ControlTipText = Cells(i, 2)

cela devrait être possible. Oui/non?

Merci pour vos réponses.
Cordialement,
Michel
 

jp14

XLDnaute Barbatruc
Re : VBA : Objets dans USERFORM

Bonjour à tous

Ci joint un fichier qui permet de modifier les propriétés des contrôles dans un userform. Il faut après une modification fermer le classeur et l'ouvrir pour faire une modification sur la même propriété.

Indiquer colonne A le nom du contrôle, colonne B le nom de la propriété et colonne C la nouvelle Valeur. L'userform1 du classeur permet de faire des tests.


A tester

JP
 

Pièces jointes

  • changer les proprietes.zip
    45.7 KB · Affichages: 221
Dernière édition:

Statistiques des forums

Discussions
312 304
Messages
2 087 067
Membres
103 451
dernier inscrit
Souleymane