Bonjour,
je cherche à conserver une chaîne de caractère renseignée dans le traitement d'un contrôle de texte afin de pouvoir l'utiliser dans un autre code en faisant référence au Tag de ce TextBox.
Je pensais qu'il était possible d'utiliser la propriété Tag de ce TextBox pour conserver cette chaîne.
Si j'inscris une chaîne de caractère ("coucou") dans ce TextBox, et que je fais appel à la propriété Tag avant la fermeture de l'USF, pas de souci.
Par contre, dès que je ferme l'USF et que je veux ramener le texte dans une cellule, je bloque.
Ceci n'est qu'un exemple : je ne veux pas ramener cette propriété dans une cellule, mais savoir s'il y a possibilité de conserver cette chaîne de caractère pour l'utiliser dans une autre procédure.
Je pensais qu'il était possible de le faire en stockant cette chaîne dans le Tag d'un 1er USF, pour ensuite y faire appel dans un 2ème USF.
Est-ce que cela est possible en utilisant le Tag comme lieu de stockage d'une valeur, celle-ci restant accessible même après la fermeture du USF ?
Private Sub CommandButton1_Click()
MsgBox "Valeur du tag avant prise en compte de la chaîne de caractères: " & Me.TextBox1.Tag
Me.TextBox1.Tag = Me.TextBox1.Text
MsgBox "Valeur du tag après prise en compte de la chaîne de caractères: " & Me.TextBox1.Tag
UserForm2.Show
UserForm1.Hide
End Sub
bonjour david bruno jb
si tu passes par un user pour stocker ta valeur des que tu fermes ton user tu envoie ta valeur dans une variable public apres tu peus l'utiliser non ??
Bonsoir,
merci pour vos réponses.
@Jacques : c'est effectivement une possibilité mais dans mon cas le fait de ne pas fermer le 1er USF entraînerait d'autres difficultés.
@Bruno :
Tu peux utiliser ce que tu veux, à partir du moment ou l'objet n'est plus en mémoire,
Excel ne peut plus récupérer sa valeur
Ce n'est pas simplement cela puisque même lorsque je rappelle l'usf (donc il est à nouveau ouvert), le dernier Tag modifié la fois d'avant n'est pas restitué.
Si je teste ce code
Code:
Sub a()
MsgBox UserForm1.TextBox1.Tag
End Sub
même si l'Usf est fermé, après avoir inscrit une chaîne de caractères en dur dans le Tag du TextBox, Excel me ramène la chaîne en question, même si l'USF est fermé.
Je n'ai pas l'habitude d'utiliser cette propriété mais je pensais pouvoir renseigner et modifier cette donnée via VBA afin de l'utiliser quel que soit l'état d'activation du USF.
Apparemment ce n'est pas jouable : si j'inscris "coucou" en dur dans le Tag du Textbox, que je lance l'Usf et modifie la valeur du Tag ("bonjour"), il me ramène bien "coucou", puis "bonjour" mais garde "coucou" une fois l'Usf fermé.
La valeur inscrite en dur dans le Tag n'est donc pas modifiée suite au code.
Or, je pensais initialement pouvoir modifier cette valeur via VBA.
@Laetitia : tu as raison sur le principe et j'y avais pensé mais je pensais que cette propriété Tag permettait justement d'accéder à une information stockée sans justement passer par une variable publique.
Si ce n'est effectivement pas le cas, alors je suivrai ton conseil.
A+
Bonsour®
en son temps Laurent Longre avait écrit un topic sur les variables masquées... Hélas son site a été hacké
et tous ces trésors sont à jamais disparus
ces variables masquées restent disponible tant que la session EXCEL reste ouverte que le classeur original ayant initié ces variables soit ouvert ou fermé.
Sinon, aujourd'hui, outre la méthode de définir un nom que je trouve la plus simple, sur une grosse appli, je rajouterais une feuille masquée où je mettrais tous ces noms à garder.
Sinon j'avais vu il y a quelques temps Dranreb, il me semble, avait défini une variable en globale (ou global ).
Ce code dans UserForm2 permet de modifier durablement la valeur de TextBox1 dans UserForm1 :
Code:
Private Sub UserForm_Initialize()
Dim t As String
t = UserForm1.TextBox1
Unload UserForm1
ThisWorkbook.VBProject.VBComponents("UserForm1").Designer.Controls("TextBox1") = t
End Sub
Dans UserForm1 on appelle UserForm2 par Application.OnTime.
Edit : salut Pierrot, même idée... juste 1 minute de retard chez moi...
Sub Memorise()
Dim t As String
t = UserForm1.TextBox1
Unload UserForm1
ThisWorkbook.VBProject.VBComponents("UserForm1").Designer.Controls("TextBox1") = t
MsgBox "Le texte '" & t & "' a été mémorisé..."
UserForm1.Show 'facultatif
End Sub
Les propositions de Jacques et Patrick partent de la même idée et c'est effectivement une solution intéressante.
Attention toutefois pour ceux qui veulent l'utiliser de veiller à remplacer l'ancien nom par le nouveau comme le prévoit Patrick.
Dans le cas contraire, les différents noms sont gardés car le nouveau ne remplace pas l'ancien (est-ce un bug car je ne vois pas a priori l'intérêt de pouvoir affecter plusieurs noms à une même référence de cellule ?) et ce n'est pas obligatoirement le dernier nom affecté qui est rappelé.
La proposition de dranreb s'apparente à celle proposée initialement par Jacques.
Elle fonctionne sans problème mais je ne préfère pas l'utiliser dans le cas présent.
Merci à Modeste geedee pour son lien traitant de l'utilisation des macros Excel4 et à Michel.
Pour l'instant, je reste sur l'idée de Laetitia qui fonctionne sans souci. En effet, dans mon cas, le fait de perdre la variable à la fermeture du classeur n'est pas un problème.
Autrement, j'ai regardé s'il n'y avait pas moyen d'accéder à la fenêtre propriétés de l'usf par macro afin de modifier la propriété Tag en dur mais je crois que ce n'est pas possible. Je crois que celle-ci n'est accessible que pendant la création de l'objet. Si certains y arrivent, il serait intéressant de savoir comment ils s'y prennent.
A+