Userform : définition de variable / controle dynamique

gribouillex Messages postés 172 Date d'inscription lundi 10 octobre 2005 Statut Membre Dernière intervention 16 mai 2011 - 13 juil. 2006 à 10:36
mortalino Messages postés 6786 Date d'inscription vendredi 16 décembre 2005 Statut Membre Dernière intervention 21 décembre 2011 - 13 juil. 2006 à 17:27
Bonjour,
 
j'ai deux questions à poser concernant un userform que j'ai créé.
 
Dans un module, après plusieurs manipulations, un variable est définie (tsval) :  
 
-----------première question-------------
' code....
For A = Len(s) - 6 To Len(s) - 5
tsval = tsval + Mid(s, A, 1)
Next
 
Userform1.show
'code....
 
Dans Private Sub UserForm_Initialize() j'aimerais utiliser cette valeur.
Je sais qu'il faut que je la déclare en PUBLIC, mais je ne sais pas comment faire.....
 
-----------deuxième question-------------
Voici le code de mon userform, grâce à celui-ci je créé dynamiquement un certain nombre de textbox correspondant au nombre de cell de ma sélection.
A la suite de cette mise en place, je n'arrive pas à utiliser ces textbox. En fait, j'aimerais qu'une fois toutes les textbox éditées par l'utilisateur, elles puissent toutes remplacer les anciennes valeurs dans ma sélection.  
 
Private Sub UserForm_Initialize()
 
Dim i As Integer, j As Integer, x As Integer, y As Integer
Dim TxtB As Control
 
y = 1
 
For Each cell In Selection
Set TxtB = Me.Controls.Add("forms.Textbox.1" )
With TxtB
.Left = x * 36
.Top = 10 + ((y - 1) * 20)
.Width = 30
.Height = 15
.Text = cell.Value & "        "
End With
 
x = x + 1
If x = tsval Then
x = 0
y = y + 1
End If
 
Set TxtB = Nothing
Next cell
 
End Sub

Merci

16 réponses

mortalino Messages postés 6786 Date d'inscription vendredi 16 décembre 2005 Statut Membre Dernière intervention 21 décembre 2011 18
13 juil. 2006 à 11:38
Salut,

Pour ta première demande, il faut passer ta variable en Public.
Ce doit être placé dans les déclarations : tout en haut dans le code du module, avant toutes tes procédures.

@++
0
gribouillex Messages postés 172 Date d'inscription lundi 10 octobre 2005 Statut Membre Dernière intervention 16 mai 2011
13 juil. 2006 à 12:03
Ok merci pour ton aide... mais ca s'ecrit comment exactement (je suis newbie )
0
mortalino Messages postés 6786 Date d'inscription vendredi 16 décembre 2005 Statut Membre Dernière intervention 21 décembre 2011 18
13 juil. 2006 à 12:15
Pas de problème (faut bie apprendre un jour) !

Public variable As type donc pour ton cas :
Public tsval As String

Bon courage






























@++






























Mortalino




























Le mystérieux chevalier, "Provençal, le Gaulois"
Merci de prendre le temps de répondre à ce sondage
0
gribouillex Messages postés 172 Date d'inscription lundi 10 octobre 2005 Statut Membre Dernière intervention 16 mai 2011
13 juil. 2006 à 13:51
(c'est pas faux)

mais... ca fonctionne pas.... la variable n'est pas récupérée dans mon userform....

j'ai fait qqchose de mal ?
0

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

Posez votre question
mortalino Messages postés 6786 Date d'inscription vendredi 16 décembre 2005 Statut Membre Dernière intervention 21 décembre 2011 18
13 juil. 2006 à 13:56
C'est cotelette que tu comprends pas ?    lol

Bah en fait c'est pas normal mais je sais que des fois ça foire. (c'est M$)
De ton UserForm, quand tu as besoins de cette variable,






























rajoute devant ta variable le nom de ton module :
Module1.tsval






























A tester !






























@++






























Mortalino




























