XL 2019 stocker la valeur d'un txtb en variable a l'ouverture d'un userforme

youguybass

XLDnaute Junior
Bonjour
Quand j'ouvre un userforme Je voudrais récupérer la value de certaines txtbox dans une variable pour pouvoir la comparer si changement de cette txtbox.
j'ai essayé avec des variables static, public je n'arrive pas à faire fonctionner

pour exemple

Private Sub UserForm_Initialize
Dim ValUse as integer
ValUse=TxtB1.value
End Sub

j'ai un bouton de validation :
Private Sub BtnValidation_Click()
If ValUse<>TxtB1. Value then .....

a ce moment la Variable ValUse n'est pas reconnue, pourquoi ?

D'avance Merci
 

Hasco

XLDnaute Barbatruc
Repose en paix
Bonjour,

Si votre variable doit être utilisée par des procédures ou fonctions de votre module, il vous faut la déclarer en tête de module. Et cela n'a rien à voir avec les variables statiques.

Si vous la déclarez Public en tête de module, elle pourra être utilisée à partir d'autres module,
Public ne peut pas être déclaré dans le corps d'une procédure (sub) ou fonction (function)
Par contre une procédure peut être déclarée Public ou Private

Si vous la déclarez Private en tête de module, elle ne sera utilisable qu'à l'intérieur du module qui la contient

Toutes les variables déclarées dans le corps d'une procédure ou fonction, ne sont pas utilisables ailleurs de dans la procédure ou fonction qui les déclarent. Elles disparraissent après le End sub ou End function

Si vous mettez le mot clef Static avant sa déclaration à l'intérieur d'une procédure ou fonction, la variable conserve alors sa dernière valeur, d'un appel à l'autre. La variable devient persistante.

Mettez ces quelques lignes dans un module vierge et lancez les en mode pas à pas (F8) après avoir ouvert la fenêtre d'exécution (CTRL+G)
Vous verrez qu'au premier appel de la macro :
i = 1 j = 1 k = 2
Au deuxième appel
i = 2 j = 1 k = 4

i a été modifié à chaque appel de la macro et affiche sa nouvelle valeur
idem pour k

i déclaré Static conserve sa valeur mais n'est pas utilisable par une autre procédure ou fonction
k déclaré en tête de module conserve sa valeur le temps de vie du module et peut être utilisé dans d'autres procédure ou fonction
j déclaré uniquement dans la procédure ne conserve pas sa valeur et n'est utilisable que dans la procédure.

VB:
Option Explicit
Dim k As Integer

Sub TestVariable1()
    Static i As Integer
    Dim j
    i = i + 1
    j = j + 1
    k = i * 2
   Debug.Print "i = " & i, "j = " & j, "k = " & k
End Sub
 

Discussions similaires

Statistiques des forums

Discussions
312 104
Messages
2 085 335
Membres
102 865
dernier inscrit
FreyaSalander