Propriétés de controles

Chrige

XLDnaute Occasionnel
Bonjour à tout le Forum

Depuis longtemps je me demande à quoi peuvent bien servir certaines propriétés de contrôles
Ils peuvent parfois être très nombreux
Certains sont connus, d'autres très explicites
Mais pour d'autres ??
Si je prends les propriétés d'un ComboBox
Je vois la propriété SpecialEffect, a quoi peut elle bien servir ??
Même en la testant, alors que l'effet devrait être visuel, je vois aucune différence ?
Je recherche au cas par cas, mais c'est laborieux et souvent on en ressort pas plus avancé.

Y aurait-il quelqu’un qui pourrait me dire s'il y a moyen de trouver sur le net la fonction de toutes ces propriétés ?

Merci
 

Modeste geedee

XLDnaute Barbatruc
Re, Bonsoir Modeste geedee

Modeste geedee


Comme Microsoft est anglophone, il cause Special mais jamais Spécial :)

NB: C'etait peut-etre volontaire de ta part ce é?
Dans ce cas, desole du derangement ;)
Staple1600 à dit:
La navigateur corrige l'orthographe mais ne fait pas encore les tokens anglo-saxons.
Mea culpa, mea maxima culpa.
:p
Non, mon méat ne coule pas !!!
:rolleyes: encore moins doué pour le latin que pour la langue du chat qui expire ...
 
Dernière édition:

Chrige

XLDnaute Occasionnel
Bonjour Modeste, Stapple et tout le Forum

Modeste : Effectivement quand on a une bonne connaissance de l'anglais, çà aide pas mal
D’ailleurs la traduction est bien plus parlante que le résultat
Si Stapple voit très bien la différence
Pour ma part, je ne vois que très peu cette différence ??

J'avais trouvé un passionné très dévoué
Qui avait pris le temps de tout traduire les commendes VBA dans un classeur Excel
Un travail plus qu'important !!
Si il existait la même chose en qui concerne les propriétés des contrôles
Ce serait parfait pour moi ???

A+
 

Staple1600

XLDnaute Barbatruc
Bonjour le fil, le forum

