Userform : définition de variable / controle dynamique
gribouillex
Messages postés172Date d'inscriptionlundi 10 octobre 2005StatutMembreDernière intervention16 mai 2011
-
13 juil. 2006 à 10:36
mortalino
Messages postés6786Date d'inscriptionvendredi 16 décembre 2005StatutMembreDernière intervention21 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
mortalino
Messages postés6786Date d'inscriptionvendredi 16 décembre 2005StatutMembreDernière intervention21 décembre 201118 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.
gribouillex
Messages postés172Date d'inscriptionlundi 10 octobre 2005StatutMembreDernière intervention16 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
mortalino
Messages postés6786Date d'inscriptionvendredi 16 décembre 2005StatutMembreDernière intervention21 décembre 201118 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
mortalino
Messages postés6786Date d'inscriptionvendredi 16 décembre 2005StatutMembreDernière intervention21 décembre 201118 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