Le mystérieux chevalier, "Provençal, le Gaulois"
Merci de prendre le temps de répondre à ce sondage
0
gribouillex Messages postés 172 Date d'inscription lundi 10 octobre 2005 Statut Membre Dernière intervention 16 mai 2011
13 juil. 2006 à 14:30
Le plus facile à apprendre, c'est le sirop.

non, je crois qu'il se passe quelquechose de pas normal... ca veut toujours pas

pour rappel mon module contient ceci :

Public tsval As Long
sub macro1()
'..... plein de code
For A = Len(s) - 6 To Len(s) - 5
tsval = tsval + Mid(s, A, 1)
Next
 
Userform1.show

' plein de code....
en sub

et mon userform est comme ceci :
Option Explicit


Dim Tableau() As Variant
Dim m As Integer
Public tsval As Integer




Private Sub UserForm_Initialize()
Dim Cell As Range
Dim i As Integer, x As Integer, y As Integer
Dim tsval As Integer
Dim TxtB As Control


y = 1
 
For Each Cell In Selection
    Set TxtB = Me.Controls.Add("forms.Textbox.1")
        With TxtB
        .Left = x * 36
        .Top = 30 + ((y - 1) * 20)
        .Width = 30
        .Height = 15
        .Text = Cell.Value & "        "
        End With
       
    m = m + 1
    ReDim Preserve Tableau(2, m)
    Tableau(0, m - 1) = TxtB.Name
    Tableau(1, m - 1) = Cell.Address
   
    
    x = x + 1
    If x = Module1.tsval Then
        x = 0
        y = y + 1
    End If
    
    Set TxtB = Nothing
Next Cell




End Sub




Private Sub CommandButton1_Click()
    Dim i As Integer
   
    For i = 0 To m - 1
    Range(Tableau(1, i)) = Me.Controls(Tableau(0, i)).Object.Value
    Next i
    Unload Me
End Sub
0
mortalino Messages postés 6786 Date d'inscription vendredi 16 décembre 2005 Statut Membre Dernière intervention 21 décembre 2011 18
13 juil. 2006 à 14:49
Je préfère un bon cul d'chouette mais le sirop c'est pas mal !

Public tsval As Long   ' là je suis d'accord mais doit etre déclaré QU'UNE SEUL FOIS DANS 'TOUT TON PROJET
sub macro1()
'..... plein de code
For A = Len(s) - 6 To Len(s) - 5
tsval = tsval + Mid(s, A, 1)
Next
 
Userform1.show

' plein de code....
en sub

et mon userform est comme ceci :
Option Explicit
Dim Tableau() As Variant
Dim m As Integer
Public tsval As Integer  ' l'ayant déclaré dans le module, ici il ne faut pas.

Private Sub UserForm_Initialize()
Dim Cell As Range
Dim i As Integer, x As Integer, y As Integer
Dim tsval As Integer  ' et ça pareil, supprime le
Dim TxtB As Control

y = 1
 
For Each Cell In Selection
    Set TxtB = Me.Controls.Add("forms.Textbox.1")
        With TxtB
        .Left = x * 36
        .Top = 30 + ((y - 1) * 20)
        .Width = 30
        .Height = 15
        .Text = Cell.Value & "        "
        End With
       
    m = m + 1
    ReDim Preserve Tableau(2, m)
    Tableau(0, m - 1) = TxtB.Name
    Tableau(1, m - 1) = Cell.Address
   
    
    x = x + 1
    If x = Module1.tsval Then
        x = 0
        y = y + 1
    End If
    
    Set TxtB = Nothing
Next Cell

End Sub

@++

Mortalino

Le mystérieux chevalier, "Provençal, le Gaulois"
Merci de prendre le temps de répondre à ce sondage