[avis personnel]
Est-ce utile de connaître en amont toutes les propriétés des contrôles?
A mon sens, pour la création d'un "outil" Excel contenant du VBA, ce qui prime c'est le cahier des charges
J'utilise tel contrôle pour faire telle action etc..
Une fois la maquette du projet est définie, que le choix des contrôles, objets est défini.
Tu peux commencer à explorer les propriétés
[/avis personnel]
Bonjour Modeste, Stapple et tout le Forum
Si Stapple voit très bien la différence
Pour ma part, je ne vois que très peu cette différence ??
Tu as testé avec la macro que j'ai posté dans le message#2
(Quand on clique sur chaque OptionButton, on voit bien changer l'aspect du ComboBox
En tout cas, c'est le cas sur mon PC
(NB: C'est copie d'écran n'est pas obtenue suite à l'emploi de la macro précédemment postée
J'ai manuellement modifié certaines propriétés puis afficher l'userform)
01Propert.jpg

Pour le dernier ComboBox , ce n'est pas la propriété SpecialEffect que j'ai modifié
mais les propriétés suivantes:
BackColor, BorderColor, BorderStyle, DropButtonStyle, ForeColor et ListStyle
 
Dernière édition:

Chrige

XLDnaute Occasionnel
Re

Oui c'est pas faux, je suis d'accord avec toi
Tu as plus qu'un très bon niveau en VBA
Ce qui est loin d'être mon cas !
Ton résonnement est donc évident pour toi
Tandis que pour moi, à part les propriétés d'aspect qui sont secondaires
Ne connaissant pas toutes les propriétés, je passe fatalement à côté de certaines possibilités
D’où ma demande.

Oui j'ai bien réalisé l'UserForm avec un grand ComboBox (Pour bien voir !)
Je l'avais déjà fait à vrai dire directement sur une feuille Excel avec de petits ComboBox pour toutes les propriétés d'aspect
(sauf en qui concerne les couleurs bien sûr)
Avec ta macro, on voit mieux la différence, mais c'est très léger et je ne vois vraiment l'utilité de cette propriété.
Mais les gouts et les couleurs comme on dit !
Et tu as aussi probablement une meilleure vue que moi

A+
 

Staple1600

XLDnaute Barbatruc
Re

A toutes fins utiles, une petite macro (perfectible) qui listera sur une feuille certaines propriétes des contrôles présents sur un userform donné
VB:
Sub Lister_Propriétés_CTRL()
Dim t, i&, ArrCT() As Variant, cTRL As MSForms.Control
t = Array(Array(1, 1), Array(2, 1), Array(3, 1), Array(4, 1), Array(5, 1))
'Indiquez le nom de l'userform à lister
    For Each cTRL In UserForm1.Controls
        i = i + 1: ReDim Preserve ArrCT(1 To i)
        'ajouter les propriétes à lister sur le même modèle:cTRL.Object.NomDeLaPropriété
        ArrCT(i) = TypeName(cTRL) & "|" & cTRL.Name & "|" _
        & cTRL.SpecialEffect & "|" _
        & cTRL.BackColor & "|" & cTRL.BorderColor
    Next cTRL
'adapter plage et noms entêtes selon les besoins
Sheets(1).Range("A1:E1") = Array("Type de Contrôle", "Nom du Contrôle", "Effet Special", "Coulour de Fond", "Couleur de Bordure")
With Sheets(1).Range("A2").Resize(UBound(ArrCT))
    .Value = Application.Transpose(ArrCT)
    .TextToColumns Destination:=Range("A2"), DataType:=1, Other:=-1, OtherChar:="|", FieldInfo:=t
End With
End Sub
Le souci c'est que ce qui est renvoyé c'est la valeur de la constante.
(pas le texte qu'on peut lire dans la fenêtre Propriétés)

Certaines propriétés ne sont que d'ordre esthétique et donc n'influe pas sur le pourquoi de l'emploi de tel ou tel contrôle.



PS: Je n'ai pas un niveau en VBA.
J'ai juste passé trop de temps devant un écran depuis la sortie d'Excel 4.0 ;)
 
Dernière édition:

Staple1600

XLDnaute Barbatruc
Re

@Chrige
Comme précisé dans mon précédent message, cette macro liste les contrôles d'un userform
(donc à ne pas utiliser pour des contrôles sur une feuille)
La macro doit être dans un Module Standard.

Testée sans souci sur mon PC avec Excel 2013.

NB: Elle plantera si on ajoute dans la boucle des propriétés étrangères à certains contrôles
Exemple:
Si il y a un CommandButton, plantage car le CommandButton n'a pas de propriété SpecialEffect.
 
Dernière édition:

Chrige

XLDnaute Occasionnel
Re

Oui cela je l'avais bien compris
J'avais même bien sûr créer un Userform
Mais je n'avais pas mis de contrôle à l'intérieur !!

Là avec une ListBox, c'est bon
Par contre je ne vois pas pour l’instant comment voir une autre propriété ?

A++
 

Staple1600

XLDnaute Barbatruc
Re

@Chrige
Ma macro était proposé a titre illustratif.
Elle n'est solution de rien ;)

Comme dit précédemment* ce qui compte, c'est le travail préparatoire en amont
(Ai-je besoin d'un userform?
Si oui quels contrôles me sont nécessaires?
Ai-je besoin de modifier leur propriétés par défaut?
etc...
etc..)

Ps: *: C'est là mon sentiment exprimé à titre personnel.
 

Chrige

XLDnaute Occasionnel
Re
J'avais vu que tu avais mis :
'ajouter les propriétés à lister sur le même modèle:cTRL.Object.NomDeLaPropriété
Je pensais donc que l'on pouvait ajouter d'autres propriétés
Mais je suis ton résonnement
Merci encore
A+
 

Si...

XLDnaute Barbatruc
Bon_soir

[avis personnel de Staple]
Une fois la maquette du projet est définie, que le choix des contrôles, objets est défini.
Tu peux commencer à explorer les propriétés.

[/avis personnel de celui qui ne veut pas être invisible;)]

Les choix des contrôles dépendent en partie de ce qu'ils offrent donc de leurs propriétés*, non ?

Le propos n'est-il pas de connaître l'implication des propriétés proposées ?

Pour ma part, j'en fais une recherche personnelle : je les teste (macros obligent pour chacune de celles que je ne connais pas) sur différents cas et si je me perds en conjectures, je vais voir ailleurs si JM** y est !

Evidemment ce serait plus intéressant si certains avaient déjà fait ce travail mais alors : Goto #1 (en français, pour ceux qui ne le savent pas : retour à l'envoyeur).

* À chaque demande concernant les Cases à cocher ou les Boutons d'option, je propose de les remplacer par autre chose, par exemple, par un contrôle ListBox avec ses propriétés ListStyle et MultiSelect (propriétés à connaître).

**J'en MLien suppriméetspleinlesmirettes (Site de recherche en tout genre)

Nota : Chrige, des réponses positives à des demandes successives sur ce site, pourraient te permettre de nous construire ce fichier non :cool:?
 

Staple1600

XLDnaute Barbatruc
Re, Bonsoir Si...

Re
J'avais vu que tu avais mis :
'ajouter les propriétés à lister sur le même modèle:cTRL.Object.NomDeLaPropriété
Je pensais donc que l'on pouvait ajouter d'autres propriétés
Mais je suis ton résonnement
Merci encore
A+

On peut rajouter d'autres propriétés en vérifiant si celles-ci sont utilisées par les contrôles ou alors il faut écrire autrement ma macro en faisant le distinguo entre les types de contrôles.

