macro pour modifier une cellule déverouillée par mot de passe

jayroom

XLDnaute Nouveau
Bonjour à tous !
Etant depuis peu un jeune padawan sur excel et encore plus en langage vba, je me permets de faire appel à vos connaissances pour la première fois.
Je vais donc essayer de vous expliquer ce que je cherche à faire de la façon la plus précise possible :

J'ai un classeur excel composé de plusieurs feuille.
Les cellules de la feuille 1 sont toutes "verrouillées" et "masquées" (format, cellule, protection) à l'exception de certaines cellules qui ne sont pas "verrouillées".
La feuille 1 est protégé par un mot de passe ("test") et je n'autorise pas les utilisateurs à "sélectionner les cellules verrouillées" (car il faut qu'il puisse naviguer de cellule déverrouillée en cellule déverrouillée avec le curseur mais également avec la touche "tab").
Pour info, mon classeur excel est également protégé par mot de passe ("test").

Certaines cellules déverrouillées de ma feuille 1 sont sur fond vert clair : les utilisateurs doivent pouvoir les modifier sans mot de passe.
D'autres sont sur fond jaune pâle : ces cellules sont pré-remplies (par du texte ou des formules) et doivent pouvoir être modifiables uniquement par les utilisateurs connaissant le mot de passe.
Ce mot de passe doit être différent de celui utilisé pour protéger la feuille ou le classeur : en exemple, prenons "cdir".
Après que l'utilisateur est entré la nouvelle donnée dans la cellule, Une InputBox devra apparaître et demander :"Cette cellule a été protégé par l'administrateur. Si vous souhaitez modifier cette cellule, veuillez saisir le mot de passe :".
Si le mot de passe saisi est correct, la nouvelle donnée saisie par l'utilisateur est validée.
Si le mot de passe saisi est faux, la donnée (ou formule) pré-remplie n'est pas modifiée.

J'espère avoir été assez clair dans la description de ce que je cherche à faire ?...

Etant réellement tout "neuf" dans les macros, je serais intéressé si l'un d'entre vous arrive à m'expliquer "pas-à-pas" la création de cette macro.

Merci d'avance à tous ceux qui prendront le temps de regarder ce post et à votre disposition si vous avez besoin de plus de renseignements !

Ps : je mets en pièce jointe un fichier excel de test (si cela peut servir)...
 

Pièces jointes

  • Classeur1.xls
    13.5 KB · Affichages: 43
  • Classeur1.xls
    13.5 KB · Affichages: 45
  • Classeur1.xls
    13.5 KB · Affichages: 44

tototiti2008

XLDnaute Barbatruc
Re : macro pour modifier une cellule déverouillée par mot de passe

Bonjour jayroom,

bienvenue sur XLD,

Sans VBA tu peux déjà obtenir ça :

voir du côté de Outils - Protection - Permettre aux utilisateurs de modifier les plages
 

Pièces jointes

  • Classeur1-2.xls
    16.5 KB · Affichages: 54
  • Classeur1-2.xls
    16.5 KB · Affichages: 68
  • Classeur1-2.xls
    16.5 KB · Affichages: 63

jayroom

XLDnaute Nouveau
Re : macro pour modifier une cellule déverouillée par mot de passe

Bonjour tototiti2008, merci pour ta réponse et ton intérêt.
Ta solution fonctionne bien.
Par contre, quand je protège la feuille, je suis obligé de décocher :"sélectionner les cellules verrouillées" car les utilisateurs ne doivent pas pouvoir y accéder ni cliquer dessus.
Quand je décoche donc cette option, la solution ne fonctionne plus...
As-tu une autre astuce ?
Merci d'avance
 

tototiti2008

XLDnaute Barbatruc
Re : macro pour modifier une cellule déverouillée par mot de passe

Re,

Non, pas d'autre solution si tu veux que les cellules verrouillées ne soient pas sélectionnables, c'était au cas où tu voulais éviter de reprogrammer une sécurité complète et utiliser ce qui existe
 

jayroom

XLDnaute Nouveau
Re : macro pour modifier une cellule déverouillée par mot de passe

Bonsoir le forum.
Un grand merci à Tititoto2008 pour l'intérêt que tu as porté à mon problème ainsi que pour la solution que tu m'as apporté !
Merci également à tous ceux qui m'ont accordés un peu de le temps !

Pour la résolution de mon problème, j'ai trouvé deux solutions que je me permets de joindre à ce post (si jamais certaines personnes peuvent être intéressées) :

1re solution :

