Perte de valeur d'une variable public
Résolu/Fermé
Bob0876
Messages postés
40
Date d'inscription
mardi 16 septembre 2014
Statut
Membre
Dernière intervention
4 décembre 2014
-
17 nov. 2014 à 18:31
Bob0876 Messages postés 40 Date d'inscription mardi 16 septembre 2014 Statut Membre Dernière intervention 4 décembre 2014 - 18 nov. 2014 à 17:19
Bob0876 Messages postés 40 Date d'inscription mardi 16 septembre 2014 Statut Membre Dernière intervention 4 décembre 2014 - 18 nov. 2014 à 17:19
A voir également:
- Vba variables globales
- Vba attendre 1 seconde ✓ - Forum VB / VBA
- Vba récupérer valeur cellule ✓ - Forum VB / VBA
- Mkdir vba ✓ - Forum VB / VBA
- Excel compter cellule couleur sans vba - Guide
- Vba excel sélectionner une plage de cellules variable ✓ - Forum VB / VBA
8 réponses
Bob0876
Messages postés
40
Date d'inscription
mardi 16 septembre 2014
Statut
Membre
Dernière intervention
4 décembre 2014
17 nov. 2014 à 19:43
17 nov. 2014 à 19:43
J'ai remarqué que ces lorsqu'une de mes procédure écrit du code dans worksheet_activate que tout mes valeur publique revienne a 0.
Peut importe ce que j'écrit dans worsheet_activate (exemple : dim v a s string) et v n'existe null par ailleur lorsque j'active cette "Sheet" tout mes variable publique redevienne à 0??
Je ne comprend pas
Peut importe ce que j'écrit dans worsheet_activate (exemple : dim v a s string) et v n'existe null par ailleur lorsque j'active cette "Sheet" tout mes variable publique redevienne à 0??
Je ne comprend pas
PlacageGranby
Messages postés
393
Date d'inscription
mercredi 26 mars 2014
Statut
Membre
Dernière intervention
7 mars 2019
26
17 nov. 2014 à 20:10
17 nov. 2014 à 20:10
Extrait de
http://www.mdf-xlpages.com/modules/publisher/item.php?itemid=51
Durée de vie des variables
La période pendant laquelle une variable conserve sa valeur correspond à sa durée de vie. La valeur d'une variable peut changer pendant sa durée de vie, mais elle conserve une certaine valeur. Lorsqu'une variable perd sa portée, elle n'a plus de valeur.
Au début d'une procédure, toutes les variables sont initialisées dès leur déclaration :
Si tu as un dim v a s string, V est initialisé à sa déclaration.
Si DIm est à l'intérieur d'un évènement, (exemple worksheet_activate), alors j'imagine que à chaque appel de l'évènement, V est déclaré, donc initialisé.
http://www.mdf-xlpages.com/modules/publisher/item.php?itemid=51
Durée de vie des variables
La période pendant laquelle une variable conserve sa valeur correspond à sa durée de vie. La valeur d'une variable peut changer pendant sa durée de vie, mais elle conserve une certaine valeur. Lorsqu'une variable perd sa portée, elle n'a plus de valeur.
Au début d'une procédure, toutes les variables sont initialisées dès leur déclaration :
Si tu as un dim v a s string, V est initialisé à sa déclaration.
Si DIm est à l'intérieur d'un évènement, (exemple worksheet_activate), alors j'imagine que à chaque appel de l'évènement, V est déclaré, donc initialisé.
Bob0876
Messages postés
40
Date d'inscription
mardi 16 septembre 2014
Statut
Membre
Dernière intervention
4 décembre 2014
17 nov. 2014 à 20:28
17 nov. 2014 à 20:28
Granby a Quebec si oui j'habite proche de la moi!! ;p
Concernant (dim v as integer) s'était un exemple. Les variable public en question qui sont remise a zéro ne sont pas écrit dans worksheet_activate!!! c'est pour cela que je ne comprend pas! Mais je crois que c'est parce que j'utilise ces variable dans des userform.
Je vais essayer de créé des procédure dans un module pour toute les bout de code contenant ces variable publique dans mes userform.
Merci,
Concernant (dim v as integer) s'était un exemple. Les variable public en question qui sont remise a zéro ne sont pas écrit dans worksheet_activate!!! c'est pour cela que je ne comprend pas! Mais je crois que c'est parce que j'utilise ces variable dans des userform.
Je vais essayer de créé des procédure dans un module pour toute les bout de code contenant ces variable publique dans mes userform.
Merci,
PlacageGranby
Messages postés
393
Date d'inscription
mercredi 26 mars 2014
Statut
Membre
Dernière intervention
7 mars 2019
26
18 nov. 2014 à 17:08
18 nov. 2014 à 17:08
Et ma conjointe travaille à Sherbrooke, vive l'autoroute 10
Bob0876
Messages postés
40
Date d'inscription
mardi 16 septembre 2014
Statut
Membre
Dernière intervention
4 décembre 2014
17 nov. 2014 à 20:46
17 nov. 2014 à 20:46
Bon et bien ca ne marche pas plus je n'y comprend rien!!!!
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
PlacageGranby
Messages postés
393
Date d'inscription
mercredi 26 mars 2014
Statut
Membre
Dernière intervention
7 mars 2019
26
Modifié par PlacageGranby le 17/11/2014 à 21:17
Modifié par PlacageGranby le 17/11/2014 à 21:17
Re-bonjour,
Je ne peux pas vraiment tester ton fichier car ça bloque à l'importation de ton userform à l'intérieur de ton CASE Vehicule_de_deneigement
Je n'ai pas le fichier frm sur mon disque dur comme chez toi.
Je ne peux pas vraiment tester ton fichier car ça bloque à l'importation de ton userform à l'intérieur de ton CASE Vehicule_de_deneigement
Je n'ai pas le fichier frm sur mon disque dur comme chez toi.
Bob0876
Messages postés
40
Date d'inscription
mardi 16 septembre 2014
Statut
Membre
Dernière intervention
4 décembre 2014
17 nov. 2014 à 21:25
17 nov. 2014 à 21:25
Voici les modification que je viens de faire! mon gros problème est que la variable static d ce réinitialise lors de l'activation ou la désactivation de la nouvelle feuille créé.
Je ne comprend pas comment une variable static pour ce réinitialise tout seul si elle n'est appelé nul part ailleurs que dans ce module?
Sub initialisation()
Dim instruc1 As String, instruc2 As String, m As Integer, n As String, NumM As Byte, feuil As String
Dim wrsh As Worksheet, Num As Byte, Ln As Integer, usf As String
Static d As Integer
n = UserForm1.ComboBox1.Text
m = 1
If NumM < 1 Then
NumM = 1
End If
If d < 1 Then
d = 1
End If
usf = Workbooks(ActiveWorkbook.Name).Path
UserForm1.Hide
If n <> "" Then
Ln = Len(n) + 1
Sheets.Add.Move After:=Sheets(Sheets.Count)
For Each wrsh In Worksheets
If wrsh.Name Like n & "*" Then
Num = CInt(Mid(wrsh.Name, Ln, 2))
If Num >= NumM Then
NumM = Num + 1
End If
End If
Next
Sheets(Sheets.Count).Name = n & NumM
Select Case n
Case "Vehicule_de_deneigement"
While m <= 5
Application.VBE.ActiveVBProject.VBComponents.Import usf & "/USF/" & n & m & ".frm"
ThisWorkbook.VBProject.VBComponents(n & m).Name = n & m & d
If m = 1 Then
feuil = d + 1
instruc1 = "Private Sub Worksheet_Activate()" & vbCrLf & "Dim v as Object" & vbCrLf & "Dim n2 as string" _
& vbCrLf & "Dim m2 as string" & vbCrLf & "Dim a2 as string" & vbCrLf & "n2 = " & n & vbCrLf & "m2 = " _
& m & vbCrLf & "set v = " & n & m & d & vbCrLf & "v.show" _
& vbCrLf & "end sub"
instruc2 = "Private Sub Worksheet_Deactivate()" & vbCrLf & "Dim v as Object" & vbCrLf & "Dim n2 as string" _
& vbCrLf & "Dim m2 as string" & vbCrLf & "Dim a2 as string" & vbCrLf & "n2 = " & n & vbCrLf & "m2 = " _
& m & vbCrLf & "set v = " & n & m & d & vbCrLf & "v.hide" _
& vbCrLf & "end sub"
Application.VBE.ActiveVBProject.VBComponents.Item("Feuil" & feuil).CodeModule.AddFromString (instruc1)
Application.VBE.ActiveVBProject.VBComponents.Item("Feuil" & feuil).CodeModule.AddFromString (instruc2)
End If
m = m + 1
d = d + 1
Wend
Case "Véhicule de transport"
End Select
End If
Select Case n
Case "Vehicule_de_deneigement"
While m <= 5
Application.VBE.ActiveVBProject.VBComponents.Import usf & "/USF/" & n & m & ".frm"
ThisWorkbook.VBProject.VBComponents(n & m).Name = n & m & d
If m = 1 Then
feuil = d + 1
End If
m = m + 1
d = d + 1
Wend
Case "Véhicule de transport"
End Select
End Sub
Je ne comprend pas comment une variable static pour ce réinitialise tout seul si elle n'est appelé nul part ailleurs que dans ce module?
Sub initialisation()
Dim instruc1 As String, instruc2 As String, m As Integer, n As String, NumM As Byte, feuil As String
Dim wrsh As Worksheet, Num As Byte, Ln As Integer, usf As String
Static d As Integer
n = UserForm1.ComboBox1.Text
m = 1
If NumM < 1 Then
NumM = 1
End If
If d < 1 Then
d = 1
End If
usf = Workbooks(ActiveWorkbook.Name).Path
UserForm1.Hide
If n <> "" Then
Ln = Len(n) + 1
Sheets.Add.Move After:=Sheets(Sheets.Count)
For Each wrsh In Worksheets
If wrsh.Name Like n & "*" Then
Num = CInt(Mid(wrsh.Name, Ln, 2))
If Num >= NumM Then
NumM = Num + 1
End If
End If
Next
Sheets(Sheets.Count).Name = n & NumM
Select Case n
Case "Vehicule_de_deneigement"
While m <= 5
Application.VBE.ActiveVBProject.VBComponents.Import usf & "/USF/" & n & m & ".frm"
ThisWorkbook.VBProject.VBComponents(n & m).Name = n & m & d
If m = 1 Then
feuil = d + 1
instruc1 = "Private Sub Worksheet_Activate()" & vbCrLf & "Dim v as Object" & vbCrLf & "Dim n2 as string" _
& vbCrLf & "Dim m2 as string" & vbCrLf & "Dim a2 as string" & vbCrLf & "n2 = " & n & vbCrLf & "m2 = " _
& m & vbCrLf & "set v = " & n & m & d & vbCrLf & "v.show" _
& vbCrLf & "end sub"
instruc2 = "Private Sub Worksheet_Deactivate()" & vbCrLf & "Dim v as Object" & vbCrLf & "Dim n2 as string" _
& vbCrLf & "Dim m2 as string" & vbCrLf & "Dim a2 as string" & vbCrLf & "n2 = " & n & vbCrLf & "m2 = " _
& m & vbCrLf & "set v = " & n & m & d & vbCrLf & "v.hide" _
& vbCrLf & "end sub"
Application.VBE.ActiveVBProject.VBComponents.Item("Feuil" & feuil).CodeModule.AddFromString (instruc1)
Application.VBE.ActiveVBProject.VBComponents.Item("Feuil" & feuil).CodeModule.AddFromString (instruc2)
End If
m = m + 1
d = d + 1
Wend
Case "Véhicule de transport"
End Select
End If
Select Case n
Case "Vehicule_de_deneigement"
While m <= 5
Application.VBE.ActiveVBProject.VBComponents.Import usf & "/USF/" & n & m & ".frm"
ThisWorkbook.VBProject.VBComponents(n & m).Name = n & m & d
If m = 1 Then
feuil = d + 1
End If
m = m + 1
d = d + 1
Wend
Case "Véhicule de transport"
End Select
End Sub
PlacageGranby
Messages postés
393
Date d'inscription
mercredi 26 mars 2014
Statut
Membre
Dernière intervention
7 mars 2019
26
17 nov. 2014 à 22:39
17 nov. 2014 à 22:39
hmm...
au pire... triche :)
Worksheet("Accueil").range("Z1").value = d
blah blah
ouvre userform.
d = Worksheet("Accueil").range("Z1").value
On dirait que l'ouverture du userform reset l'exécution.
Donc sauvegarde tes variables à même ta feuille accueil avant.
Fait les manipulations, et va tout de suite réaffecter tes variables après.
au pire... triche :)
Worksheet("Accueil").range("Z1").value = d
blah blah
ouvre userform.
d = Worksheet("Accueil").range("Z1").value
On dirait que l'ouverture du userform reset l'exécution.
Donc sauvegarde tes variables à même ta feuille accueil avant.
Fait les manipulations, et va tout de suite réaffecter tes variables après.
Bob0876
Messages postés
40
Date d'inscription
mardi 16 septembre 2014
Statut
Membre
Dernière intervention
4 décembre 2014
18 nov. 2014 à 17:19
18 nov. 2014 à 17:19
J'ai trouver mon erreur! je croyais que mettre la valeur static gardais cette valeur meme apres la fin de la procédure a laquelle cette variable est affecté mais non! Donc, jai fasi comme tu dit et sa marche
Merci,
Merci,