Utilisation de la propriété Tag

david84

XLDnaute Barbatruc
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 ?

Merci de vos réponses éventuelles.
A+
 

Pièces jointes

  • Tag.xls
    44.5 KB · Affichages: 83
  • Tag.xls
    44.5 KB · Affichages: 84
  • Tag.xls
    44.5 KB · Affichages: 81

BOISGONTIER

XLDnaute Barbatruc
Repose en paix
Re : Utilisation de la propriété Tag

Bonsoir,
e
En le masquant? (Hide )

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


MsgBox UserForm1.TextBox1.Tag


JB
 

Pièces jointes

  • Copie de Tag.xls
    42.5 KB · Affichages: 88
Dernière édition:

david84

XLDnaute Barbatruc
Re : Utilisation de la propriété Tag

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+
 

Modeste geedee

XLDnaute Barbatruc
Re : Utilisation de la propriété Tag

Bonsour®
en son temps Laurent Longre avait écrit un topic sur les variables masquées...
:mad:Hélas son site a été hacké
et tous ces trésors sont à jamais disparus :(

cependant Chip Pearson en a gardé une trace :
Hidden Name Space

:rolleyes: 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é.
 

BOISGONTIER

XLDnaute Barbatruc
Repose en paix
Re : Utilisation de la propriété Tag

ActiveWorkbook.Names.Add Name:="xxx", RefersToR1C1:="=Sheet1!R1C1", Visible:=False

ActiveWorkbook.Names.Add Name:="xx", RefersTo:="=12", Visible:=False

ActiveWorkbook.Names.Add Name:="xxxx", RefersTo:="=" & Chr(34) & "coucou" & Chr(34), Visible:=False

Msgbox [xx]

JB
 
Dernière édition:

Dranreb

XLDnaute Barbatruc
Re : Utilisation de la propriété Tag

Bonsoir.
Vous pouvez aussi empêcher qu'il soit effacé de la mémoire à l'aide de cette procédure:
VB:
Private Sub UserForm_QueryClose(Cancel As Integer, CloseMode As Integer)
If CloseMode = 0 Then Cancel = True: Me.Hide
End Sub
Cordialement.
 

MJ13

XLDnaute Barbatruc
Re : Utilisation de la propriété Tag

Bonjour à tous

C'est marrant, c'était le thème de ma première question sur le forum:

https://www.excel-downloads.com/threads/recuperez-un-nom-defini-en-vb-dans-un-usf.64907/

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 :confused:).
 

Pierrot93

XLDnaute Barbatruc
Re : Utilisation de la propriété Tag

Bonjour à tous,

regarde peut être ceci, à utiliser dans un module standard, l'userform en question n'étant pas chargé en mémoire lors de l'éxecution de ce code :
Code:
ThisWorkbook.VBProject.VBComponents("UserForm1").Designer.Controls("TextBox1").Tag = "xxx"
MsgBox UserForm1.TextBox1.Tag
peut être pourras-tu l'utiliser en combinaison avec une variable "public" permettant de stocker la valeur de ta "textbox".

bonne journée
@+

Edition : Salut Job:), oui effectivement....
 
Dernière édition:

job75

XLDnaute Barbatruc
Re : Utilisation de la propriété Tag

Bonjour David, le fil,

Voyez le fichier joint avec les 2 UserForms.

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...

A+
 

Pièces jointes

  • USF(1).xls
    50.5 KB · Affichages: 89
  • USF(1).xls
    50.5 KB · Affichages: 93
  • USF(1).xls
    50.5 KB · Affichages: 70
Dernière édition:

job75

XLDnaute Barbatruc
Re : Utilisation de la propriété Tag

Re,

Avec un seul USF et cette macro dans Module1 :

Code:
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
Toujours appelée par Application.OnTime.

A+
 

Pièces jointes

  • USF(2).xls
    49.5 KB · Affichages: 82
  • USF(2).xls
    49.5 KB · Affichages: 68
  • USF(2).xls
    49.5 KB · Affichages: 69

david84

XLDnaute Barbatruc
Re : Utilisation de la propriété Tag

Bonjour,

merci à tous pour vos retours.

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+
 

Discussions similaires

Statistiques des forums

Discussions
312 159
Messages
2 085 836
Membres
102 998
dernier inscrit
billABDELL