Macro mot de passe

Bonjour,

Ci dessous une macro pour protéger une ligne si la colonne 5 du tableau est "V" (fichier joint)

Private Sub Worksheet_SelectionChange(ByVal Target As Range)

Dim oList As ListObject

Set oList = Target.ListObject

If Not oList Is Nothing And Target.Count = 1 Then

lig = Target.Row - 4

If oList.Range(lig, 5) = "V" Then

Target.Offset(, -1).Select

End If

End If

Set oList = Nothing

End Sub

Pour approfondir, est il possible qu'il demande un code "1234" par exemple pour modifier la ligne?

Vous comprenez mon idée?

Merci

18personnel.xlsm (14.76 Ko)

Bonjour PIERRO1234, le forum,

Comme déjà souligné dans un de tes précédents posts, il ne s'agit pas d'une protection....tu décales seulement la sélection en colonne C.

Un essai pour répondre à ta demande en conservant ton mode de fonctionnement:

Un clic sur le bouton demande un mot de passe (mdp)

--->si mot de passe correct: on désactive l'évènement de la feuille

--->sinon on quitte la procédure

Un second clic sur le bouton réactive l'évènement.

Cordialement,

Merci,

Je comprends que cela décale la cellule mais ne la protège pas.

Mais comment protéger un tableau et pouvoir:

1/ trier et filtrer les colonne

2/ proteger uniquement les lignes dont la colonne 5 contient"V"

Merci

[quote=xorsankukai post_id=868068 time=1588943080 user_id=30818]

Bonjour PIERRO1234, le forum,

Comme déjà souligné dans un de tes précédents posts, il ne s'agit pas d'une protection....tu décales seulement la sélection en colonne C.

Un essai pour répondre à ta demande en conservant ton mode de fonctionnement:

Un clic sur le bouton demande un mot de passe (mdp)

--->si mot de passe correct: on désactive l'évènement de la feuille

--->sinon on quitte la procédure

Un second clic sur le bouton réactive l'évènement.

Copie de Personnel-2.xlsm

Cordialement,

Bonjour xorsankukai,

Je te remercie, c'est exactement ce principe que je voulais,

Super!!!!

Rebonjour xorsankukai ,

ci-dessous le code pour le verrouiller:

Private Sub CommandButton1_Click()

End Sub

Private Sub ToggleButton1_Click()

Dim MotDePasse As String

If ToggleButton1 = True Then

MotDePasse = InputBox("Saisir le mot de passe ?", "Titre")

If MotDePasse <> "a" Then

ToggleButton1 = False

MsgBox "Mot de passe incorrect": Exit Sub

Else

ToggleButton1.Caption = "Verrouiller"

ToggleButton1.BackColor = vbRed

Application.EnableEvents = False ' => désactive les événements

End If

Else

ToggleButton1.Caption = "Déverrouiller"

ToggleButton1.BackColor = vbGreen

Application.EnableEvents = True

End If

End Sub

Est il possible de verrouiller la feuille en cas de fermeture du fichier (je me place dans le cas ou on a déverrouillé et fermé le fichier sans verrouiller).

Merci

je joins le fichier "MACRO MOT PASSE POUR MODIFIER LIGNE STATUT V2"

Merci

Re,

Un essai.....je ne sais pas si c'est la bonne façon de faire, mais ça semble fonctionner.

Dans le module Thisworbook:

Private Sub Workbook_Open()
  Sheets("Feuil1").OLEObjects("ToggleButton1").Object = False
  Sheets("Feuil1").OLEObjects("ToggleButton1").Object.Caption = "Déverrouiller"
  Sheets("Feuil1").OLEObjects("ToggleButton1").Object.BackColor = vbGreen
   Application.EnableEvents = True
End Sub

A chaque ouverture du classeur, on réactive les évènements et on renomme le bouton "Déverrouiller" avec couleur verte.

EDIT: code simplifié qui semble fonctionner également....

Private Sub Workbook_Open()
  Sheets("Feuil1").ToggleButton1 = False
  Sheets("Feuil1").ToggleButton1.Caption = "Déverrouiller"
  Sheets("Feuil1").ToggleButton1.BackColor = vbGreen
  Application.EnableEvents = True
End Sub

Cordialement,

Super,

Merci!!!!

Re,

Un essai.....je ne sais pas si c'est la bonne façon de faire, mais ça semble fonctionner.