/FONT>
0
gribouillex Messages postés 172 Date d'inscription lundi 10 octobre 2005 Statut Membre Dernière intervention 16 mai 2011
13 juil. 2006 à 16:11
non ca veut pas
0
mortalino Messages postés 6786 Date d'inscription vendredi 16 décembre 2005 Statut Membre Dernière intervention 21 décembre 2011 18
13 juil. 2006 à 16:20
Arf, j'avais pas vu ça :

   x = x + 1
    If x = Module1.tsval Then  '( ici x est un chiffre et tsval des caractères, rappelle toi Public tsval
' As String)
        x = 0
        y = y + 1
    End If
    
    Set TxtB = Nothing
Next Cell
Bref, dans tsval, y a quoi dedans : des caractères, de nombres ou les deux ?

@++

Mortalino

Le mystérieux chevalier, "Provençal, le Gaulois"
Merci de prendre le temps de répondre à ce sondage

/FONT>
0
mortalino Messages postés 6786 Date d'inscription vendredi 16 décembre 2005 Statut Membre Dernière intervention 21 décembre 2011 18
13 juil. 2006 à 16:23
Apparemment tu fait une extraction de données (avec Mid) donc tu as du String.
x par contre est un chiffre. Tu ne peux pas comparer une lettre avec un chiffre.

As tu une explication qui fait que ..
@++

Mortalino

Le mystérieux chevalier, "Provençal, le Gaulois"
Merci de prendre le temps de répondre à ce sondage














/FONT>
0
gribouillex Messages postés 172 Date d'inscription lundi 10 octobre 2005 Statut Membre Dernière intervention 16 mai 2011
13 juil. 2006 à 16:42
tsval sera toujour un chiffre trouvé dans une cellule, mais il est vrai que je le dis nulle part que c'est toujours un chiffre
0
mortalino Messages postés 6786 Date d'inscription vendredi 16 décembre 2005 Statut Membre Dernière intervention 21 décembre 2011 18
13 juil. 2006 à 16:44
Alors dans ton module, au lieu de Public tsval As String, met
Public tsval As Integer.

Comme ça tsval et x sont tout les deux du même type et la comparaison pourra se faire

@++

Mortalino

Le mystérieux chevalier, "Provençal, le Gaulois"
Merci de prendre le temps de répondre à ce sondage

/FONT>
0
gribouillex Messages postés 172 Date d'inscription lundi 10 octobre 2005 Statut Membre Dernière intervention 16 mai 2011
13 juil. 2006 à 16:51
je vais te décevoir... ca marche toujours pas

en fait il me fait une erreur sur la ligne

tsval = tsval + Mid(s, A, 1)

de mon module..

run time error 13 type mistmatch
0
mortalino Messages postés 6786 Date d'inscription vendredi 16 décembre 2005 Statut Membre Dernière intervention 21 décembre 2011 18
13 juil. 2006 à 16:53
Il faut certainement mettre tsval = tsval + CInt(Mid(s, A, 1))

Je l'avais oublié, Mid renvoi un String. Il faut le convertir en Integer

@++

Mortalino

Le mystérieux chevalier, "Provençal, le Gaulois"
Merci de prendre le temps de répondre à ce sondage

/FONT>
0
gribouillex Messages postés 172 Date d'inscription lundi 10 octobre 2005 Statut Membre Dernière intervention 16 mai 2011
13 juil. 2006 à 17:03
Rââââââhhhhhh

Ca veut toujours pas.. toujours la même erreur !!!

J'ai bien Public tsval As Integer tout en haut de mon module (déclaré une seule fois dans tout le projet)

J'ai mis ceci dans le module à la place de cequ'il y avait avant
tsval = tsval + CInt(Mid(s, A, 1))

et bing erreur sur cette ligne....
0
mortalino Messages postés 6786 Date d'inscription vendredi 16 décembre 2005 Statut Membre Dernière intervention 21 décembre 2011 18
13 juil. 2006 à 17:27
En fait c'est pas toi mais moi qui vais te décevoir : je bloque.
Cette erreur intervient quand les types de données à comparer sont différents.

@++

Mortalino

Le mystérieux chevalier, "Provençal, le Gaulois"
Merci de prendre le temps de répondre à ce sondage

/FONT>
0
Rejoignez-nous