Excel : perte variables globales sans fermer le classeur [VBA] - VB/VBA/VBS - Programmation
Marsh Posté le 14-03-2005 à 10:43:31
Précision: à la ligne ws=ThisWorkbook.Worksheets("" ) , dans le code, j'ai bien bien mis ws=ThisWorkbook.Worksheets(strNomFeuille) à la base.
Marsh Posté le 15-03-2005 à 15:47:26
Quelle est la variable globale qui disparaît?
Où est-elle déclarée?
Marsh Posté le 15-03-2005 à 17:24:36
désolée de venir interrompre votre discussion, mais comment tu fait pour utiliser excel? tu le déclarare ou l'inclue comment? comment tu lies excel et borland par exemple?
vraiment désolée, de m'incruster, mais j'ai vu excel ds le sujet....
bonne journée a tous
Marsh Posté le 16-03-2005 à 07:18:30
baleine2 a écrit : désolée de venir interrompre votre discussion, mais comment tu fait pour utiliser excel? tu le déclarare ou l'inclue comment? comment tu lies excel et borland par exemple? |
baleine2:
Si tu veux qu'on te réponde, crée un autre sujet avec une question précise, sinon, on ne s'en sortira pas.
Marsh Posté le 16-03-2005 à 10:11:58
J'ai une tonne de variables globales (je sais, je sais, faut pas en utiliser de trop, mais bon) dans un module standard. ET ELLES SAUTENT TOUTES. En particulier, j'ai mon tableau dont je souhaite maintenir l'existence pendant l'utilisation de la feuille. Ce tableau contiendra des références aux checkbox créées par la procédure. En gros j'ai déclaré dans mon module standard
Public clsCheck_Box_IFRS() As clsCheckBox
Et j'ai un module de classe clsCheckBox:
Option Explicit
Private WithEvents m_Chk As MSForms.CheckBox
Public Function Init(ByVal CheckBox As MSForms.CheckBox) As Boolean
Set m_Chk = CheckBox
End Function
Private Sub m_Chk_Click()
MsgBox m_Chk.GroupName, vbInformation, "Test Classe"
End Sub
Public Property Get GroupName() As String
GroupName = m_Chk.GroupName
End Property
Et l'affectation , je compte la faire après utilisation de CreateChkbox_v2.
Ce que j'ai trouvé, c'est que lorsque mes variables globales vont sauter, le mode arrêt de déboguage est impossible
Du genre avec:
Private Sub TestCreation()
Call CreateChkbox_v2("Test_chk", 4, 2, 1)
End Sub
si je vois que l'arrêt au niveau du "End Sub" m'est refusé, je sais que mes variables globales vont sauter. D'autres part, j'ai lu sur MSDN que les checkbox peuvent provoquer des trucs bizarres sous Excel 2000 (http://support.microsoft.com/default.aspx?scid=kb;en-us;248180 , ça a l'air voisin de mon cas, mais bon...) mais j'ai aucun contrôle sur les mises à jour là où je suis...
Je crois que j'ai donné tous les renseignements... Mais je crois que les checkboxes causent beaucoup de soucis à charger dans Excel 2000...
Marsh Posté le 07-07-2005 à 11:44:56
OK, je me réponds tout seul, même si c'est un peu tard.
1 ère chose : d'après le livre "VBA Pour Excel 2002" de S.Bullen et J.Green, "il existe des bogues (relativement rares) où dans la version 97 d'Excel, des bogues ont provoqué la réinitialisation des variables".
Evidemment, cette note se trouve dans le chapitre sur les modules de classes, puisque si vos variables globales sont effacées, les modules de classes sont pratiquement inutilisables.
Ensuite moi j'ai Excel 2000 SR-1/SR-1a. et avec cette version, quand on met trop d'objets Active X, au bout d'un moment, Excel a des problèmes de gestion de mémoire. Comme vous pouvez le voir sur le post, j'utilisais des controles Active X( et j'en ai vraiment pas mal sur le classeur qui buggait). La page du site du support de Microsoft à ce sujet : http://support.microsoft.com/defau [...] us;248180.
CQFD
J'ai pas testé si sur 97 mes variables se paumaient aussi...
Marsh Posté le 14-03-2005 à 10:04:07
Bonjour.
Je voudrai savoir si d'une part, des personnes ont déjà rencontré ce problème, et si d'autre part, il y a une solution. J'ai besoin d'une variable globale (un tableau) qui doit vivre pendant que l'utilisateur est sur une feuille excel.
A chaque fois que je rentre dans une procédure, ma variable globale est bien présente, mais dès que j'en sors, elle est remise à zéro. Si je mets une variable static dans la fonction pour compter le nombre de passages dans ma fonction, elle aussi se met à zéro.
Le plus bizarre, c'est qu'au bout de deux lancement consécutifs de la procédure, la variable globale et la variables static semble bien rester en mémoire. Suis-je fou?
Voici le code
Private Sub CreateChkbox_v2(strNomFeuille As String, _
iLigStartCell As Integer, iColStartCell As Integer, iNbOffset As Integer)
Dim ws As Worksheet
Dim rngLinkedCell As Range
Dim oleChkBox As oleObject
Dim i As Integer
Static iTest As Integer
Set ws = ThisWorkbook.Worksheets("" )
ws.Activate
' Must deactivate clicked control for code to run.
ws.Range("a1" ).Activate
For i = 0 To iNbOffset
Set rngLinkedCell = ws.Cells(iLigStartCell, iColStartCell + i)
' The next line adds the control and sizes and
' positions the control over a cell
Set oleChkBox = ws.OLEObjects.Add(ClassType:="Forms.CheckBox.1", _
Left:=rngLinkedCell.Left + rngLinkedCell.Width \ 2 - 4, _
Top:=rngLinkedCell.Top + rngLinkedCell.Height \ 2 - 4, _
Width:=10, _
Height:=11)
With oleChkBox
'This lets each check box stay with its row during sorts.
.Placement = xlMove
.LinkedCell = rngLinkedCell.Address
With .Object
.BackStyle = fmBackStyleTransparent
.Caption = ""
.Value = False
.BackColor = &HC0FFC0
'.GroupName = oleChkBox.Name
End With
End With
iTest = iTest + 1
Next
MsgBox "Var Statique : " & CStr(iTest), vbInformation, "Test statique"
Set ws = Nothing
Set rngLinkedCell = Nothing
Set oleChkBox = Nothing
End Sub