modifier durablement une valeur dans userform

Boostez vos compétences Excel avec notre communauté !

Rejoignez Excel Downloads, le rendez-vous des passionnés où l'entraide fait la force. Apprenez, échangez, progressez – et tout ça gratuitement ! 👉 Inscrivez-vous maintenant !

Roland_M

XLDnaute Barbatruc
Bien le bonjour à tous,
tout d'abord, à vous tous, un Bon Réveillon et Joyeux Noël !

j'essai de coller une valeur dans un userform durablement ICI dans .Tag
normalement ceci devrait suffir !? (mais non!)
ThisWorkbook.VBProject.VBComponents("fmSTD_CorrectifUserfEcran").Properties("Tag").Value = M$
'
alors j'ai essayé avec une boucle comme ceci:
' Dim U As Object, O As Object
' For Each O In U.Properties
' If O.Name = "Tag" Then O.Value = M$: Exit For
' Next
il y plantage sur la boucle > For Each O In U.Properties
alors que celle-ci fonctionne For Each O In U.Designer.Controls

après moult essais,
j'ai donc solutionné comme ceci (mais je trouve cela aberrant !)

appel userf et en sortant je récupère dans ReponseMsgBox(var déclarée Public)
puis je colle cette valeur dans le Tag
Code:
Sub EssaiModifUserf()
MonUserf.Show: DoEvents: M$ = Trim(ReponseMsgBox)
DoEvents
Dim U As Object, O As Object
Set U = ThisWorkbook.VBProject.VBComponents("fmSTD_CorrectifUserfEcran")
For Each O In U.Designer.Controls: Z$ = O.Name: Next
DoEvents
For Each O In U.Properties
  If O.Name = "Tag" Then O.Value = M$: Exit For
Next
Set U = Nothing: Set O = Nothing
End Sub

Ma question est donc:
Pourquoi ne puis-je pas accéder directement à .Properties ?
comme d'ailleurs tous les exemples que j'ai trouvé et qui ne fonctionnent pas !
où est le hic !?

Si quelqu'un pouvait éclairer ma lanterne ...
D'avance un grand merci.
 
Re : modifier durablement une valeur dans userform

Salut Roland

J'ai essayé, et à priori, avec ce code, ça fonctionne.....

Code:
ThisWorkbook.VBProject.VBComponents("UserForm1").Properties(45) = "bibi"

Pour ce faire, j'ai inséré un espion (Débogage, ajouter un espion) sur la variable "o", et dérouler en pas à pas ce code :

Code:
Dim o As Object
For Each o In ThisWorkbook.VBProject.VBComponents
    x = 1
Next o

(le x ne sert à rien....)

Et en déroulant les "properties", j'ai vu que la propriété "tag" était la propriété 45.

Si ça peut faire avancer le schimili....

Bonnes fêtes, et meilleurs voeux

Bon courage
 
Re : modifier durablement une valeur dans userform

Bonjour.
Pourquoi ne puis-je pas accéder directement à .Properties ?
Parce que Properties est une collection de l'objet de type VBComponent et non de type Userform.
À mon avis il serait quand même plus simple d'enregistrer l'info comme référence à un nom dans le classeur (pas forcément associé à une cellule) et la reprendre lors de l'Userform_Initialize
 
Re : modifier durablement une valeur dans userform

merci à vous deux pour cette réponse rapide !

dranreb: dans mes classeurs c'est ainsi que je pratique !
mais là je voulais faire un userform indépendant de sources extérieures !
comme je pratique ça fonctionne, mais avec la boucle .Designer.Controls avant !?

bhbh: j'avais essayé aussi !

mais je dois préciser une chose qui me semble capitale !
quand je charge le classeur, tous les essais fonctionnent !
mais une fois fais userform.show et ressortie avec unload bien entendu,
plus un seul essai ne fonctionne !
si ce n'est avec ma méthode !?
j'ai pourtant bien quitté et déchargé l'userf !?
 
Dernière édition:
Re : modifier durablement une valeur dans userform

Non, non, non. Faut surtout pas l'afficher si vous espérez introduire une correction en dur dans la fenêtre de propriétés, car elle risque de nécessiter une réinitialisation du projet VBA. Faut rester le plus loin possible de toute exécution de ce que vous voulez manipuler. Il faudrait même si possible le faire depuis un autre projet VBA. La manipulation d'un VBComponent revient à adopter automatiquement une démarche de programmation. Vous ne pouvez pas exécuter ce que vous modifiez, vous ne pouvez pas modifier ce que vous exécutez.
 
Re : modifier durablement une valeur dans userform

re

merci à toi dranreb de t'intéresser !

alors, si je comprends bien, ce que je veux faire n'est pas possible !?
puisque ce je souhaité c'était justement de mémoriser à la sortie de l'userform
(après unload et dans le sub d'appel) la positon dans le Tag !

je comprends toujours pas comment ça peut poser problème puisque l'on est plus dans l'userf !?
où alors cela signifie que dans un classeur une fois l'userf chargé, même déchargé il restera toujours en mémoire !?
c'est tout de même bizarre !?
 
Re : modifier durablement une valeur dans userform

Ah, oui c'est vrai on n'est plus dans l'Userform, j'avais mal vu. Mais on est dans une même exécution qui mélange affichage d'un userform et modification de celui ci dans le projet VBA.
Ça pourrait peut être poser moins de problème (pas sûr) de lancer par un Application.OnTime une procédure d'un module ordinaire qui, dans la seconde qui suit, va aller modifier une instruction Const en tête du module de l'Userform. Au moins on pourrait allez voir simplement si ça a marché, en y ajoutant la date et l'heure en commentaire derrière. Mais je ne comprend pas pourquoi vous tenez à faire si compliqué: L'Userform appartient à un projet VBA, le projet VBA appartient à un classeur, je ne vois aucune raison de loger l'information ailleurs qu'en référence à un nom dans le classeur. Un nom relativement long, à coucher dehors, par exemple, pour le démarquer de ceux qui font partie de l'applicatif.
 
Re : modifier durablement une valeur dans userform

re:


j'ai enfin solutionné ! comme Properties posait problème,
je mets les valeurs dans un control MAIS SURTOUT un DoEvents en sortie de l'Userform !
DoEvents
ThisWorkbook.VBProject.VBComponents("fm_CorrectifUserfEcran").Designer.Controls("LbPosFm").Caption = M$

et ceci ça fonctionne !

merci encore pour votre participation !
 
Dernière édition:
- Navigue sans publicité
- Accède à Cléa, notre assistante IA experte Excel... et pas que...
- Profite de fonctionnalités exclusives
Ton soutien permet à Excel Downloads de rester 100% gratuit et de continuer à rassembler les passionnés d'Excel.
Je deviens Supporter XLD

Discussions similaires

Réponses
4
Affichages
177
Réponses
9
Affichages
580
Retour