Petit probleme de newbie (je pense), en VBA, je déclare une variable public
de type integer
mais une fois que j'ai fermé (et enregistré) mon classeur et que je le
rouvre, ma variable = "" .
Existe-t-il une solution sans avoir a aller ecrire cette variable dans une
cellule de feuille cachée par exemple ?
Cette action est irreversible, confirmez la suppression du commentaire ?
Signaler le commentaire
Veuillez sélectionner un problème
Nudité
Violence
Harcèlement
Fraude
Vente illégale
Discours haineux
Terrorisme
Autre
anonymousA
bonjour,
3 solutions possibles me viennent à l'idée, 2 simples et une plus compliquée
1- ecrire la variable comme un nom dans les noms de classeurs et en changer la valeur avant chaque fermeture du classeur.tu peux d'ailleurs cacher ce nom pour eviter qu'un utilisateur ne te l'écrase.
2-L'inscrire dans une cellule d'une feuille cachée
3-l'inscrire en dur dans un module ( c.à. d comme une instruction du style MaVar=3 ) puis la mettre à jour régulièrement dans le texte du VBA
A+
bonjour,
3 solutions possibles me viennent à l'idée, 2 simples et une plus
compliquée
1- ecrire la variable comme un nom dans les noms de classeurs et en
changer la valeur avant chaque fermeture du classeur.tu peux d'ailleurs
cacher ce nom pour eviter qu'un utilisateur ne te l'écrase.
2-L'inscrire dans une cellule d'une feuille cachée
3-l'inscrire en dur dans un module ( c.à. d comme une instruction du
style MaVar=3 ) puis la mettre à jour régulièrement dans le texte du
VBA
3 solutions possibles me viennent à l'idée, 2 simples et une plus compliquée
1- ecrire la variable comme un nom dans les noms de classeurs et en changer la valeur avant chaque fermeture du classeur.tu peux d'ailleurs cacher ce nom pour eviter qu'un utilisateur ne te l'écrase.
2-L'inscrire dans une cellule d'une feuille cachée
3-l'inscrire en dur dans un module ( c.à. d comme une instruction du style MaVar=3 ) puis la mettre à jour régulièrement dans le texte du VBA
A+
Michael
Merci du coup de main
Jai envie d'opter pour la 3eme solution qui me semble plus "propre". Mais j'ai un peu de mal a saisir... exemple
public MaVar as integer
sub des_trucs la il y a des_trucs MaVar = chose End Sub
Je ferme mon classeur, le rouvre et là MaVar= ""
Quel instruction me permetrait de l'inscrire definitivement ? Si c'est trop compliqué je me rabatterait sur les solutions 1 ou 2...
Merci bien !
Merci du coup de main
Jai envie d'opter pour la 3eme solution qui me semble plus "propre".
Mais j'ai un peu de mal a saisir...
exemple
public MaVar as integer
sub des_trucs
la il y a des_trucs
MaVar = chose
End Sub
Je ferme mon classeur, le rouvre et là MaVar= ""
Quel instruction me permetrait de l'inscrire definitivement ?
Si c'est trop compliqué je me rabatterait sur les solutions 1 ou 2...
Bonjour Michael; Regarde l'aide pour SaveSetting et GetSetting. MP
"Michael" a écrit dans le message de news:
Bonjour à tous !
Petit probleme de newbie (je pense), en VBA, je déclare une variable public
de type integer mais une fois que j'ai fermé (et enregistré) mon classeur et que je le rouvre, ma variable = "" .
Existe-t-il une solution sans avoir a aller ecrire cette variable dans une cellule de feuille cachée par exemple ?
Merci d'avance pour la moindre info. Salutations.
Michael
Solution interessante Michel je ne connaissais pas mais bien qu'elle pourrait parfaitement fonctionner, j'aimerai autant opter pour une methode qui reste propre a Excel et qui n'en deborde pas.
Merci quand meme pour l'info !
Solution interessante Michel je ne connaissais pas mais bien qu'elle
pourrait parfaitement
fonctionner, j'aimerai autant opter pour une methode qui reste propre a
Excel et qui n'en deborde pas.
Solution interessante Michel je ne connaissais pas mais bien qu'elle pourrait parfaitement fonctionner, j'aimerai autant opter pour une methode qui reste propre a Excel et qui n'en deborde pas.
Merci quand meme pour l'info !
Michel Pierron
Re Michael; Tu peux également utiliser un nom masqué; en supposant que ta variable soit intitulée MyVar:
Private Sub Workbook_BeforeClose(Cancel As Boolean) On Error Resume Next With ThisWorkbook .Names("SaveMyVar").Delete .Names.Add Name:="SaveMyVar", RefersToR1C1:=MyVar, Visible:úlse .Save End With End Sub
Private Sub Workbook_Open() On Error Resume Next MyVar = ThisWorkbook.Names("SaveMyVar").RefersTo If Err Then MyVar = 1 ' Ta valeur par défaut End Sub
MP
"Michael" a écrit dans le message de news:
Bonjour à tous !
Petit probleme de newbie (je pense), en VBA, je déclare une variable public
de type integer mais une fois que j'ai fermé (et enregistré) mon classeur et que je le rouvre, ma variable = "" .
Existe-t-il une solution sans avoir a aller ecrire cette variable dans une cellule de feuille cachée par exemple ?
Merci d'avance pour la moindre info. Salutations.
Re Michael;
Tu peux également utiliser un nom masqué; en supposant que ta variable soit
intitulée MyVar:
Private Sub Workbook_BeforeClose(Cancel As Boolean)
On Error Resume Next
With ThisWorkbook
.Names("SaveMyVar").Delete
.Names.Add Name:="SaveMyVar", RefersToR1C1:=MyVar, Visible:úlse
.Save
End With
End Sub
Private Sub Workbook_Open()
On Error Resume Next
MyVar = ThisWorkbook.Names("SaveMyVar").RefersTo
If Err Then MyVar = 1 ' Ta valeur par défaut
End Sub
MP
"Michael" <michael_bas@yahoo.fr> a écrit dans le message de news:
uZxKuBZxFHA.3400@TK2MSFTNGP14.phx.gbl...
Bonjour à tous !
Petit probleme de newbie (je pense), en VBA, je déclare une variable
public
de type integer
mais une fois que j'ai fermé (et enregistré) mon classeur et que je le
rouvre, ma variable = "" .
Existe-t-il une solution sans avoir a aller ecrire cette variable dans une
cellule de feuille cachée par exemple ?
Re Michael; Tu peux également utiliser un nom masqué; en supposant que ta variable soit intitulée MyVar:
Private Sub Workbook_BeforeClose(Cancel As Boolean) On Error Resume Next With ThisWorkbook .Names("SaveMyVar").Delete .Names.Add Name:="SaveMyVar", RefersToR1C1:=MyVar, Visible:úlse .Save End With End Sub
Private Sub Workbook_Open() On Error Resume Next MyVar = ThisWorkbook.Names("SaveMyVar").RefersTo If Err Then MyVar = 1 ' Ta valeur par défaut End Sub
MP
"Michael" a écrit dans le message de news:
Bonjour à tous !
Petit probleme de newbie (je pense), en VBA, je déclare une variable public
de type integer mais une fois que j'ai fermé (et enregistré) mon classeur et que je le rouvre, ma variable = "" .
Existe-t-il une solution sans avoir a aller ecrire cette variable dans une cellule de feuille cachée par exemple ?
Merci d'avance pour la moindre info. Salutations.
anonymousA
Bon allons y pour la solution plus compliquée.
Dans le module Thisworkbook , tu inscris
Private Sub Workbook_BeforeClose(Cancel As Boolean)
Set cd = .Add(vbext_ct_StdModule) cd.Name = "toto" .Item("toto").CodeModule.InsertLines 1, texte End With Application.DisplayAlerts = False ThisWorkbook.SaveAs ThisWorkbook.FullName Application.DisplayAlerts = True
End Sub
Tu crées un module (ici , il s'appelle toto) et tu écris une 1ere fois
Sub sauvegarde() tampon = 10 End Sub
Au final, cet exemple est fait pour te permettre de voir que si tu exécutes la procédure Sub tututu() alors MaVar vaudra 12. En conséquence, à la fermeture du fichier cette variable sera conservée dans la procédure Sub sauvegarde dans la ligne de texte tampon car on affecte dans la procédure sub sauve() tampon=MaVar.La procédure Sub sauvegarde est créée par programmation dans un module qu'on dénomme toto après avoir supprimé l'ancien module qui portait le même nom.
Quand tu rouvriras ton fichier , j'ai laissé des Msgbox au moment de la fermeture et de l'ouverture pour te permettre de voir que le MaVar de l'ouverture correspond au MaVar de la fermeture précédente. Par ailleurs, dans la procédure Workbook_BeforeClose, on fait appel à la procédure Sauve pour déclencher tout. Le fait de mettre dans Workbook_BeforeClose un appel à une autre procédure n'est pas neutre car selon les configurations d'antivirus, le fait de mettre des créations ou de suppressions de module dans les procédures evenementielles de classeur peut être perçu comme une atteinte virale. On ruse donc pour tromper l'anitivirus.
Bon, amuses toi bien même si l'affaire peut être encore améliorée et evidemment adaptée à la situation que tu rencontres..
A+
Bon allons y pour la solution plus compliquée.
Dans le module Thisworkbook , tu inscris
Private Sub Workbook_BeforeClose(Cancel As Boolean)
Set cd = .Add(vbext_ct_StdModule)
cd.Name = "toto"
.Item("toto").CodeModule.InsertLines 1, texte
End With
Application.DisplayAlerts = False
ThisWorkbook.SaveAs ThisWorkbook.FullName
Application.DisplayAlerts = True
End Sub
Tu crées un module (ici , il s'appelle toto) et tu écris une 1ere
fois
Sub sauvegarde()
tampon = 10
End Sub
Au final, cet exemple est fait pour te permettre de voir que si tu
exécutes la procédure Sub tututu() alors MaVar vaudra 12. En
conséquence, à la fermeture du fichier cette variable sera conservée
dans la procédure Sub sauvegarde dans la ligne de texte tampon=12 car
on affecte dans la procédure sub sauve() tampon=MaVar.La procédure
Sub sauvegarde est créée par programmation dans un module qu'on
dénomme toto après avoir supprimé l'ancien module qui portait le
même nom.
Quand tu rouvriras ton fichier , j'ai laissé des Msgbox au moment de
la fermeture et de l'ouverture pour te permettre de voir que le MaVar
de l'ouverture correspond au MaVar de la fermeture précédente.
Par ailleurs, dans la procédure Workbook_BeforeClose, on fait appel à
la procédure Sauve pour déclencher tout. Le fait de mettre dans
Workbook_BeforeClose un appel à une autre procédure n'est pas neutre
car selon les configurations d'antivirus, le fait de mettre des
créations ou de suppressions de module dans les procédures
evenementielles de classeur peut être perçu comme une atteinte
virale. On ruse donc pour tromper l'anitivirus.
Bon, amuses toi bien même si l'affaire peut être encore améliorée
et evidemment adaptée à la situation que tu rencontres..
Set cd = .Add(vbext_ct_StdModule) cd.Name = "toto" .Item("toto").CodeModule.InsertLines 1, texte End With Application.DisplayAlerts = False ThisWorkbook.SaveAs ThisWorkbook.FullName Application.DisplayAlerts = True
End Sub
Tu crées un module (ici , il s'appelle toto) et tu écris une 1ere fois
Sub sauvegarde() tampon = 10 End Sub
Au final, cet exemple est fait pour te permettre de voir que si tu exécutes la procédure Sub tututu() alors MaVar vaudra 12. En conséquence, à la fermeture du fichier cette variable sera conservée dans la procédure Sub sauvegarde dans la ligne de texte tampon car on affecte dans la procédure sub sauve() tampon=MaVar.La procédure Sub sauvegarde est créée par programmation dans un module qu'on dénomme toto après avoir supprimé l'ancien module qui portait le même nom.
Quand tu rouvriras ton fichier , j'ai laissé des Msgbox au moment de la fermeture et de l'ouverture pour te permettre de voir que le MaVar de l'ouverture correspond au MaVar de la fermeture précédente. Par ailleurs, dans la procédure Workbook_BeforeClose, on fait appel à la procédure Sauve pour déclencher tout. Le fait de mettre dans Workbook_BeforeClose un appel à une autre procédure n'est pas neutre car selon les configurations d'antivirus, le fait de mettre des créations ou de suppressions de module dans les procédures evenementielles de classeur peut être perçu comme une atteinte virale. On ruse donc pour tromper l'anitivirus.
Bon, amuses toi bien même si l'affaire peut être encore améliorée et evidemment adaptée à la situation que tu rencontres..
A+
Michael
En effet tout ceci n'est pas très simple ! Mais bon je relève le défi de comprendre (Merci au passage pour toutes les explications) puis de l'appliquer dans mon cas. En tout cas merci beaucoup car vous avez du bien vous amuser pour me pondre tout ça ! Ceci étant, encore mille mercis, je vous tiens au courant. Bon week-end
En effet tout ceci n'est pas très simple !
Mais bon je relève le défi de comprendre (Merci au passage pour toutes les
explications)
puis de l'appliquer dans mon cas.
En tout cas merci beaucoup car vous avez du bien vous amuser pour me pondre
tout ça !
Ceci étant, encore mille mercis, je vous tiens au courant.
Bon week-end
En effet tout ceci n'est pas très simple ! Mais bon je relève le défi de comprendre (Merci au passage pour toutes les explications) puis de l'appliquer dans mon cas. En tout cas merci beaucoup car vous avez du bien vous amuser pour me pondre tout ça ! Ceci étant, encore mille mercis, je vous tiens au courant. Bon week-end