Déclarer une variable "mdp" pour l'entièreté du fichier

Bonjour le forum,

Désolé pour la question mais j'aimerais déclarer une variable "mdp" qui définierais le mot de passe des différents sheet.

Le but est de ne pas devoir changer à chaque fois le mdp contenu dans les différentes partie du code, juste le changer dans cette variable.

Mon soucis est que je débute en VBA, et même si je commence à pouvoir tirer mon plan j'ai encore de grosse lacune...

Je suppose qu'il faut déclarer une variable publique, mais ou? (j'ai du code dans des modules, des userform, dans les sheet et dans le thisworkbook).

Je pense que ce sera quelque chose comme :

Public mdp as string
Dim mdp="****"
end sub

pouvez-vous m'aider svp

Merci d'avance

Bonjour,

Je vous renvoie vers l'aide Déclaration de variables (VBA) | Microsoft Learn

Dans votre cas il faut déclarer la variable dans un module, en dehors des subs/fonctions.

Tel que

' éclaration d'une variable utilisable dans tous vos modules de ce classeur
Public MaVariableGlobale As String
' affectaction
MaVariableGlobale = "password123"

Bonjour,
Dans un module standard :

capture d ecran 2024 06 07 145155

Cdlt

Re-bonjour,

merci a vous pour ceci mais je n'arrive pas à l'implémenter dans mon code

Donc dans un module nommé "MDP" j'ai mis ceci :

Option Explicit
Public Const MDP As String = ""

Dans mon code j'ai ceci (les .... représentants le reste du code):

......
Sheets("Rejected deliveries overview").Unprotect ""
......
......
Sheets("Rejected deliveries overview").Protect Password:=""
.......

Si j'éssaye de remplacer le "" par MDP cela ne fonctionne pas, mais je suppose que c'est normal...

Bonjour, vous devez faire une erreur dans votre code, chez moi cela fonctionne :

Public Const MDP As String = "abc"

Sub testLock()
  ThisWorkbook.Worksheets(2).Protect Password:=MDP
End Sub

Sub testUnlock()
  ThisWorkbook.Worksheets(2).Unprotect Password:=MDP
End Sub

Peut etre, ne mettez pas le MDP entre guillemets

J'obtien une erreur "type mismatch"

J'ai changé mon mot de passe vide par "abc" dans le sheet

voici le code dans mon module MDP

Option Explicit
Public Const MDP As String = "abc"

et voici le code d'un bouton :

'Bouton insérer
Private Sub CommandButton13_Click()
    Dim Ligne As Integer
    Dim I As Integer
    Dim ctrls As Variant
    Dim wsModele As Worksheet
    Dim wsOverview As Worksheet
    Dim Wbe As Workbook

    ' Renseigner l'onglet "Rejected deliveries overview"
    If MsgBox("Are you sure you want to INSERT this data?", vbYesNo, "Request for confirmation") = vbYes Then 'condition : si oui au message

' le déverrouiiler
Sheets("Rejected deliveries overview").Unprotect Password:=MDP
        Set Wbe = ThisWorkbook

        ' Permet de se positionner sur la dernière ligne de tableau NON VIDE
        Ligne = Sheets("Rejected deliveries overview").Range("a65536").End(xlUp).Row + 1

        ctrls = Array(Me.TextBox11, _
                Me.TextBox12, _
                Me.ComboBox16, _
                Me.TextBox13, _
                Me.ComboBox13, _
                Me.ComboBox110, _
                Me.TextBox16)

For I = 1 To 7 'mettre ici le nombre de contrôle inclus ci-dessus
             ws2.Cells(Ligne, I) = ctrls(I - 1).Value
             ws2.Cells(Ligne, 8).NumberFormat = "@"
        Next I
    End If

    ' Créer un lien hypertexte sur la Cells(Ligne, 3) avec la valeur de la Textbox12
    Set wsOverview = ThisWorkbook.Sheets("Rejected deliveries overview")
    wsOverview.Hyperlinks.Add Anchor:=wsOverview.Cells(Ligne, 2), Address:="", SubAddress:=TextBox12.Value & "!A1", TextToDisplay:=TextBox12.Value

    ' Créer un nouvel onglet sur la base du modèle
    Set wsModele = ThisWorkbook.Sheets("Template rejected deliv.")
    wsModele.Visible = True
    wsModele.Copy , Worksheets(Worksheets.Count)
    Sheets("Template rejected deliv. (2)").Move after:=Worksheets(4)
    Set ws2 = Worksheets("Template rejected deliv. (2)")
    ws2.Name = TextBox12.Value ' Remplacez "TextBox12" par le nom de votre TextBox
    wsModele.Visible = xlSheetVeryHidden

    ' Trie les données par date la plus récente dans la colonne A
    Sheets("Rejected deliveries overview").Range("A3:G" & Ligne).Sort Key1:=Sheets("Rejected deliveries overview").Range("A3"), Order1:=xlDescending, Header:=xlNo

    ' Le re-vérouiller
        Sheets("Rejected deliveries overview").Protect Password:=MDP

    Sheets("Rejected deliveries overview").Activate
    Unload Me ' Vide et ferme l'Userform ( formulaire)
    'UserForm2.Show