Dans le module Thisworbook:

Private Sub Workbook_Open()
  Sheets("Feuil1").OLEObjects("ToggleButton1").Object = False
  Sheets("Feuil1").OLEObjects("ToggleButton1").Object.Caption = "Déverrouiller"
  Sheets("Feuil1").OLEObjects("ToggleButton1").Object.BackColor = vbGreen
   Application.EnableEvents = True
End Sub

A chaque ouverture du classeur, on réactive les évènements et on renomme le bouton "Déverrouiller" avec couleur verte.

MACRO MOT PASSE POUR MODIFIER LIGNE STATUT V2.xlsm

EDIT: code simplifié qui semble fonctionner également....

Private Sub Workbook_Open()
  Sheets("Feuil1").ToggleButton1 = False
  Sheets("Feuil1").ToggleButton1.Caption = "Déverrouiller"
  Sheets("Feuil1").ToggleButton1.BackColor = vbGreen
  Application.EnableEvents = True
End Sub

Cordialement,

Une question stp: est il possible de le faire en worksheet au lieu de worbook?

Merci

Bonjour PIERRO1234, le forum,

Une question stp: est il possible de le faire en worksheet au lieu de worbook?

A tester:

  • J'ai remplacer le bouton à bascule par un bouton classique
Private Sub CommandButton1_Click()
 If CommandButton1.Caption = "Deverrouiller" Then
      MotDePasse = InputBox("Saisir le mot de passe ?", "Titre")
   If MotDePasse <> "a" Then
      MsgBox "Mot de passe incorrect": Exit Sub
   Else
      CommandButton1.Caption = "Verrouiller"
      CommandButton1.BackColor = vbRed
   End If
 Else
      CommandButton1.Caption = "Deverrouiller"
      CommandButton1.BackColor = vbGreen
 End If
End Sub
  • L'évènement" Worksheet_SelectionChange" n'est actif que si le bouton se nomme "Deverrouiller".
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
    Dim oList As ListObject
    If Sheets("Feuil1").CommandButton1.Caption = "Deverrouiller" Then
     Set oList = Target.ListObject
      If Not oList Is Nothing And Target.Count = 1 Then

        lig = Target.Row - 4
         If oList.Range(lig, 5) = "V" Then
         Target.Offset(, -1).Select
         End If
      End If
     Set oList = Nothing
   End If
End Sub
  • Lorsque tu quittes la feuille "Feuil1", le bouton se nomme "Deverrouiller" (couleur verte), impossible de modifier les lignes contenant V en colonne H.
Private Sub Worksheet_Deactivate()
    Sheets("Feuil1").CommandButton1.Caption = "Deverrouiller"
    Sheets("Feuil1").CommandButton1.BackColor = vbGreen
End Sub
  • Si tu fermes le classeur sans avoir quitter la feuille "Feuil1" et sans avoir "Verrouiller", on "Verrouille" à l'ouverture du classeur:
Private Sub Workbook_Open()
   With Sheets("Feuil1")
      .CommandButton1.Caption = "Deverrouiller"
      .CommandButton1.BackColor = vbGreen
   End With
End Sub

Cordialement,

Bonjour xorsankukai,

Merci pour le temps passé et les détails, très clair.

Une question stp: tu as écrit:

Private Sub Workbook_Open()

With Sheets("Feuil1")

.CommandButton1.Caption = "Deverrouiller"

.CommandButton1.BackColor = vbGreen

End With

End Sub

Je comprends que c'est lié à "l'ouverture du fichier"; est il possible de passer par une macro du style "l'ouverture de la feuille" afin de mettre cette partie de la macro dans la feuille? sinon c'est pas grave!

En tous cas merci bien pour les explications; je ne connais rien aux macros!!!!

Re,

Merci pour ton retour,

est il possible de passer par une macro du style "l'ouverture de la feuille"

