Déclaration variable en tant que propriété

Bonjour,

J'essaie de réduire au mieux un code VBA et je cherche à automatiser l'écriture de texte d'un formulaire dans des cellules.

Voici le code à automatiser :

Range("Tab!A" & ligne).Value = T1.Value
Range("Tab!B" & ligne).Value = T2.Value
Range("Tab!C" & ligne).Value = T3.Caption
Range("Tab!D" & ligne).Value = T4.Caption
Range("Tab!E" & ligne).Value = T5.Value
Range("Tab!F" & ligne).Value = T6.Caption
Range("Tab!G" & ligne).Value = T7.Caption
Range("Tab!H" & ligne).Value = T8.Caption
Range("Tab!I" & ligne).Value = T9.Caption
Range("Tab!J" & ligne).Value = T10.Caption
Range("Tab!K" & ligne).Value = T11.Value
Range("Tab!L" & ligne).Value = T12.Value
Range("Tab!M" & ligne).Value = T13.Value
Range("Tab!N" & ligne).Value = T14.Value
Range("Tab!O" & ligne).Value = T15.Caption
Range("Tab!P" & ligne).Value = T16.Caption
Range("Tab!Q" & ligne).Value = T17.Caption
Range("Tab!R" & ligne).Value = T18.Value

Le problème est qu'il y a deux types de propriétés à utiliser, selon qu'il s'agit d'une TextBox/ListBox/ComboBox (Value) ou bien d'un simple intitulé (Caption).

J'ai donc voulu automatiser ce code en le réduisant à une boucle for faisant intervenir une fonction :

Dim j As Byte
Dim c As String
For j = Asc("A") - 64 To Asc("R") - 64
c = Chr(j + 64)
Me.Controls("T" & j).texte(j) = Range("Tab!" & c & ligne)
Next j

Et la fonction en question :

Function texte(t As Byte) As Object 'Comment déclarer la variable comme propriété?

If Me.Controls("T" & t).TabStop = True Then
texte = "Value"
Else
Text = "Caption"
End If
End Function

Mais je ne sais pas comment déclarer correctement la variable...

Je suis ouvert à toute proposition!

Bonjour,

Essayer ceci

        If TypeOf Me.Controls("T" & j) Is MSForms.Label Then
            Me.Controls("T" & j).Caption = Range("Tab!" & c & ligne)
        Else
            Me.Controls("T" & j).Value = Range("Tab!" & c & ligne)
        End If

Merci pour l'astuce!!

Petit soucis néanmoins, je n'arrive pas à lire une ligne vide (pour en créer un nouveau contact par exemple)

Le débogage montre la ligne

Me.Controls("T" & j).Value = Range("Tab!" & c & ligne)

Edit : Problème corrigé, merci!

thev a écrit :

Bonjour,

Essayer ceci

        If TypeOf Me.Controls("T" & j) Is MSForms.Label Then
            Me.Controls("T" & j).Caption = Range("Tab!" & c & ligne)
        Else
            Me.Controls("T" & j).Value = Range("Tab!" & c & ligne)
        End If
Rechercher des sujets similaires à "declaration variable tant que propriete"