Perte de valeur d'une variable public

Résolu
Bob0876 Messages postés 41 Statut Membre -  
Bob0876 Messages postés 41 Statut Membre -
Bonjour,

J'ai un problème de perte de valeur et je ne comprend vraiment pas pourquoi ma valeur retourne à 0 lorsque un de mes userform ouvre. J'ai mis la variable public d as integer au début du seul module que j'ai créé et je déclare cette variable seulement une fois, j'ai vérifier dans tout mes userform. Quelqu'un peut m'aidé?

je spécifie que mon userform est importé lors de son ouverture.

voici mon fichier https://www.cjoint.com/?0KrsKE9FqIm

Merci,

8 réponses

  1. Bob0876 Messages postés 41 Statut Membre
     
    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
    0
  2. PlacageGranby Messages postés 402 Statut Membre 26
     
    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é.
    0
  3. Bob0876 Messages postés 41 Statut Membre
     
    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,
    0
    1. PlacageGranby Messages postés 402 Statut Membre 26
       
      Et ma conjointe travaille à Sherbrooke, vive l'autoroute 10
      0
  4. Bob0876 Messages postés 41 Statut Membre
     
    Bon et bien ca ne marche pas plus je n'y comprend rien!!!!
    0
  5. Vous n’avez pas trouvé la réponse que vous recherchez ?

    Posez votre question
  6. PlacageGranby Messages postés 402 Statut Membre 26
     
    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.
    0
  7. Bob0876 Messages postés 41 Statut Membre
     
    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
    0
  8. PlacageGranby Messages postés 402 Statut Membre 26
     
    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.
    0
  9. Bob0876 Messages postés 41 Statut Membre
     
    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,
    0