On pourrait partir sur un truc de ce genre mais vu le nombre de propriétés disponibles, ça va être coton.
VB:
Sub test()
Dim Intitules, ctrl As MSForms.Control
Intitules = Array("fmSpecialEffectFlat", "fmSpecialEffectRaised", "fmSpecialEffectSunken", "fmSpecialEffectEtched", vbNullString, vbNullString, "fmSpecialEffectBump")
'selon le type de contrôle on ajoute ou pas des propriétés
For Each ctrl In UserForm1.Controls
    Select Case True
    Case TypeOf ctrl Is MSForms.CheckBox
    MsgBox ctrl.Name & Chr(13) & ctrl.SpecialEffect & ": " & Intitules(ctrl.SpecialEffect)
    Case TypeOf ctrl Is MSForms.TextBox
    MsgBox ctrl.Name & Chr(13) & ctrl.SpecialEffect & ": " & Intitules(ctrl.SpecialEffect)
    Case TypeOf ctrl Is MSForms.ComboBox
    MsgBox ctrl.Name & Chr(13) & ctrl.SpecialEffect & ": " & Intitules(ctrl.SpecialEffect)
    End Select
Next ctrl
End Sub
 
Dernière édition:

Chrige

XLDnaute Occasionnel
Bonjour Si, Stapple

Oui c'est vrai que le nombre de propriété pour certains contrôles peut être très important
Mais je n'avais pas vu la chose comme cela.
Je parlais de lister d'autres propriétés pour un même contrôle.

Par exemple les propriétés sur une seule ListBox
Mais là effectivement la boucle est faite sur les contrôles et non sur les propriétés.
Mais pour une listebox on frôle les 40 propriétés !!
Faire une telle macro serait donc laborieux.

Le rôle d'une boucle c'est de faire des tests comme par exemple sur des cellules successives.
Je vais dire peut-être une bêtise ??
Ne pourrait-on pas lister toutes les propriétés de la 1ère à la dernière pour un seul contrôle
Comme on le ferais pour ces cellules de A1 à A40 ?

A+
 

Staple1600

XLDnaute Barbatruc
Bonsoir le fil, le forum

En attendant une solution exploitant API et/ou DLL

Voici un petit essai (toujours à peaufiner)
On peut continuer les propriétés en ajoutant
Cells(1, N) = ctl.NomDeLaPropriété
Le souci restant étant que selon le contrôle testés, certaines propriétés généreront ou pas des erreurs.
Dans l'exemple ci-dessous, on a un UserForm avec deux TextBox
Modifier les propriétés du TextBox1 et du TextBox2 (en faisant en sorte qu'elles diffèrent)
Puis lancer test_I (voir résultat sur la feuille active)
Puis lancer test_II (voir résultat sur la feuille active)
VB:
Sub test_I()
ListeControle UserForm1, UserForm1.TextBox1
End Sub
Sub test_II()
ListeControle UserForm1, UserForm1.TextBox2
End Sub
Private Sub ListeControle(frm As MSForms.UserForm, ctl As MSForms.Control)
Rows(1).Clear
Cells(1, 1) = TypeName(ctl)
Cells(1, 2) = ctl.Name
Cells(1, 3) = ctl.BackStyle
Cells(1, 4) = ctl.BorderColor
Cells(1, 5) = ctl.BorderStyle
Cells(1, 6) = ctl.BackColor
Cells(1, 7) = ctl.Height
Cells(1, 8) = ctl.Width
Cells(1, 9) = ctl.Left
Cells(1, 10) = ctl.Top
Cells(1, 11) = IIf(Len(ctl.Tag) = 0, "Vide", ctl.Tag)
Cells(1, 12) = ctl.MaxLength
Cells(1, 13) = ctl.Font.Name
Cells(1, 14) = ctl.ForeColor
Cells(1, 15) = ctl.Locked
End Sub

NB: On peut aussi l'écrire ainsi, mais c'est point lisible (surtout si on rajoute des propriétés)
VB:
Private Sub ListeControle(frm As MSForms.UserForm, ctl As MSForms.Control)
Rows(1).Clear
With ctl
    Range("A1:O1") = _
    Array(TypeName(ctl), .Name, .BackStyle, .BorderColor, _
    .BorderStyle, .BackColor, .Height, .Width, _
    .Left, .Top, IIf(Len(.Tag) = 0, "Vide", .Tag), _
    .MaxLength, .Font.Name, .ForeColor, .Locked)
End With
End Sub
 
Dernière édition:

Chrige

XLDnaute Occasionnel
Bonsoir Stapple, Bonsoir à tous

J'ai bien tenté ta macro
Un userform plus 2 textbox avec des propriétés différentes
J'ai tenté les 2 macros

Tu dis à à peaufiner
J'ai bien peur de ne pas être à la hauteur
Ma feuille reste vide

A+
 

Discussions similaires

Statistiques des forums

Discussions
312 176
Messages
2 085 962
Membres
103 067
dernier inscrit
el_privach