Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
2697 connectés 

  FORUM HardWare.fr
  Programmation
  VB/VBA/VBS

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

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

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

n°1011755
Risto2004
Posté le 14-03-2005 à 10:04:07  profilanswer
 

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

mood
Publicité
Posté le 14-03-2005 à 10:04:07  profilanswer
 

n°1011800
Risto2004
Posté le 14-03-2005 à 10:43:31  profilanswer
 

Précision: à la ligne ws=ThisWorkbook.Worksheets("" ) , dans le code, j'ai bien bien mis ws=ThisWorkbook.Worksheets(strNomFeuille) à la base.

n°1013476
AlainTech
Pas trouvé? Cherche encore!
Posté le 15-03-2005 à 15:47:26  profilanswer
 

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!
n°1013657
baleine2
Posté le 15-03-2005 à 17:24:36  profilanswer
 

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

n°1014133
AlainTech
Pas trouvé? Cherche encore!
Posté le 16-03-2005 à 07:18:30  profilanswer
 

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!
n°1014221
Risto2004
Posté le 16-03-2005 à 10:11:58  profilanswer
 

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

n°1143023
Risto2004
Posté le 07-07-2005 à 11:44:56  profilanswer
 

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


Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  VB/VBA/VBS

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

 

Sujets relatifs
[VBA]Auriez vous un livre a me conseiller pour m initier au vbaAttacher 1 table Access à 1 fichier Excel avec mot de passe
[C#] Fermer une appli et la rouvrir aprés 1 certain tpsLes variables
[VB/VBA/VBS] Lier 2 bases access avec VB6dictionnaire langage excel
[VBA] Access, rafraichir automatiquement un menu déroulant[VB] Macro complémentaire sous Excel
Faire une macro sur excel pour transformer Fichier Word[ASP] Perte de variable de session en utilisant des cookies
Plus de sujets relatifs à : [VBA] Excel : perte variables globales sans fermer le classeur


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR