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 :

Garder la valeur d'une variable durant tout le temps ou mon classeur est ouvert ?


Sujet :

Macros et VBA Excel

  1. #1
    Membre à l'essai
    Inscrit en
    Octobre 2007
    Messages
    25
    Détails du profil
    Informations forums :
    Inscription : Octobre 2007
    Messages : 25
    Points : 22
    Points
    22
    Par défaut Garder la valeur d'une variable durant tout le temps ou mon classeur est ouvert ?
    Bonjour à toutes et à tous !

    J'ai besoin d'une information peut être basique mais qu'il est obligatoire que je sache :

    Dans un classeur, j'ai créer un formulaire de saisie ou je demande à l'utilisateur de saisir un identifiant.
    Ce que je cherche à faire est que si l'utilisateur utilise à nouveau ce formulaire durant la même session d'utilisation du classeur courant, il n'est pas besoin de ressaisir sont identifiant.

    En traduction je dois garder cette variable disponible tant que le classeur n'à pas été refermé.

    J'espère que l'un ou l'une d'entre vous pourra m'aider à trouver une solution à mon petit soucis d'utilisation d'une variable courante !

    Merci encore de votre aide.

  2. #2
    Rédacteur/Modérateur

    Avatar de Jean-Philippe André
    Homme Profil pro
    Développeur VBA/C#/VB.Net/Power Platform
    Inscrit en
    Juillet 2007
    Messages
    14 595
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : Canada

    Informations professionnelles :
    Activité : Développeur VBA/C#/VB.Net/Power Platform
    Secteur : Finance

    Informations forums :
    Inscription : Juillet 2007
    Messages : 14 595
    Points : 34 271
    Points
    34 271
    Par défaut
    salut,
    tu peux passer par une variable dite globale dans un module, que tu initialiseras avec la valeur retournée dans l'inputbox.
    Cycle de vie d'un bon programme :
    1/ ça fonctionne 2/ ça s'optimise 3/ ça se refactorise

    Pas de question technique par MP, je ne réponds pas

    Mes ouvrages :
    Apprendre à programmer avec Access 2016, Access 2019 et 2021

    Apprendre à programmer avec VBA Excel
    Prise en main de Dynamics 365 Business Central

    Pensez à consulter la FAQ Excel et la FAQ Access

    Derniers tutos
    Excel et les paramètres régionaux
    Les fichiers Excel binaires : xlsb,

    Autres tutos

  3. #3
    Invité
    Invité(e)
    Par défaut
    Bonjour

    Il faut que tu déclares ta variable en Public dans un module.

    Starec

  4. #4
    Membre à l'essai
    Inscrit en
    Octobre 2007
    Messages
    25
    Détails du profil
    Informations forums :
    Inscription : Octobre 2007
    Messages : 25
    Points : 22
    Points
    22
    Par défaut
    Ben en fait la variable est déclaré public :

    En début du module j'ai :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Option Explicit 1
     
    Public xlsusername as string
    Ensuite lorsque je valide mon formulaire je fais :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    xlsusername = nomuser.text
    unload formulaire

    Mais quand je reviens sur le formulaire ma variable est vide ?!?

    D'ou ma question
    Je suis sous excel 2003

    Une idée ?

  5. #5
    Invité
    Invité(e)
    Par défaut
    Re

    Tu dis que ta variable est vide, mais quand tu charges le formulaire remets-tu la valeur de la variable dans la zone de texte ?

    Starec

  6. #6
    Membre à l'essai
    Inscrit en
    Octobre 2007
    Messages
    25
    Détails du profil
    Informations forums :
    Inscription : Octobre 2007
    Messages : 25
    Points : 22
    Points
    22
    Par défaut
    Ben pour être sur que l'on parle de la même chose

    Voici mon code pour l'ensemble du formulaire

    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
    120
    121
    122
    123
    124
    125
    126
    127
    128
    129
    130
    131
    132
    133
    134
    135
    136
    137
    138
    139
    140
    141
    142
    143
    144
    145
    146
    147
    148
    149
    150
    151
    152
    153
    154
    155
    156
    157
    158
    159
    160
    161
    162
    163
    164
    165
    166
    167
    168
    169
    170
    171
    172
    Private Declare Function WNetGetConnection Lib "mpr.dll" Alias "WNetGetConnectionA" (ByVal lpszLocaName As String, _
                ByVal lpszRemoteName As String, cbRemoteName As Long) As Long
    Public caseref As Variant
     
    Public Function GetUNCPath(ByVal PathName As String) As String
     
        Const MAX_UNC_LENGTH As Integer = 512
        Dim strUNCPath As String
        Dim strTempUNCName As String
        Dim lngReturnErrorCode As Long
     
        strTempUNCName = String(MAX_UNC_LENGTH, 0)
        lngReturnErrorCode = WNetGetConnection(Left(PathName, 2), strTempUNCName, MAX_UNC_LENGTH)
     
        If lngReturnErrorCode = 0 Then
            strTempUNCName = Trim(Left(strTempUNCName, InStr(strTempUNCName, vbNullChar) - 1))
            strUNCPath = strTempUNCName & Mid(PathName, 3)
        End If
     
        GetUNCPath = strUNCPath
     
    End Function
     
     
     
    Private Sub BtnAnnulation_Click()
     
        Unload Annotation
     
    End Sub
     
    Private Sub BtnValidation_Click()
     
        Dim SelectedZone As String
        Dim HeightComments As Single
        Dim WidthComment As Single
        Dim ModifComments As String
        Dim NomUserInvalide As String
     
        NomUserInvalide = "Vous n'avez pas saisie votre nom d'utilisateur." & vbCrLf & "Veuillez en saisir un pour pouvoir valider votre saisie."
     
        If NomCorrecteur.Text = "" Then
            MsgBox NomUserInvalide
        Else
            XlsUserName = NomCorrecteur.Text
            'recherche de la premiere ligne vide dans l'onglet anotation (l'onglet courant).
            BlankPos = Range(SearchCommentHome).Row + 1
            While Sheets("Annotations").Range("A" & BlankPos).Value <> ""
                BlankPos = BlankPos + 1
            Wend
     
            If CheckBoxModifAnalyse.Value = True Then
                HeightComments = 14 * 4
     
                ModifComments = NomCorrecteur.Text & " le " & DateSaisie.Text & vbCrLf
                widthComments = Font.Size * Len(ModifComments)
     
                    If ModifAnalyseRef <> "" Then
                        ModifComments = ModifComments & "Référence de la modification de l'analyse : " & ModifAnalyseRef.Text & vbCrLf
                        Else
                            ModifComments = ModifComments
                    End If
                    If HotwareRef.Text <> "" Then
                        ModifComments = ModifComments & "Référence Hotware : " & HotwareRef.Text
                        Else
                            ModifComments = ModifComments
                    End If
     
                With Sheets("Plan de test")
                    .Cells(ActiveCell.Row, 1).Select
                    Selection.ClearComments
                    .Cells(ActiveCell.Row, 1).AddComment
                    .Cells(ActiveCell.Row, 1).Comment.Visible = False
                    .Cells(ActiveCell.Row, 1).Comment.Text Text:=ModifComments
                    .Cells(ActiveCell.Row, 1).Comment.Shape.Height = HeightComments
                    .Cells(ActiveCell.Row, 1).Comment.Shape.Width = widthComments
                End With
            End If
     
            SelectedZone = "A" & BlankPos & ":E" & BlankPos
            ModifComments = ModifComments & UserComment.Text
            With Sheets("Annotations")
                '.Activate ' cette ligne permet de se positionner directement sur l'onglet annotation.
                .Range("A" & BlankPos).Value = NomCorrecteur.Text
                .Range("B" & BlankPos).Value = DateSaisie.Text
                .Range("C" & BlankPos).FormulaLocal = caseref
                .Range("D" & BlankPos).Value = ModifComments
                'Formatage de l'affichage des cellules concernant l'annotation qui vient d'être créée.
                .Range(SelectedZone).Borders.LineStyle = xlContinuous
                .Range("A" & BlankPos & ":C" & BlankPos).HorizontalAlignment = xlCenter
                .Range("A" & BlankPos & ":C" & BlankPos).VerticalAlignment = xlCenter
                .Range("A" & BlankPos & ":C" & BlankPos).Font.Bold = True
                .Range("E" & BlankPos).HorizontalAlignment = xlCenter
                .Range("E" & BlankPos).VerticalAlignment = xlCenter
                .Range("E" & BlankPos).Font.Bold = True
            End With
     
            Unload Annotation
            XlsUserName = NomCorrecteur.Text
        End If
     
    End Sub
     
    Private Sub CheckBoxModifAnalyse_Click()
     
        If CheckBoxModifAnalyse = True Then
            HotwareRef.Visible = True
            ModifAnalyseRef.Visible = True
            Label6.Visible = True
            Label7.Visible = True
            Else
                HotwareRef.Visible = False
                ModifAnalyseRef.Visible = False
                Label6.Visible = False
                Label7.Visible = False
        End If
     
    End Sub
     
    Private Sub UserForm_Activate()
     
     
        Dim CurrentXlsUserName As String
        Dim PosUserNameInString As Integer
     
     
        'PosUserNameInString = 1
        'CurrentXlsUserName = Left$(GetUNCPath("x:\"), Len(GetUNCPath("x:\")) - 1)
        MsgBox XlsUserName
        MsgBox GetUNCPath("X:\")
     
        'If XlsUserName = "" Then
            'NomCorrecteur.Text = XlsUserName
            'Else
                'NomCorrecteur.Text = XlsUserName
        'End If
     
        CheckBoxModifAnalyse.Value = False
        If CheckBoxModifAnalyse.Value = False Then
            HotwareRef.Visible = False
            ModifAnalyseRef.Visible = False
            Label6.Visible = False
            Label7.Visible = False
        End If
     
        DateSaisie.Text = Date
     
        If UCase(Cells(ActiveCell.Row, 1)) = "TITRE" Or UCase(Cells(ActiveCell.Row, 1)) = "OBJECTIF" Then
            If UCase(Cells(ActiveCell.Row, 1)) = "TITRE" Then
                ActiveCase.Text = "Titre"
                UserComment.Text = "Titre : " & Cells(ActiveCell.Row, 2) & vbCrLf
                caseref = ActiveCase.Text
            End If
            If UCase(Cells(ActiveCell.Row, 1)) = "OBJECTIF" Then
                ActiveCase.Text = "Objectif"
                UserComment.Text = "Objectif : " & Cells(ActiveCell.Row, 2) & vbCrLf
                caseref = ActiveCase.Text
            End If
            'Ecrire la formule permétant de faire référence au cas de tests d'origine
            Else
                caseref = "=" & "TEXTE('Plan de test'!$A" & ActiveCell.Row & ";0)"
                ActiveCase.Text = Cells(ActiveCell.Row, 1)
        End If
     
        If XlsUserName <> "" Then
            NomCorrecteur.Text = XlsUserName
            Else
                XlsUserName = XlsUserName
        End If
        'NomCorrecteur.Text = Application.UserName
     
    End Sub
    Il y à un problème sur mon code ?

  7. #7
    Membre confirmé
    Profil pro
    Inscrit en
    Février 2007
    Messages
    491
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2007
    Messages : 491
    Points : 542
    Points
    542
    Par défaut
    bonjour
    a l initialisation de ton formulaire tu recupere la valeur de ta variable
    si
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    Private Sub UserForm_Initialize()
     NomCorrecteur.Text=XlsUserName

  8. #8
    Membre à l'essai
    Inscrit en
    Octobre 2007
    Messages
    25
    Détails du profil
    Informations forums :
    Inscription : Octobre 2007
    Messages : 25
    Points : 22
    Points
    22
    Par défaut
    je vais testé et je te dis !

  9. #9
    Membre éprouvé

    Profil pro
    Inscrit en
    Octobre 2006
    Messages
    652
    Détails du profil
    Informations personnelles :
    Localisation : France, Ardèche (Rhône Alpes)

    Informations forums :
    Inscription : Octobre 2006
    Messages : 652
    Points : 1 114
    Points
    1 114
    Par défaut
    Bonjour,

    Pour garder au chaud une variable tant que tu es sur une session excel (quelque soit la succession d'ouverture et de fermeture des classeurs), il existe la technique dite des "hidden names"

    Tu trouveras un tuto là dessus sur le site du MVP laurent Longre
    http://xcell05.free.fr/

    ce sont des macros xl4 par exemple classeur source:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    Sub memoriser()
    Dim baratin As String
    baratin = "machin"
     
     
        ExecuteExcel4Macro "set.name(""macroxl4"",""" & baratin & """)"
     
    End Sub
    tu peux fermer "source"

    et dansclasseur "cible"
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    Sub recuperer()
    Range("B2") = Application.ExecuteExcel4Macro("get.name(""macroxl4"")")
    End Sub
    Bon WE
    Michel_M

  10. #10
    Membre à l'essai
    Inscrit en
    Octobre 2007
    Messages
    25
    Détails du profil
    Informations forums :
    Inscription : Octobre 2007
    Messages : 25
    Points : 22
    Points
    22
    Par défaut
    Salut à tous,

    Seule la méthode des "Hiden Names" à pus fonctionner chez moi !
    Mais cela marche parfaitement !!!

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [Débutant] garder une variable durant toute la connexion
    Par nouass dans le forum ASP.NET
    Réponses: 1
    Dernier message: 28/03/2013, 14h42
  2. Réponses: 3
    Dernier message: 09/05/2010, 23h24
  3. Réponses: 3
    Dernier message: 20/11/2009, 19h51
  4. Réponses: 15
    Dernier message: 01/05/2006, 12h40
  5. garder la valeur d'une variable
    Par somatino dans le forum Langage
    Réponses: 15
    Dernier message: 31/03/2006, 23h03

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