Dans mon post précédent , j'utilisais l'évènement "Deactivate " de la feuille (lorsqu'on quitte la feuille), si tu veux l'inverse, donc à l'activation de la feuille:

Private Sub Worksheet_Activate()
    Sheets("Feuil1").CommandButton1.Caption = "Deverrouiller"
    Sheets("Feuil1").CommandButton1.BackColor = vbGreen
End Sub

Le code dans

Private Sub Workbook_Open()

ne sert plus à rien, on peut le supprimer...

Testes le fichier joint....

Cordialement,

Merci,

Private Sub Worksheet_Activate()

Sheets("Feuil1").CommandButton1.Caption = "Deverrouiller"

Sheets("Feuil1").CommandButton1.BackColor = vbGreen

End Sub

Peux tu vérifier stp; la feuille s'ouvre sur "verrouiller" si on l'a ferme avec "verrouiller" !

Re,

Effectivement, si tu "déverrouille" ta feuille puis que tu fermes ton classeur, elle reste donc "déverrouillée".Si tu changes de feuille et que tu reviens dessus, elle est réactivée donc "reverrouillée".

C'est bien pour cette raison que j'utilisais

Private Sub Workbook_Open()

pour forcer le "Verrouillage" à l'ouverture (on peut le faire à la fermeture, si tu préfères).
Private Sub Workbook_BeforeClose(Cancel As Boolean)
  With Sheets("Feuil1")
      .CommandButton1.Caption = "Deverrouiller"
      .CommandButton1.BackColor = vbGreen
   End With
End Sub

Cordialement,

Ok,

Je comprends,

Question pour un novice: que ce soit :

Private Sub Workbook_BeforeClose(Cancel As Boolean) OU Private Sub Workbook_Open(),

Le résultat est le meme? il va verrouiller avant fermeture ou avant ouverture? n'est ce pas?

Re,

Private Sub Workbook_BeforeClose(Cancel As Boolean) 

Exécute la macro à partir du moment où tu demandes la fermeture (fais le test, tu demandes la fermeture puis tu annules, la macro est quand même éxécutée).

Private Sub Workbook_Open()

Exécute la macro uniquement à l'ouverture du fichier.

Donc oui, le résultat est similaire,dans les 2 cas on "Verrouille",

https://www.excel-pratique.com/fr/vba/evenements_classeur

https://www.excel-pratique.com/fr/vba/evenements_feuille

Cordialement,

Grand merci pour la pédagogie!!!!

Re,

Effectivement, si tu "déverrouille" ta feuille puis que tu fermes ton classeur, elle reste donc "déverrouillée".Si tu changes de feuille et que tu reviens dessus, elle est réactivée donc "reverrouillée".

C'est bien pour cette raison que j'utilisais

Private Sub Workbook_Open()

pour forcer le "Verrouillage" à l'ouverture (on peut le faire à la fermeture, si tu préfères).
Private Sub Workbook_BeforeClose(Cancel As Boolean)
  With Sheets("Feuil1")
      .CommandButton1.Caption = "Deverrouiller"
      .CommandButton1.BackColor = vbGreen
   End With
End Sub

MACRO MOT PASSE POUR MODIFIER LIGNE STATUT V4.xlsm

Cordialement,

Bonjour,

Comment faire pour modifier la macro suivante

lig = Target.Row - 4

If oList.Range(lig, 5) = "V" Then

Target.Offset(, -1).Select

End If

End If

Set oList = Nothing

End If

End Sub

Afin que ce soit le tableau qui soit référencé du style List.Object(1) et donc de ne pas obliger de mettre ce tableau à partir de la ligne 4 (lig = Target.Row - 4)

Merci

Bonjour PIERRO1234, le forum,

Je ne maitrise pas trop les Listobjects...mais en fouinant un peu et en essayant d'adapter le code:

Private Sub Worksheet_SelectionChange(ByVal Target As Range)
    Dim oList As ListObject
    If Sheets("Feuil1").CommandButton1.Caption = "Deverrouiller" Then
     Set oList = Target.ListObject
      If Not oList Is Nothing And Target.Count = 1 Then

    With Sheets("Feuil1").ListObjects("Tableau1")
     If .Active And ActiveCell.Row <= .DataBodyRange.Row + .DataBodyRange.Rows.Count - 1 Then _
        lig = ActiveCell.Row - .Range.Row + 1
    End With

        'Lig = Target.Row - 4
         If oList.Range(lig, 5) = "V" Then
         Target.Offset(, -1).Select
         End If
      End If
     Set oList = Nothing
   End If
End Sub

Cela semble fonctionner.... mais pour les explications, faudra voir avec un pro....

Cordialement,

Rebonjour et merci !

Peut on pour le tableau (ListObjects("Tableau1")) interdire :

de rajouter ou supprimer une colonne du tableau

de déplacer une colonne du tableau

de modifier les titres du tableau

Merci

Rechercher des sujets similaires à "macro mot passe"