End Sub

C'est parce que vous essayez d'appeler la méthode .Protect ou .Unprotect sur un objet Sheet au lieu de Worksheet.

Meme si ils sont souvent confondus ces deux objets sont un peu différents. Les "sheets" de votre fichier peuvent etre des feuilles de calcul OU BIEN des feuilles de graphique. Les worksheets elles sont uniquement les feuilles de calcul.

Ainsi les deux objets n'ont pas les memes méthodes. En l'occurent un objet sheet n'a pas de Protect/unprotect, d'ou votre erreur de type.

De manière générale, dans votre code remplacez tous vos "Sheet(...)" par des "Worksheet(...)", sauf si vous référencez des feuilles de graphique. Ca vous evitera ce genre de problèmes. Microsoft recommande l'utilisation des worksheets, plus modernes.

Je viens de modifier tous mes sheet par worksheet et de modifier le déverrouillage - vérouillage du fichier mais toujours la même erreur

'Bouton insérer
Private Sub CommandButton13_Click()
    Dim Ligne As Integer
    Dim I As Integer
    Dim ctrls As Variant
    Dim wsModele As Worksheet
    Dim wsOverview As Worksheet
    Dim Wbe As Workbook

    ' Renseigner l'onglet "Rejected deliveries overview"
    If MsgBox("Are you sure you want to INSERT this data?", vbYesNo, "Request for confirmation") = vbYes Then 'condition : si oui au message

' le déverrouiiler
ThisWorkbook.Worksheets("Rejected deliveries overview").Unprotect Password:=MDP
        Set Wbe = ThisWorkbook

        ' Permet de se positionner sur la dernière ligne de tableau NON VIDE
        Ligne = Worksheet("Rejected deliveries overview").Range("a65536").End(xlUp).Row + 1

        ctrls = Array(Me.TextBox11, _
                Me.TextBox12, _
                Me.ComboBox16, _
                Me.TextBox13, _
                Me.ComboBox13, _
                Me.ComboBox110, _
                Me.TextBox16)

For I = 1 To 7 'mettre ici le nombre de contrôle inclus ci-dessus
             ws2.Cells(Ligne, I) = ctrls(I - 1).Value
             ws2.Cells(Ligne, 8).NumberFormat = "@"
        Next I
    End If

    ' Créer un lien hypertexte sur la Cells(Ligne, 3) avec la valeur de la Textbox12
    Set wsOverview = ThisWorkbook.Sheets("Rejected deliveries overview")
    wsOverview.Hyperlinks.Add Anchor:=wsOverview.Cells(Ligne, 2), Address:="", SubAddress:=TextBox12.Value & "!A1", TextToDisplay:=TextBox12.Value

    ' Créer un nouvel onglet sur la base du modèle
    Set wsModele = ThisWorkbook.Sheets("Template rejected deliv.")
    wsModele.Visible = True
    wsModele.Copy , Worksheets(Worksheets.Count)
    Worksheet("Template rejected deliv. (2)").Move after:=Worksheets(4)
    Set ws2 = Worksheets("Template rejected deliv. (2)")
    ws2.Name = TextBox12.Value ' Remplacez "TextBox12" par le nom de votre TextBox
    wsModele.Visible = xlSheetVeryHidden

    ' Trie les données par date la plus récente dans la colonne A
    Worksheet("Rejected deliveries overview").Range("A3:G" & Ligne).Sort Key1:=Worksheet("Rejected deliveries overview").Range("A3"), Order1:=xlDescending, Header:=xlNo

    ' Le re-vérouiller
        ThisWorkbook.Worksheets("Rejected deliveries overview").Protect Password:=MDP

    Worksheet("Rejected deliveries overview").Activate
    Unload Me ' Vide et ferme l'Userform ( formulaire)
    'UserForm2.Show
End Sub

Je n'avais pas vu que l'ensemble de ce code se trouvait dans votre userform, ce peut etre un problème de scope/portée de votre variable MDP. Il faudrait que vous regardiez en mode déboguage la valeur de MDP pour s'en assurer.

Essayez de remplacer Password:=MDP par Password:=MonModule.MDP avec MonModule = le nom du module ou vous définissez MDP.

Si ca ne va pas, essayez de définir le MDP directement dans le module de votre userForm.

De manière plus générale si je devais vous donner un conseil, vous devriez avoir le code exécutif en dehors du module de votre userform, et appeler une fonction depuis l'userform. Quelque chose comme cela :

Private Sub CommandButton13_Click()
      doThings    ' appel d'une macro
End Sub

En spécifiant le nom du module en plus cela à l'ai de fonctionner correctement.

GRAND merci à toi soboh12617 pour ton aide

Rechercher des sujets similaires à "declarer variable mdp entierete fichier"