IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Macros et VBA Excel Discussion :

Sauvegarder une variable entre deux procédures


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Homme Profil pro
    Conseil en assistance à maîtrise d'ouvrage
    Inscrit en
    Février 2015
    Messages
    126
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Conseil en assistance à maîtrise d'ouvrage

    Informations forums :
    Inscription : Février 2015
    Messages : 126
    Par défaut Sauvegarder une variable entre deux procédures
    Bonsoir,

    J'ai un soucis de variable ...
    En effet mon code est sencé sauvegarder la variable Nom de format "dd,mm,yyyy" et la réutiliser dans un autre Sub
    Le problème est que cette variable est toujours "1899" et je ne sais pas pourquoi ...
    Voici tout le code :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    Private O As Worksheet 'déclare la variable O (Onglet)
    Private LI As Integer 'déclare la variable LI (LIgne)
    Private CTRL As Control 'déclare la variable CTRL (ConTRôLe)
     
     
     
     
     
     
    Private Sub UserForm_Initialize() 'à l'initialisation de l'UserForm
     
     
    Set O = Sheets("RECAPITULATIF") 'définit l'ontglet O
    If Nouveau = True Then 'condition : si la variable nouveau est [Vrai]
        Me.Caption = "SAISIE DES INTERVENTIONS" 'définit le titre de la boîter de dialogue
        LI = O.Cells(Application.Rows.Count, 1).End(xlUp).Row + 1 'définit la ligne LI
        TextBox15.Value = WorksheetFunction.Max(O.Columns(2)) + 1 'incrémente le numnéro de l'intervention
     
    Else 'sinon
        Me.Caption = "MODIFIER" 'définit le titre de la boîter de dialogue
        LI = ActiveCell.Row 'définit la ligne LI
        TextBox15.Value = O.Cells(LI, 2).Value 'récupèr ele numéro d'intervention
        TextBox5.Value = O.Cells(LI, 4).Value
        TextBox1.Value = O.Cells(LI, 5).Value
        TextBox7.Value = O.Cells(LI, 7).Value
        TextBox2.Value = O.Cells(LI, 8).Value
        TextBox11.Value = O.Cells(LI, 13).Value
    TextBox17.Value = O.Cells(LI, 19).Value
     
    TextBox4 = Format(O.Cells(LI, 10), "dd/mm/yyyy")
     
     
        TextBox3.Value = O.Cells(LI, 9).Value
        TextBox13.Value = O.Cells(LI, 16).Value
        TextBox12.Value = O.Cells(LI, 15).Value
        TextBox14.Value = O.Cells(LI, 17).Value
        TextBox16.Value = O.Cells(LI, 18).Value
        ComboBox2.Value = O.Cells(LI, 3).Value
        ComboBox6.Value = O.Cells(LI, 6).Value
        ComboBox3.Value = O.Cells(LI, 14).Value
        ComboBox5.Value = O.Cells(LI, 12).Value
        ComboBox4.Value = O.Cells(LI, 11).Value
        ComboBox3.Value = O.Cells(LI, 14).Value
     
     
        Nom = Format(O.Cells(LI, 10), "dd/mm/yyyy")
     
         End If
     
     
     
    End Sub
     
    Private Sub CommandButton1_Click() 'bouton "VALIDATION"
    Dim Nom As Integer
     
    For Each CTRL In Me.Controls 'boucle sur tous les contrôles de l'userForm
        'si la propriété [Tag] du contrôle n'est pas vide, renvoie la valeur du contrôle CTRL
        'dans la cellule ligne LI colonne [Tag] (converti en entier) du contrôle, de l'onglet O
        If CTRL.Tag <> "" Then O.Cells(LI, CInt(CTRL.Tag)).Value = CTRL.Value
    Next CTRL 'prochain contrôle de la boucle
    Sheets("RECAPITULATIF").Select
        Range("A1").Select
     
     
           Dim Ladate As String
            Dim FSO As Object, sNomDossier As String
     
     
              Noma = Format(Nom, "yyyy")
             Range("F488").Value = Noma
     
     
        LeParcours = TextBox15.Value
        Ladate = Format(TextBox4, "yyyy")
          If TextBox4.Value = "" Then
        Ladate = Year(Date)
    End If
        sNomDossier = "HYD" & LeParcours
        Set FSO = CreateObject("Scripting.FileSystemObject")
        sChemin = "C:\Users\nathan\Dropbox\HYD" & Noma & "\" & sNomDossier & "/"
        sChemin1 = "C:\Users\nathan\Dropbox\HYD" & Ladate & "\" & sNomDossier & "/"
        If TextBox4.Value = Noma Then Unload Me
     
        FSO.CreateFolder (sChemin1)
     
    If FSO.FolderExists(sChemin) Then FSO.CopyFolder (sChemin), (sChemin1)
     
            If FSO.FolderExists(sChemin) Then FSO.DeleteFolder (sChemin)
     
     
     
     
     
         Set FSO = Nothing
     
     
     
     
    Range("B65536").End(xlUp).Select
        ActiveSheet.Hyperlinks.Add Anchor:=Selection, Address:= _
            "C:\Users\nathan\Dropbox\HYD" & Ladate & "\" & sNomDossier & "/"
    TextToDisplay = "sNomDossier"
    Range("B65536").End(xlUp).Font.Name = "Verdana"
     
     
    Unload Me 'vide et ferme l'UserForm
    If Not IsDate(TextBox4) Then
            MsgBox "Date non-présente ou incorrecte"
            TextBox4 = ""
      End If
     
     
    End Sub
    J’espère que quelqu'un pourra trouver le problème
    Merci à vous

  2. #2
    Inactif  

    Homme Profil pro
    Développeur .NET
    Inscrit en
    Janvier 2012
    Messages
    4 903
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 68
    Localisation : Canada

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : Finance

    Informations forums :
    Inscription : Janvier 2012
    Messages : 4 903
    Billets dans le blog
    36
    Par défaut
    Bonjour,

    Le problème est que cette variable est toujours "1899"
    C'est parce que ta date n'est pas reconnue comme une date.

  3. #3
    Membre confirmé
    Homme Profil pro
    Conseil en assistance à maîtrise d'ouvrage
    Inscrit en
    Février 2015
    Messages
    126
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Conseil en assistance à maîtrise d'ouvrage

    Informations forums :
    Inscription : Février 2015
    Messages : 126
    Par défaut
    Et comment puis-je faire pour la transformer en date ?

  4. #4
    Invité
    Invité(e)
    Par défaut
    Bonsoir,
    Comme la dit clementmarcotte, nom n'est pas une date mais un intégrer basé sur l'année.

    Mais attendons quelques jours et le nombre devrait changer, pour un an du moins!

    En revanche si tu déclares nom en dates et en tête de module te pas dans tes sub tout devrait rentre dans l'ordre.

  5. #5
    Membre éclairé
    Homme Profil pro
    Étudiant
    Inscrit en
    Décembre 2012
    Messages
    345
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 32
    Localisation : France, Seine Maritime (Haute Normandie)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Décembre 2012
    Messages : 345
    Par défaut
    Bonjour,

    Je ne te suis pas vraiment,
    une Variable déclarée à l'intérieur d'une macro ne sera utilisable qu'à l'intérieur de celle-ci.
    En gros, dans la procédure suivante,

    CommandButton1_Click()
    ta variable Nom est différente de la variable Nom de la première procédure, il faudrait donc que la déclares en tête de module comme tu l'as fait pour les variables O, LI ...

    Cordialement

  6. #6
    Membre confirmé
    Homme Profil pro
    Conseil en assistance à maîtrise d'ouvrage
    Inscrit en
    Février 2015
    Messages
    126
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Conseil en assistance à maîtrise d'ouvrage

    Informations forums :
    Inscription : Février 2015
    Messages : 126
    Par défaut
    Bonjour , j'ai bien déclaré Nom en date en haut du module , mais impossible d'ouvrir l'userform ( incompatibilité de type ) ...
    Voici le code :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    Dim Nom As Date
    Private O As Worksheet 'déclare la variable O (Onglet)
    Private LI As Integer 'déclare la variable LI (LIgne)
    Private CTRL As Control 'déclare la variable CTRL (ConTRôLe)
     
     
     
     
     
     
     
    Private Sub UserForm_Initialize() 'à l'initialisation de l'UserForm
     
    Set O = Sheets("RECAPITULATIF") 'définit l'ontglet O
    If Nouveau = True Then 'condition : si la variable nouveau est [Vrai]
        Me.Caption = "SAISIE DES INTERVENTIONS" 'définit le titre de la boîter de dialogue
        LI = O.Cells(Application.Rows.Count, 1).End(xlUp).Row + 1 'définit la ligne LI
        TextBox15.Value = WorksheetFunction.Max(O.Columns(2)) + 1 'incrémente le numnéro de l'intervention
     
    Else 'sinon
        Me.Caption = "MODIFIER" 'définit le titre de la boîter de dialogue
        LI = ActiveCell.Row 'définit la ligne LI
        TextBox15.Value = O.Cells(LI, 2).Value 'récupèr ele numéro d'intervention
        TextBox5.Value = O.Cells(LI, 4).Value
        TextBox1.Value = O.Cells(LI, 5).Value
        TextBox7.Value = O.Cells(LI, 7).Value
        TextBox2.Value = O.Cells(LI, 8).Value
        TextBox11.Value = O.Cells(LI, 13).Value
    TextBox17.Value = O.Cells(LI, 19).Value
     
     TextBox4 = Format(O.Cells(LI, 10), "dd/mm/yyyy")
     
     
        TextBox3.Value = O.Cells(LI, 9).Value
        TextBox13.Value = O.Cells(LI, 16).Value
        TextBox12.Value = O.Cells(LI, 15).Value
        TextBox14.Value = O.Cells(LI, 17).Value
        TextBox16.Value = O.Cells(LI, 18).Value
        ComboBox2.Value = O.Cells(LI, 3).Value
        ComboBox6.Value = O.Cells(LI, 6).Value
        ComboBox3.Value = O.Cells(LI, 14).Value
        ComboBox5.Value = O.Cells(LI, 12).Value
        ComboBox4.Value = O.Cells(LI, 11).Value
        ComboBox3.Value = O.Cells(LI, 14).Value
        Nom = Format(O.Cells(LI, 10), "yyyy")
     
     
         End If
     
    Nouveau = False
    ComboBox2.List() = Array("", "CAEN", "ANGERS", "LE MANS", "TOURS", "POITIERS", "NANTES", "RENNES", "BREST", "BORDEAUX")
    ComboBox3.List() = Array("", "DIAGNOSTIC", "MISE EN SERVICE", "VISITE", "SERVICE 0")
    ComboBox4.List() = Array("", "TERMINE", "EN COURS")
    ComboBox5.List() = Array("", "ANNULE", "FABRICANT", "OK")
    ComboBox6.List() = Array("", "SALMSON", "GRUNDFOS", "PNEUMATEX", "WILO", "XYLEM", "AUTRE")
     
    End Sub
     
    Private Sub CommandButton1_Click() 'bouton "VALIDATION"
     
    For Each CTRL In Me.Controls 'boucle sur tous les contrôles de l'userForm
        'si la propriété [Tag] du contrôle n'est pas vide, renvoie la valeur du contrôle CTRL
        'dans la cellule ligne LI colonne [Tag] (converti en entier) du contrôle, de l'onglet O
        If CTRL.Tag <> "" Then O.Cells(LI, CInt(CTRL.Tag)).Value = CTRL.Value
    Next CTRL 'prochain contrôle de la boucle
    Sheets("RECAPITULATIF").Select
        Range("A1").Select
     
     
           Dim Ladate As String
            Dim FSO As Object, sNomDossier As String
     
     
              Noma = Format(Nom, "yyyy")
             Range("F488").Value = Noma
     
     
        LeParcours = TextBox15.Value
        Ladate = Format(TextBox4, "yyyy")
          If TextBox4.Value = "" Then
        Ladate = Year(Date)
    End If
        sNomDossier = "HYD" & LeParcours
        Set FSO = CreateObject("Scripting.FileSystemObject")
        sChemin = "C:\Users\nathan\Dropbox\HYD" & Noma & "\" & sNomDossier & "/"
        sChemin1 = "C:\Users\nathan\Dropbox\HYD" & Ladate & "\" & sNomDossier & "/"
        If TextBox4.Value = Noma Then Unload Me
     
        FSO.CreateFolder (sChemin1)
     
    If FSO.FolderExists(sChemin) Then FSO.CopyFolder (sChemin), (sChemin1)
     
            If FSO.FolderExists(sChemin) Then FSO.DeleteFolder (sChemin)
     
     
     
     
     
         Set FSO = Nothing
     
     
     
     
    Range("B65536").End(xlUp).Select
        ActiveSheet.Hyperlinks.Add Anchor:=Selection, Address:= _
            "C:\Users\nathan\Dropbox\HYD" & Ladate & "\" & sNomDossier & "/"
    TextToDisplay = "sNomDossier"
    Range("B65536").End(xlUp).Font.Name = "Verdana"
     
     
    Unload Me 'vide et ferme l'UserForm
    If Not IsDate(TextBox4) Then
            MsgBox "Date non-présente ou incorrecte"
            TextBox4 = ""
      End If
     
     
     
    End Sub

    Cordialement ,

Discussions similaires

  1. Réponses: 5
    Dernier message: 12/11/2010, 09h45
  2. passer une variable entre deux classes as3
    Par sanatou dans le forum ActionScript 3
    Réponses: 1
    Dernier message: 27/06/2008, 21h52
  3. Partager une variable entre deux sites web
    Par debutantasp dans le forum ASP
    Réponses: 3
    Dernier message: 12/05/2008, 20h03
  4. sauver une variable entre deux fonctions ?
    Par shloka dans le forum Langage
    Réponses: 10
    Dernier message: 03/04/2007, 14h38
  5. Passer une variable entre deux fenêtres
    Par DeezerD dans le forum Général JavaScript
    Réponses: 1
    Dernier message: 17/08/2005, 09h52

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo