Formulaire dynamique Excel

cicdrek Messages postés 4 Date d'inscription mercredi 7 juillet 2004 Statut Membre Dernière intervention 26 janvier 2007 - 23 janv. 2007 à 16:28
cicdrek Messages postés 4 Date d'inscription mercredi 7 juillet 2004 Statut Membre Dernière intervention 26 janvier 2007 - 26 janv. 2007 à 17:16
Bonjour,

J'ai créé un formulaire de façon dynamique à partir d'une feuille Excel. en attribuant à chaque zone créée un nom de variable associé à un numéro que j'incrémente.
ex: Variable1, Variable2....

Mon problème est le suivant je créé ce formulaire dans une procédure Userform_initialize()

Mais je n'arrive pas à récupérer mes données dans ma procédure cmdvalider_click()

voici mon code source(très très résumé!)
 
<hr />

PrivateSub UserForm_Initialize()
  Dim TxtActivite(1To100)As Control

h = 1
  'Initialisation des boites contenant les activités
    Set TxtActivite(h) = Controls.Add("Forms.TextBox.1")
    TxtActivite(h).Text = FeuilleActivite.Cells(h, 1).Value
    TxtActivite(h).Left = 108
    TxtActivite(h).Top = 0 + (h * 24)
    TxtActivite(h).Width = 210
    TxtActivite(h).Height = 18
 
EndSub
 
PrivateSub CmdValider_Click()
     Dim h AsInteger
     Dim TxtActivite(1To100)As Control
     h = 1
 
     If(TxtActivite(h) <> "")Then '<------- a priori c'est cette ligne qu'il n'aime pas...
...
<hr />
 c'est la qu'Excel me sort sa fameuse phrase:
variable objet ou variable de bloc with non définie

En clair il ne connait pas la variableTxtActivite(h) dans ma procédure CmdValider_Click

Si vous avez une idée sur la résolution de mon problème...<!-- / message --><!-- edit note -->

5 réponses

cavo789 Messages postés 168 Date d'inscription vendredi 9 janvier 2004 Statut Membre Dernière intervention 28 juillet 2009 1
24 janv. 2007 à 07:07
Je n'ai rien testé aussi à vérifier : ce qui m'interpelle, c'est que dans les deux sub tu redéclares Dim TxtActivate(1 to 100) as Control.  

Etant donné que cet objet est utilisé dans plusieurs subs; tu devrais en faire une variable publique.

Christophe
0
cicdrek Messages postés 4 Date d'inscription mercredi 7 juillet 2004 Statut Membre Dernière intervention 26 janvier 2007
24 janv. 2007 à 10:11
J'ai essayer effectivement de la déclarer en public mais ca ne change rien car ma véritable déclaration se fait lors de mon
Set TxtActivite(h) = Controls.Add("Forms.TextBox.1")
et celui la je ne peux pas le sortir de UserForm_Initialize.
0
cavo789 Messages postés 168 Date d'inscription vendredi 9 janvier 2004 Statut Membre Dernière intervention 28 juillet 2009 1
24 janv. 2007 à 12:32
Pour être sûr; est-ce bien ceci que tu as fais

Dim TxtActivite(1To100)As Control 
Dim h AsInteger

PrivateSub UserForm_Initialize()

   h = 1

  'Initialisation des boites contenant les activités
    Set TxtActivite(h) = Controls.Add("Forms.TextBox.1")
    TxtActivite(h).Text = FeuilleActivite.Cells(h, 1).Value
    TxtActivite(h).Left = 108
    TxtActivite(h).Top = 0 + (h * 24)
    TxtActivite(h).Width = 210
    TxtActivite(h).Height = 18
 
EndSub
 
PrivateSub CmdValider_Click()
     h = 1
 
     If(TxtActivite(h) <> "")Then

C'est-à-dire de sortir les deux DIM des subs et de les mettre en haut de ton code ?
Christophe
0
mortalino Messages postés 6786 Date d'inscription vendredi 16 décembre 2005 Statut Membre Dernière intervention 21 décembre 2011 18
26 janv. 2007 à 06:55
Salut,

Cicdrek, tu dis :
J'ai essayer effectivement de la déclarer en public mais ca ne change
rien car ma véritable déclaration se fait lors de mon
Set TxtActivite(h) = Controls.Add("Forms.TextBox.1")
et celui la je ne peux pas le sortir de UserForm_Initialize.

Et alors ??
Tu déclares, c'est un fait, mais qu'est ce que ça fait si tu le déclares dans les déclarations ? (hors procédure)
Beh ça change rien, si ce n'est que tes variables seront accessibles dans toutes les procédures de ton UserForm.
Cavo789 t'as donnée la bonne marche à suivre !

Dis toi que déclarer une variable dans les déclarations, c'est comme déclarer dans une procédure (ou fonction), à la différence que la variable est accessible dans l'ensemble de ton code UserForm.

Et sinon, pour le coup du If, voici la structure à appliquer :
If Ton_Test Then
    Instructions
ElseIf TonSecond_Test Then
    Instructions
Else
    Instructions
End If

@++

<hr size="2" width="100%" />
  --Mortalino--
Le mystérieux chevalier, "Provençal, le Gaulois"
<!--
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
cicdrek Messages postés 4 Date d'inscription mercredi 7 juillet 2004 Statut Membre Dernière intervention 26 janvier 2007
26 janv. 2007 à 17:16
Merci beaucoup mais j'ai trouvé une autre solution. il suffisait de données un Name à chacune de mes text box en utilisant la propriété .Name

et de rappeler cette textbox  dans l'autre module grace à:
Nomde la form.Controls ("LeNom de la textBox" & i).Value
ou i est la variable que j'incrémente grace à une boucle.

Bref ca marche.
0
Rejoignez-nous