[VBA] Excel : perte variables globales sans fermer le classeur

Excel : perte variables globales sans fermer le classeur [VBA] - VB/VBA/VBS - Programmation

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? :heink:  
 
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

Reply

Marsh Posté le 14-03-2005 à 10:04:07   

Reply

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.

Reply

Marsh Posté le 15-03-2005 à 15:47:26    

Quelle est la variable globale qui disparaît?
 
Où est-elle déclarée?


---------------
Si on vous donne une info qui marche, DITES-LE!!!! ------ Si vous trouvez seul, AUSSI, votre solution peut servir à d'autres! ------ Je dois la majorité de mes connaissances à mes erreurs!
Reply

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

Reply

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?
vraiment désolée, de m'incruster, mais j'ai vu excel ds le sujet....
bonne journée a tous


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.


---------------
Si on vous donne une info qui marche, DITES-LE!!!! ------ Si vous trouvez seul, AUSSI, votre solution peut servir à d'autres! ------ Je dois la majorité de mes connaissances à mes erreurs!
Reply

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

Reply

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

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed