stockage des variables après fermeture d'un classeur
16 réponses
Céline
bonjour à tous,
je me retrouve confrontée au problème suivant :
j'aimerais stocker une variable (integer) après fermeture d'un classeur
Excel car elles me seront utiles à sa prochaine ouverture.
Je me suis apercue que si on affectait purement et simplement la valeur à
cette variable (déclarée en Public dans un module), celle-ci est perdue à la
réouverture du classeur (info ou intox ? peut-être ai-je fait une mauvaise
manip ?)
J'ai donc essayé de stocker cette valeur dans un customproperties de ma
worksheets(1), et ma variable "zaza" récupère bien la valeur dans
customproperties.item(1) lors de la procédure wrkbook_open (je le teste à
l'aide d'un msgbox immédiatement ds wrkbk_open).
Mais si j'execute un msgbox zaza une fois que mon classeur est ouvert il
m'affiche 0 pour zaza
est-ce du à une mauvaise manip de ma part ou alors la réinitialisation de
toutes les variables du classeur a lieu après wrkbk_open ?
Autre question pratique d'utilisation du forum:
Dans le cas où notre question ait déjà été posée par un autre utilisateur
d'exel, existe-t-il un moyen de parcourir les post existant sur le forum (la
liste est longue :p) pour la retrouver et éviter les doublons, notamment
lorqu'on utilise ie ?
Merci de l'attention que vous accordez à nos petites préoccupations... :)
Céline
DSLL !!!! Erreur copie (ct une ancienne version avec mon customproperty) il fallait lire :
Private Sub Workbook_Open() If Sheets.Count < 2 Then ActiveWorkbook.Sheets.Add Feuil1.Visible = xlSheetVeryHidden Worksheets(2).Activate Range("C4").Select If Range("D14").FormulaR1C1 = "" Then Range("D14").Comment.Visible = True
MaVar = 1 Effacer_Lignes ("salut")
EtaT_Etude = MaVar MsgBox MaVar MsgBox EtaT_Etude End Sub
L'execution à nouveau de : MsgBox MaVar MsgBox EtaT_Etude après wrkbk_open m'affiche respectivement 1 puis 0 !!?!!
DSLL !!!! Erreur copie (ct une ancienne version avec mon customproperty)
il fallait lire :
Private Sub Workbook_Open()
If Sheets.Count < 2 Then ActiveWorkbook.Sheets.Add
Feuil1.Visible = xlSheetVeryHidden
Worksheets(2).Activate
Range("C4").Select
If Range("D14").FormulaR1C1 = "" Then Range("D14").Comment.Visible = True
MaVar = 1
Effacer_Lignes ("salut")
EtaT_Etude = MaVar
MsgBox MaVar
MsgBox EtaT_Etude
End Sub
L'execution à nouveau de :
MsgBox MaVar
MsgBox EtaT_Etude
après wrkbk_open m'affiche respectivement 1 puis 0 !!?!!
DSLL !!!! Erreur copie (ct une ancienne version avec mon customproperty) il fallait lire :
Private Sub Workbook_Open() If Sheets.Count < 2 Then ActiveWorkbook.Sheets.Add Feuil1.Visible = xlSheetVeryHidden Worksheets(2).Activate Range("C4").Select If Range("D14").FormulaR1C1 = "" Then Range("D14").Comment.Visible = True
MaVar = 1 Effacer_Lignes ("salut")
EtaT_Etude = MaVar MsgBox MaVar MsgBox EtaT_Etude End Sub
L'execution à nouveau de : MsgBox MaVar MsgBox EtaT_Etude après wrkbk_open m'affiche respectivement 1 puis 0 !!?!!
michdenis
Pourquoi n'utilise pas ceci pour l'ouverture de ton modèle ....dans le thisworkbook :
'------------------------------------ Private Sub Workbook_Open()
If ThisWorkbook.Path = "" Then 'Seulement les trucs qui doivent être 'réalisé une fois à la création du classeur 'à partir du modèle 'EXEMPLE : si tu veux initialer la variable MaVar 'à partir des procédures données... MaVar = 1 'Si tu as besoin d'initialer la variable avec la même valeur 'à chaque ouverture, pourquoi ne pas utiliser une CONSTANTE ?
Else 'les trucs à réaliser à chaque ouverture du classeur.
End
End Sub '----------------------------
Les "custompropertyitem" sont accessibles par l'item propriété du fichier du menu contextuel dans l'explorateur Windows d'où la possibilité que la ou les valeurs soient modifiées par un tiers...cette façon de faire comporte un certain risque quant à sa sécurité.
Si la variable est déclarée comme Public dans un module Standard Public MaVariable as Integer Et que tu l'initialises dans ta procédure Workbook_Open, il n'y a aucune raison pour que cette variable perde sa valeur !
"Céline" a écrit dans le message de news:
DSLL !!!! Erreur copie (ct une ancienne version avec mon customproperty) il fallait lire :
Private Sub Workbook_Open() If Sheets.Count < 2 Then ActiveWorkbook.Sheets.Add Feuil1.Visible = xlSheetVeryHidden Worksheets(2).Activate Range("C4").Select If Range("D14").FormulaR1C1 = "" Then Range("D14").Comment.Visible = True
MaVar = 1 Effacer_Lignes ("salut")
EtaT_Etude = MaVar MsgBox MaVar MsgBox EtaT_Etude End Sub
L'execution à nouveau de : MsgBox MaVar MsgBox EtaT_Etude après wrkbk_open m'affiche respectivement 1 puis 0 !!?!!
Pourquoi n'utilise pas ceci pour l'ouverture de ton
modèle ....dans le thisworkbook :
'------------------------------------
Private Sub Workbook_Open()
If ThisWorkbook.Path = "" Then
'Seulement les trucs qui doivent être
'réalisé une fois à la création du classeur
'à partir du modèle
'EXEMPLE : si tu veux initialer la variable MaVar
'à partir des procédures données...
MaVar = 1
'Si tu as besoin d'initialer la variable avec la même valeur
'à chaque ouverture, pourquoi ne pas utiliser une CONSTANTE ?
Else
'les trucs à réaliser à chaque ouverture du classeur.
End
End Sub
'----------------------------
Les "custompropertyitem" sont accessibles par l'item propriété du fichier
du menu contextuel dans l'explorateur Windows d'où la possibilité
que la ou les valeurs soient modifiées par un tiers...cette façon de
faire comporte un certain risque quant à sa sécurité.
Si la variable est déclarée comme Public dans un module Standard
Public MaVariable as Integer
Et que tu l'initialises dans ta procédure Workbook_Open, il n'y a
aucune raison pour que cette variable perde sa valeur !
"Céline" <Cline@discussions.microsoft.com> a écrit dans le message de news:
BA68BB82-3DF4-4B66-936B-8756D410A36C@microsoft.com...
DSLL !!!! Erreur copie (ct une ancienne version avec mon customproperty)
il fallait lire :
Private Sub Workbook_Open()
If Sheets.Count < 2 Then ActiveWorkbook.Sheets.Add
Feuil1.Visible = xlSheetVeryHidden
Worksheets(2).Activate
Range("C4").Select
If Range("D14").FormulaR1C1 = "" Then Range("D14").Comment.Visible = True
MaVar = 1
Effacer_Lignes ("salut")
EtaT_Etude = MaVar
MsgBox MaVar
MsgBox EtaT_Etude
End Sub
L'execution à nouveau de :
MsgBox MaVar
MsgBox EtaT_Etude
après wrkbk_open m'affiche respectivement 1 puis 0 !!?!!
Pourquoi n'utilise pas ceci pour l'ouverture de ton modèle ....dans le thisworkbook :
'------------------------------------ Private Sub Workbook_Open()
If ThisWorkbook.Path = "" Then 'Seulement les trucs qui doivent être 'réalisé une fois à la création du classeur 'à partir du modèle 'EXEMPLE : si tu veux initialer la variable MaVar 'à partir des procédures données... MaVar = 1 'Si tu as besoin d'initialer la variable avec la même valeur 'à chaque ouverture, pourquoi ne pas utiliser une CONSTANTE ?
Else 'les trucs à réaliser à chaque ouverture du classeur.
End
End Sub '----------------------------
Les "custompropertyitem" sont accessibles par l'item propriété du fichier du menu contextuel dans l'explorateur Windows d'où la possibilité que la ou les valeurs soient modifiées par un tiers...cette façon de faire comporte un certain risque quant à sa sécurité.
Si la variable est déclarée comme Public dans un module Standard Public MaVariable as Integer Et que tu l'initialises dans ta procédure Workbook_Open, il n'y a aucune raison pour que cette variable perde sa valeur !
"Céline" a écrit dans le message de news:
DSLL !!!! Erreur copie (ct une ancienne version avec mon customproperty) il fallait lire :
Private Sub Workbook_Open() If Sheets.Count < 2 Then ActiveWorkbook.Sheets.Add Feuil1.Visible = xlSheetVeryHidden Worksheets(2).Activate Range("C4").Select If Range("D14").FormulaR1C1 = "" Then Range("D14").Comment.Visible = True
MaVar = 1 Effacer_Lignes ("salut")
EtaT_Etude = MaVar MsgBox MaVar MsgBox EtaT_Etude End Sub
L'execution à nouveau de : MsgBox MaVar MsgBox EtaT_Etude après wrkbk_open m'affiche respectivement 1 puis 0 !!?!!
michel
Bonjour MaVar vaut toujours 1 mais ta variable etat_Etude elle est locale donc remise a zero a la fin de la proc workbok_open Si tu veux la garder ajoute Dim Etat_Etude dans la partie declarations de ton module HTH -- Michel "Céline" a écrit dans le message de news:
DSLL !!!! Erreur copie (ct une ancienne version avec mon customproperty) il fallait lire :
Private Sub Workbook_Open() If Sheets.Count < 2 Then ActiveWorkbook.Sheets.Add Feuil1.Visible = xlSheetVeryHidden Worksheets(2).Activate Range("C4").Select If Range("D14").FormulaR1C1 = "" Then Range("D14").Comment.Visible = True
MaVar = 1 Effacer_Lignes ("salut")
EtaT_Etude = MaVar MsgBox MaVar MsgBox EtaT_Etude End Sub
L'execution à nouveau de : MsgBox MaVar MsgBox EtaT_Etude après wrkbk_open m'affiche respectivement 1 puis 0 !!?!!
Bonjour
MaVar vaut toujours 1 mais ta variable etat_Etude elle est locale donc
remise a zero a la fin de la proc workbok_open
Si tu veux la garder ajoute Dim Etat_Etude dans la partie declarations de
ton module
HTH
--
Michel
"Céline" <Cline@discussions.microsoft.com> a écrit dans le message de news:
BA68BB82-3DF4-4B66-936B-8756D410A36C@microsoft.com...
DSLL !!!! Erreur copie (ct une ancienne version avec mon customproperty)
il fallait lire :
Private Sub Workbook_Open()
If Sheets.Count < 2 Then ActiveWorkbook.Sheets.Add
Feuil1.Visible = xlSheetVeryHidden
Worksheets(2).Activate
Range("C4").Select
If Range("D14").FormulaR1C1 = "" Then Range("D14").Comment.Visible = True
MaVar = 1
Effacer_Lignes ("salut")
EtaT_Etude = MaVar
MsgBox MaVar
MsgBox EtaT_Etude
End Sub
L'execution à nouveau de :
MsgBox MaVar
MsgBox EtaT_Etude
après wrkbk_open m'affiche respectivement 1 puis 0 !!?!!
Bonjour MaVar vaut toujours 1 mais ta variable etat_Etude elle est locale donc remise a zero a la fin de la proc workbok_open Si tu veux la garder ajoute Dim Etat_Etude dans la partie declarations de ton module HTH -- Michel "Céline" a écrit dans le message de news:
DSLL !!!! Erreur copie (ct une ancienne version avec mon customproperty) il fallait lire :
Private Sub Workbook_Open() If Sheets.Count < 2 Then ActiveWorkbook.Sheets.Add Feuil1.Visible = xlSheetVeryHidden Worksheets(2).Activate Range("C4").Select If Range("D14").FormulaR1C1 = "" Then Range("D14").Comment.Visible = True
MaVar = 1 Effacer_Lignes ("salut")
EtaT_Etude = MaVar MsgBox MaVar MsgBox EtaT_Etude End Sub
L'execution à nouveau de : MsgBox MaVar MsgBox EtaT_Etude après wrkbk_open m'affiche respectivement 1 puis 0 !!?!!
Céline
Bonsoir, Merci à vous pour vos éclaicissemments : - à nol pour le lien vers googleNewsGroup !!! (beaucoup plus clair via ggl à mon avis personnel que depuis microsoft) - à MichDenis pour tous ses conseils mais aussi ses explications sur les divergences (entre .name et propertyitem) - à MichDenis et Michel pour leur remarque pertinente : j'avais pas fait les bonnes déclarations concernant MaVar et Etat_Etude!!! Ca me permet de bien avancer ....
Bonsoir,
Merci à vous pour vos éclaicissemments :
- à nol pour le lien vers googleNewsGroup !!! (beaucoup plus clair
via ggl à mon avis personnel que depuis microsoft)
- à MichDenis pour tous ses conseils mais aussi ses explications sur
les divergences (entre .name et propertyitem)
- à MichDenis et Michel pour leur remarque pertinente : j'avais pas
fait les bonnes déclarations concernant MaVar et Etat_Etude!!!
Ca me permet de bien avancer ....
Bonsoir, Merci à vous pour vos éclaicissemments : - à nol pour le lien vers googleNewsGroup !!! (beaucoup plus clair via ggl à mon avis personnel que depuis microsoft) - à MichDenis pour tous ses conseils mais aussi ses explications sur les divergences (entre .name et propertyitem) - à MichDenis et Michel pour leur remarque pertinente : j'avais pas fait les bonnes déclarations concernant MaVar et Etat_Etude!!! Ca me permet de bien avancer ....
michdenis
| ces modules de classe sont assez bluffant ! c'est le POO ! | tu connais un site qui explique ou qui parle de çà ? | à mon boulot les zinformatichiens n'ont pas installer l'aide (vba)
POO -> c'est quoi ça ?
les zinformatichiens n'ont pas installer l'aide (vba) Pas brillants!!! ...Les responsables de réseaux ne sont pas forcément des "informatiens"
en général, les livres sur excel effleurent le sujet en insérant un chapitre sur le sujet...C'est le cas pour les 2 livres suggérés...c'est cher payé pour le peu d'information.... mais si tu y tiens ! (évidemment il y en a d'autres...)
'------------------------ Excel 2003 VBA Programmer's Reference By Paul Kimmel,Stephen Bullen,John Green,Rob Bovey,Robert Rosenberg '------------------------ et '------------------------ Professional Excel Development: The Definitive Guide to Developing Applications Using Microsoft Excel and VBA By Stephen Bullen, Rob Bovey, John Green '------------------------
| ces modules de classe sont assez bluffant ! c'est le POO !
| tu connais un site qui explique ou qui parle de çà ?
| à mon boulot les zinformatichiens n'ont pas installer l'aide (vba)
POO -> c'est quoi ça ?
les zinformatichiens n'ont pas installer l'aide (vba)
Pas brillants!!! ...Les responsables de réseaux ne sont pas
forcément des "informatiens"
en général, les livres sur excel effleurent le sujet en insérant un chapitre sur le sujet...C'est
le cas pour les 2 livres suggérés...c'est cher payé pour le peu d'information.... mais si tu
y tiens ! (évidemment il y en a d'autres...)
'------------------------
Excel 2003 VBA Programmer's Reference
By
Paul Kimmel,Stephen Bullen,John Green,Rob Bovey,Robert Rosenberg
'------------------------
et
'------------------------
Professional Excel Development: The Definitive Guide to Developing Applications Using Microsoft
Excel and VBA
By
Stephen Bullen, Rob Bovey, John Green
'------------------------
| ces modules de classe sont assez bluffant ! c'est le POO ! | tu connais un site qui explique ou qui parle de çà ? | à mon boulot les zinformatichiens n'ont pas installer l'aide (vba)
POO -> c'est quoi ça ?
les zinformatichiens n'ont pas installer l'aide (vba) Pas brillants!!! ...Les responsables de réseaux ne sont pas forcément des "informatiens"
en général, les livres sur excel effleurent le sujet en insérant un chapitre sur le sujet...C'est le cas pour les 2 livres suggérés...c'est cher payé pour le peu d'information.... mais si tu y tiens ! (évidemment il y en a d'autres...)
'------------------------ Excel 2003 VBA Programmer's Reference By Paul Kimmel,Stephen Bullen,John Green,Rob Bovey,Robert Rosenberg '------------------------ et '------------------------ Professional Excel Development: The Definitive Guide to Developing Applications Using Microsoft Excel and VBA By Stephen Bullen, Rob Bovey, John Green '------------------------
Alfred Wallace
Bonjour Isabelle,
'----------------------- Public Property Get MaVar() As Variant MaVar = [toto] End Property '----------------------- Public Property Let MaVar(ByVal vNewValue As Variant) ThisWorkbook.Names.Add "toto", Int(vNewValue), False End Property '-----------------------
Afin de comprendre comme cela fonctionne, essaie la ! Nul besoin de créer une variable particulière, elle est la : MaVar
Si tu écris dans une procédure et que tu le fais en pas en pas, tu vas t'apercevoir que "Property Let" est exécuté à chaque fois que tu modifies la valeur de la variable MaVar '---------------- Sub Pour_Passer_UneValeur_à_Ta_Variable() MaVar = 28 End Sub '----------------
Lorsque tu veux retrouver la valeur de ta variable MaVar, "Property Get" s'exécute et retrouve la valeur associé au "NOM" du classeur. '---------------- Sub Pour_Récupérer_La_Valeur_De_Ta_Variable() a = MaVar End Sub '----------------
Comme "Property Let" ou "Property Get" s'exécute à chaque fois qu'intervient la variable MyVar, tu pourrais si le besoin était là, ajouter du code à ces petites procédures pour effectuer quelques vérifications ou actions à chaque appel de la variable MyVar car peu importe de quel module ta variable est appelée, tu connais la source de l'appel de la variable d'où un meilleur contrôle le cas échéant.
Cette proposition avait pour but de présenter quelque chose de nouveau à cette problématique(sauvegarde de la valeur d'une variable au moment de fermer le classeur)
"isabelle" a écrit dans le message de news: rebonjour denis,
je comprend bien que la méthode Property Get et Property Let évite de devoir utilisé un événement,
mais il faut quant même soit créer la variable ou bien si elle est déjà créer possiblement en changer la valeur en exécutant une macro (événement ou non), n'est il pas mieux à ce moment de stoker cette valeur dans un "Nom" ?
isabelle
ta suggestion est bonne et fonctionnelle...
A) Le gros avantage à la méthode proposée c'est que tu n'as pas besoin de déterminer un moment particulier où tu dois sauvegarder ta variable...cela se fait automatiquement au même moment de l'ensemble des données. Aucune procédure événementielle n'est requise dans le ThisWorkbook.
B) Dans la procédure "Property Let", il serait possible d'ajouter un peu de code pour vérifier la valeur que le programme emmagasine... exemple dans ce cas : que la valeur passée correspond bien à l'étendue que représente une donnée de type "integer" sinon renvoyé un message particulier à l'usager ou définir un autre action le cas échant.
En passant, je retiens ta suggestion pour retrouver la valeur du nom.
Public Property Get MaVar() As Variant MaVar = [toto] End Property
Public Property Let MaVar(ByVal vNewValue As Variant) ThisWorkbook.Names.Add "toto", Int(vNewValue), False End Property
"isabelle" a écrit dans le message de news: bonjour denis,
pourquoi ne pas mettre simplement la variable dans un "Nom" ?
Sub StokerVariable() LaVariable = 2 Names.Add "MaVar", LaVariable, False End Sub
Sub RécupérerVariable() LaVariable = [MaVar] End Sub
isabelle
Une façon de faire :
Copie ceci dans un module standard : Le nom retenu pour ta variable est MaVar
********************************************** La dernière valeur retenue par la variable à la ré-ouverture de ton classeur sera celle contenue par cette dernière au moment de la dernière sauvegarde de ton classeur. ***********************************************
'----------------------- Public Property Get MaVar() As Variant Dim S As String S = ThisWorkbook.Names("Toto").RefersTo MaVar = Int(Right(S, Len(S) - 1)) End Property '-----------------------
Public Property Let MaVar(ByVal vNewValue As Variant) ThisWorkbook.Names.Add "toto", Int(vNewValue), False End Property '-----------------------
Ligne de commande pour attribuer une valeur à ta variable de n'importe où dans ton code MaVar = 25
Ligne de commande pour récupérer la valeur de ta variable de n'importe où dans ton code a = MaVar
ces modules de classe sont assez bluffant ! c'est le POO !
tu connais un site qui explique ou qui parle de çà ? à mon boulot les zinformatichiens n'ont pas installer l'aide (vba)
Merci
José
Bonjour Isabelle,
'-----------------------
Public Property Get MaVar() As Variant
MaVar = [toto]
End Property
'-----------------------
Public Property Let MaVar(ByVal vNewValue As Variant)
ThisWorkbook.Names.Add "toto", Int(vNewValue), False
End Property
'-----------------------
Afin de comprendre comme cela fonctionne, essaie la !
Nul besoin de créer une variable particulière, elle est la : MaVar
Si tu écris dans une procédure et que tu le fais en pas en pas, tu vas t'apercevoir
que "Property Let" est exécuté à chaque fois que tu modifies la valeur de la variable MaVar
'----------------
Sub Pour_Passer_UneValeur_à_Ta_Variable()
MaVar = 28
End Sub
'----------------
Lorsque tu veux retrouver la valeur de ta variable MaVar,
"Property Get" s'exécute et retrouve la valeur associé au "NOM" du classeur.
'----------------
Sub Pour_Récupérer_La_Valeur_De_Ta_Variable()
a = MaVar
End Sub
'----------------
Comme "Property Let" ou "Property Get" s'exécute à chaque fois
qu'intervient la variable MyVar, tu pourrais si le besoin était là, ajouter du
code à ces petites procédures pour effectuer quelques vérifications ou
actions à chaque appel de la variable MyVar car peu importe de quel
module ta variable est appelée, tu connais la source de l'appel de la variable
d'où un meilleur contrôle le cas échéant.
Cette proposition avait pour but de présenter quelque chose de nouveau
à cette problématique(sauvegarde de la valeur d'une variable au moment de
fermer le classeur)
"isabelle" <aaa@aaa> a écrit dans le message de news: unpMzwD0GHA.772@TK2MSFTNGP05.phx.gbl...
rebonjour denis,
je comprend bien que la méthode Property Get et Property Let évite de devoir utilisé un événement,
mais il faut quant même soit créer la variable ou bien si elle est déjà créer possiblement en
changer la valeur
en exécutant une macro (événement ou non), n'est il pas mieux à ce moment de stoker cette valeur
dans un "Nom" ?
isabelle
ta suggestion est bonne et fonctionnelle...
A) Le gros avantage à la méthode proposée c'est que
tu n'as pas besoin de déterminer un moment particulier
où tu dois sauvegarder ta variable...cela se fait automatiquement
au même moment de l'ensemble des données.
Aucune procédure événementielle n'est requise dans le ThisWorkbook.
B) Dans la procédure "Property Let", il serait possible d'ajouter un peu
de code pour vérifier la valeur que le programme emmagasine...
exemple dans ce cas : que la valeur passée correspond bien à l'étendue
que représente une donnée de type "integer" sinon renvoyé un message
particulier à l'usager ou définir un autre action le cas échant.
En passant, je retiens ta suggestion pour retrouver la valeur du nom.
Public Property Get MaVar() As Variant
MaVar = [toto]
End Property
Public Property Let MaVar(ByVal vNewValue As Variant)
ThisWorkbook.Names.Add "toto", Int(vNewValue), False
End Property
"isabelle" <aaa@aaa> a écrit dans le message de news: eEUmUYD0GHA.1292@TK2MSFTNGP03.phx.gbl...
bonjour denis,
pourquoi ne pas mettre simplement la variable dans un "Nom" ?
Sub StokerVariable()
LaVariable = 2
Names.Add "MaVar", LaVariable, False
End Sub
Sub RécupérerVariable()
LaVariable = [MaVar]
End Sub
isabelle
Une façon de faire :
Copie ceci dans un module standard :
Le nom retenu pour ta variable est MaVar
**********************************************
La dernière valeur retenue par la variable à la ré-ouverture de
ton classeur sera celle contenue par cette dernière au moment
de la dernière sauvegarde de ton classeur.
***********************************************
'-----------------------
Public Property Get MaVar() As Variant
Dim S As String
S = ThisWorkbook.Names("Toto").RefersTo
MaVar = Int(Right(S, Len(S) - 1))
End Property
'-----------------------
Public Property Let MaVar(ByVal vNewValue As Variant)
ThisWorkbook.Names.Add "toto", Int(vNewValue), False
End Property
'-----------------------
Ligne de commande pour attribuer une valeur à ta variable
de n'importe où dans ton code
MaVar = 25
Ligne de commande pour récupérer la valeur de ta variable
de n'importe où dans ton code
a = MaVar
ces modules de classe sont assez bluffant ! c'est le POO !
tu connais un site qui explique ou qui parle de çà ?
à mon boulot les zinformatichiens n'ont pas installer l'aide (vba)
'----------------------- Public Property Get MaVar() As Variant MaVar = [toto] End Property '----------------------- Public Property Let MaVar(ByVal vNewValue As Variant) ThisWorkbook.Names.Add "toto", Int(vNewValue), False End Property '-----------------------
Afin de comprendre comme cela fonctionne, essaie la ! Nul besoin de créer une variable particulière, elle est la : MaVar
Si tu écris dans une procédure et que tu le fais en pas en pas, tu vas t'apercevoir que "Property Let" est exécuté à chaque fois que tu modifies la valeur de la variable MaVar '---------------- Sub Pour_Passer_UneValeur_à_Ta_Variable() MaVar = 28 End Sub '----------------
Lorsque tu veux retrouver la valeur de ta variable MaVar, "Property Get" s'exécute et retrouve la valeur associé au "NOM" du classeur. '---------------- Sub Pour_Récupérer_La_Valeur_De_Ta_Variable() a = MaVar End Sub '----------------
Comme "Property Let" ou "Property Get" s'exécute à chaque fois qu'intervient la variable MyVar, tu pourrais si le besoin était là, ajouter du code à ces petites procédures pour effectuer quelques vérifications ou actions à chaque appel de la variable MyVar car peu importe de quel module ta variable est appelée, tu connais la source de l'appel de la variable d'où un meilleur contrôle le cas échéant.
Cette proposition avait pour but de présenter quelque chose de nouveau à cette problématique(sauvegarde de la valeur d'une variable au moment de fermer le classeur)
"isabelle" a écrit dans le message de news: rebonjour denis,
je comprend bien que la méthode Property Get et Property Let évite de devoir utilisé un événement,
mais il faut quant même soit créer la variable ou bien si elle est déjà créer possiblement en changer la valeur en exécutant une macro (événement ou non), n'est il pas mieux à ce moment de stoker cette valeur dans un "Nom" ?
isabelle
ta suggestion est bonne et fonctionnelle...
A) Le gros avantage à la méthode proposée c'est que tu n'as pas besoin de déterminer un moment particulier où tu dois sauvegarder ta variable...cela se fait automatiquement au même moment de l'ensemble des données. Aucune procédure événementielle n'est requise dans le ThisWorkbook.
B) Dans la procédure "Property Let", il serait possible d'ajouter un peu de code pour vérifier la valeur que le programme emmagasine... exemple dans ce cas : que la valeur passée correspond bien à l'étendue que représente une donnée de type "integer" sinon renvoyé un message particulier à l'usager ou définir un autre action le cas échant.
En passant, je retiens ta suggestion pour retrouver la valeur du nom.
Public Property Get MaVar() As Variant MaVar = [toto] End Property
Public Property Let MaVar(ByVal vNewValue As Variant) ThisWorkbook.Names.Add "toto", Int(vNewValue), False End Property
"isabelle" a écrit dans le message de news: bonjour denis,
pourquoi ne pas mettre simplement la variable dans un "Nom" ?
Sub StokerVariable() LaVariable = 2 Names.Add "MaVar", LaVariable, False End Sub
Sub RécupérerVariable() LaVariable = [MaVar] End Sub
isabelle
Une façon de faire :
Copie ceci dans un module standard : Le nom retenu pour ta variable est MaVar
********************************************** La dernière valeur retenue par la variable à la ré-ouverture de ton classeur sera celle contenue par cette dernière au moment de la dernière sauvegarde de ton classeur. ***********************************************
'----------------------- Public Property Get MaVar() As Variant Dim S As String S = ThisWorkbook.Names("Toto").RefersTo MaVar = Int(Right(S, Len(S) - 1)) End Property '-----------------------
Public Property Let MaVar(ByVal vNewValue As Variant) ThisWorkbook.Names.Add "toto", Int(vNewValue), False End Property '-----------------------
Ligne de commande pour attribuer une valeur à ta variable de n'importe où dans ton code MaVar = 25
Ligne de commande pour récupérer la valeur de ta variable de n'importe où dans ton code a = MaVar
ces modules de classe sont assez bluffant ! c'est le POO !
tu connais un site qui explique ou qui parle de çà ? à mon boulot les zinformatichiens n'ont pas installer l'aide (vba)