1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78
| Option Explicit
'la valeur des 5 variables suivantes sont initialisé via une BD, un fichier Txt ou toutes autres type de données mémorisées
'ces 5 variables doivent prendre leur valeur avant l'appel à la fonction ParametreR.
'Variable nom du Form sur lequel est le composant
Public NomForm As String ' ----- rendu insensible MAJ/min par code, si le nom du Form est Form1, fORM1 fonctionnera aussi -----
'Variable nom du composant
Public NomComposant As String ' ----- rendu insensible MAJ/min par code, si le nom du composant est Text1, tEXT1 fonctionnera aussi -----
'Variable index du composant, si le composant ne fait pas partie d'un groupe, donner la valeur = -1
Public IndexComposant As Integer
'Variable nom de la proriété a passer à la fonction CallByName
Public NomPropriete As String ' ------ Non sensible MAJ/min, si la proriété est Visible, vISIBLE fonctionnera aussi ------
'Variable valeur de la propriété a passer à la fonction CallByName
Public ValPropriete As Variant
'********* ValPropriete est déclarée de type variant car suivant la propriété que l'on veut modifier/initialiser,
'********* de fait, la valeur pourrat être de différent type
'
'............ Pour information ------------------
'Ces variables ne sont pas forcement obligatoire,
'par exemple vous pouvez passer directement chaque valeur par le contenu des champs d'un RecordSet
'dans ce cas, veillez à que chaque champs soit de même type que le paramètre nécessaire à la fonction ParametreR,
'ou passez par une conversion
'IndexComposant = Cint(RecordSet!Indx)
Public Function ParametreR(NameFrm As String, NameComposant As String, Idx As Integer, Propriete As String, Valeur As Variant) As Boolean
'Variable permettant de récupérer la référence de tous composants quelque soit le Form qui en fait la demande
Dim ComposantRef As Object
Set ComposantRef = RecupeComposant(NameFrm, NameComposant, Idx)
If TypeName(ComposantRef) <> "Nothing" Then
CallByName ComposantRef, Propriete, VbLet, Valeur
ParametreR = True
Else
ParametreR = False
End If
End Function
Private Function RecupeComposant(NameFrm As String, NameComposant As String, Optional Idx As Integer = -1) As Object
'foncion de referencement du composant à paramétrer
Dim ObjFrm As Form 'pour boucle For Each de la collection Forms
Dim ObjComposant As Object 'pour boucle For Each de la collection des objets sur chaque Form
Dim OkExitFor As Boolean 'permet de quitter les boucles dés que le composant à été trouvé et traité
For Each ObjFrm In Forms '********************** boucle sur toutes les Frms **********************
If UCase(ObjFrm.Name) = UCase(NameFrm) Then
For Each ObjComposant In ObjFrm '------------ boucle sur tous les composants
If UCase(ObjComposant.Name) = UCase(NameComposant) Then
'un composant sur le Frm portant ce nom vient d'être trouvé
If ExisteIndex(ObjComposant) Then 'Le composant est indexé
If ObjComposant.Index = Idx Then
'L'index du composant est bien celui que l'on veut recuperer
OkExitFor = True: Exit For
End If
Else 'le composant n'est pas indexé
OkExitFor = True: Exit For
End If
End If
Next '--------------------------------------- boucle composants
If OkExitFor = True Then
'la référence au composant a été trouvée et est valide
Set RecupeComposant = ObjComposant
Exit Function
End If
End If
Next '******************************************** boucle Frms ***************************************
'la référence du composant n'a pas été trouvée, RecupeComposant renvoie "Nothing"
End Function
Private Function ExisteIndex(Composant As Object) As Boolean
'Fonction permettant de déterminer si le composant est un groupe de composant (donc indexé)
On Error Resume Next
ExisteIndex = Composant.Index + 1
End Function |
Partager