Coller ces 2 premiers codes dans la feuille concerné :
Code:
Option Explicit
 
Dim contenu, x As Integer, mess 'en début de module
Private Sub Worksheet_Change(ByVal Target As Range)
If Target.Value <> contenu Then
   If Target.Address = "$AO$16" Or Target.Address = "$O$36" Then
    For x = 1 To 3
        mess = InputBox("Saisir  le mot de passe")
        If mess <> mdpcel Then
            MsgBox "le mot de passe est incorrect, recommencez " & Chr(10) & "      " & x & " essai sur 3"
        Else
            Exit For
        End If
    Next x
    If mess <> mdpcel Then Target = contenu
End If
End If
End Sub
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
contenu = Target
End Sub

Coller ce code dans un module :
Code:
Option Explicit
Public Const mdpcel As String = "cdir"

2me solution :

Coller ces deux codes dans la feuille correspondante :
Code:
'variables servant à retenir le contenu de la cellule précédente
Public colonneprec As Double
Public ligneprec As Double
Public valeurprec As String
Code:
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
    'Initialisation des variables si besoin
    If ligneprec = 0 Then
        ligneprec = 1
        colonneprec = 1
    End If

    'Si la cellule est modifiée
    If valeurprec <> Cells(ligneprec, colonneprec) Then
        'Si la cellule modifiée fait partie des cellules nécessitant le MDP
        If (ligneprec = 16 And colonneprec = 41) Or _
            (ligneprec = 36 And colonneprec = 15) Or _
            (ligneprec = 39 And colonneprec = 66) Or _
            (ligneprec = 40 And colonneprec = 66) Or _
            (ligneprec = 56 And colonneprec = 24) Or _
            (ligneprec = 122 And colonneprec = 51) Or _
            (ligneprec = 156 And colonneprec = 30) Or _
            (ligneprec = 200 And colonneprec = 17) Or _
            (ligneprec = 201 And colonneprec = 17) Or _
            (ligneprec = 202 And colonneprec = 17) Or _
            (ligneprec = 203 And colonneprec = 17) Or _
            (ligneprec = 204 And colonneprec = 17) Or _
            (ligneprec = 205 And colonneprec = 17) Or _
            (ligneprec = 206 And colonneprec = 17) Or _
            (ligneprec = 207 And colonneprec = 17) Or _
            (ligneprec = 208 And colonneprec = 17) Or _
            (ligneprec = 215 And colonneprec = 23) Or _
            (ligneprec = 274 And colonneprec = 35) Then
            'Message demandant le mot de passe et le vérifiant dans la foulée
            If InputBox("Pour valider la modification de cette cellule, veuillez entrer le mot de passe :") <> "cdir" Then
                'On replace la valeur initiale hinhin
                Cells(ligneprec, colonneprec) = valeurprec
                MsgBox "valeur initiale replacée."
            End If
        End If
    End If
    
    'On enregistre le contenu de la cellule actuelle dans les variables
    colonneprec = Target.Column
    ligneprec = Target.Row
    valeurprec = Cells(ligneprec, colonneprec).Text
    
End Sub

Petit bonus pour la deuxième solution : une macro permettant d'afficher les coordonnées de la cellule sélectionnée :
Code:
Sub Coordonnées_Finder()
    MsgBox "ligne : " & Selection.Row & Chr(10) & "colonne : " & Selection.Column
End Sub


Encore une fois merci à tous !!!
 
Dernière édition:

tototiti2008

XLDnaute Barbatruc
Re : macro pour modifier une cellule déverouillée par mot de passe

Bonjour jayroom,

Merci d'être revenu avec ta solution :)
Attention juste aux histoires de copier/coller ou de suppression du contenu de plusieurs cellules d'un coup (sélection puis touche Suppr) qui risquent de faire planter ta macro (penser à gérer le cas où Target contient plusieurs cellules, Target.count >1)
 

jayroom

XLDnaute Nouveau
Re : macro pour modifier une cellule déverouillée par mot de passe

Bonjour Tototiti2008 :
effectivement, je n'avais pas envisagé ces solutions !
Je vais tester et regarder comment ça se passe...essayer d'adapter le cas échéant...
Merci pour ta mise en garde !
A très bientôt je pense
 

Discussions similaires

Réponses
2
Affichages
153
Réponses
5
Affichages
392
Compte Supprimé 979
C
Réponses
6
Affichages
195
Réponses
8
Affichages
146

Statistiques des forums

Discussions
312 145
Messages
2 085 762
Membres
102 966
dernier inscrit
InitialPP