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 :

macro pour modifier une cellule déverouillée par mot de passe [XL-2003]


Sujet :

Macros et VBA Excel

  1. #1
    Candidat au Club
    Homme Profil pro
    Inscrit en
    Avril 2012
    Messages
    8
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Avril 2012
    Messages : 8
    Points : 4
    Points
    4
    Par défaut macro pour modifier une cellule déverouillée par mot de passe
    Bonjour à tous !
    Etant depuis peu un jeune padawan sur excel et encore plus en language 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)...
    Fichiers attachés Fichiers attachés

  2. #2
    Expert éminent Avatar de casefayere
    Homme Profil pro
    RETRAITE
    Inscrit en
    Décembre 2006
    Messages
    5 138
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 70
    Localisation : France, Ardennes (Champagne Ardenne)

    Informations professionnelles :
    Activité : RETRAITE
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Décembre 2006
    Messages : 5 138
    Points : 9 548
    Points
    9 548
    Par défaut
    Bonsoir,

    essayes avec ces codes
    dans ta feuille (VBA), copies ces codes
    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
    Private Sub Worksheet_Change(ByVal Target As Range)
    If Target.Value <> contenu 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 Sub
     
    Private Sub Worksheet_SelectionChange(ByVal Target As Range)
    contenu = Target
    End Sub
    dans un module, en tete :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    Option Explicit
    Public Const mdpcel As String = "cdir"
    Bonne soirée

  3. #3
    Expert éminent
    Avatar de fring
    Homme Profil pro
    Engineering
    Inscrit en
    Février 2008
    Messages
    3 900
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : Belgique

    Informations professionnelles :
    Activité : Engineering

    Informations forums :
    Inscription : Février 2008
    Messages : 3 900
    Points : 7 964
    Points
    7 964
    Par défaut
    Bonjour,

    @ Dominique, je pense qu'il manque deux choses :
    1. vérification qu'il s'agit d'une cellule à fond jaune avant de demander le mdp
    2. chargement de la variable "contenu" lors de l'évènement SelectionChange

  4. #4
    Expert éminent Avatar de casefayere
    Homme Profil pro
    RETRAITE
    Inscrit en
    Décembre 2006
    Messages
    5 138
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 70
    Localisation : France, Ardennes (Champagne Ardenne)

    Informations professionnelles :
    Activité : RETRAITE
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Décembre 2006
    Messages : 5 138
    Points : 9 548
    Points
    9 548
    Par défaut
    Bonjour le forum, jayroom, Fred
    vérification qu'il s'agit d'une cellule à fond jaune avant de demander le mdp
    Pour moi le fond jaune n'était qu'un exemple pour stipuler les cellules donc je n'en ai pas tenu compte
    chargement de la variable "contenu" lors de l'évènement SelectionChange
    j'ai omis de recopier le code complet
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    Dim contenu 'en début de module
    Private Sub Worksheet_Change(ByVal Target As Range)
    If Target.Value <> contenu 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 Sub
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Private Sub Worksheet_SelectionChange(ByVal Target As Range)
    contenu = Target
    End Sub
    dans un module, en tete :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    Option Explicit
    Public Const mdpcel As String = "cdir"
    Bonne journée

  5. #5
    Expert éminent
    Avatar de fring
    Homme Profil pro
    Engineering
    Inscrit en
    Février 2008
    Messages
    3 900
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : Belgique

    Informations professionnelles :
    Activité : Engineering

    Informations forums :
    Inscription : Février 2008
    Messages : 3 900
    Points : 7 964
    Points
    7 964
    Par défaut
    Citation Envoyé par casefayere Voir le message
    Pour moi le fond jaune n'était qu'un exemple pour stipuler les cellules donc je n'en ai pas tenu compte
    Et pourtant...
    Citation Envoyé par jayroom Voir le message
    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.
    Seules les cellules sur fond jaune nécessitent un mdp pour être modifiées

  6. #6
    Candidat au Club
    Homme Profil pro
    Inscrit en
    Avril 2012
    Messages
    8
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Avril 2012
    Messages : 8
    Points : 4
    Points
    4
    Par défaut
    Bonsoir casefayere, fring, le forum,
    merci pour vos réponses et le fait que vous vous soyez penché sur mon problème !
    casefayere, ton code fonctionne à merveille si je place le premier dans la feuille et le second en module !!! Un grand merci !
    Par contre, du coup, les cellules qui étaient en fond vert pâle ne sont maintenant plus modifiables sans MdP : il semble que toutes les cellules qui ne sont pas verrouillées nécessitent maintenant un MdP pour être modifiées.
    Il est effectivement vrai que la couleur (repère pour les utilisateurs) est importante...
    Avez-vous une solution pour que seules les cellules en jaune pâle nécessitent un MdP pour être modifiées ? (Ps : j'ai également des cellules en jaune foncé pouvant être modifié sans MdP - je me permet de le préciser si une validation doit être fait vs la couleur de la cellule...).
    Idéalement également, il faudrait que ce MdP soit demandé même si l'utilisateur cherche à modifier deux cellules en jaune pâle (à chaque modification de cellule en jaune pâle en fait): le but étant de sensibiliser l'utilisateur sur le fait qu'il cherche à modifier des cellules qui représentent des données "rarement" à modifier....

    J'espère ne pas demander la lune en terme de faisabilité ?...

    En tout cas, encore un grand merci à vous deux pour vos réponses et "aiguillages" !

  7. #7
    Expert éminent Avatar de casefayere
    Homme Profil pro
    RETRAITE
    Inscrit en
    Décembre 2006
    Messages
    5 138
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 70
    Localisation : France, Ardennes (Champagne Ardenne)

    Informations professionnelles :
    Activité : RETRAITE
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Décembre 2006
    Messages : 5 138
    Points : 9 548
    Points
    9 548
    Par défaut
    Bonsoir,
    Je constate que la remarque de fred parait judicieuse, sur mon PC, ton jaune donne la couleur N° 36, à toi d'adapter
    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
    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 And Target.Interior.ColorIndex = 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 Sub
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Private Sub Worksheet_SelectionChange(ByVal Target As Range)
    contenu = Target
    End Sub

  8. #8
    Candidat au Club
    Homme Profil pro
    Inscrit en
    Avril 2012
    Messages
    8
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Avril 2012
    Messages : 8
    Points : 4
    Points
    4
    Par défaut
    Bonjour casefayere, fring, le forum,

    Casefayere, ton code marche à merveille et effectyivement, seules les cellules en jaune pâle nécessitent maintenant un MdP pour être modifiées !!!

    J'ai juste encore un point que je souhaiterais pouvoir modifier (oui, oui, je saisi : je suis chiant) :
    lorsque je remets à blanc une cellules verte pâle, un code d'erreur s'affiche à savoir :
    Erreur d'execution "13":
    Incompatibilité de type
    Ce même code d'erreur apparaît à chaque changement dans une cellule contenant une mise en forme conditionnelle)...

    Y a-t-il une solution pour palier à ceci ?
    Ou bien peut-on peut-être faire un contrôle non pas sur la couleur mais sur la référence des cellules (type AO16, BN44...) ?

    Un grand merci d'avance à vous tous !

  9. #9
    Expert éminent Avatar de casefayere
    Homme Profil pro
    RETRAITE
    Inscrit en
    Décembre 2006
    Messages
    5 138
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 70
    Localisation : France, Ardennes (Champagne Ardenne)

    Informations professionnelles :
    Activité : RETRAITE
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Décembre 2006
    Messages : 5 138
    Points : 9 548
    Points
    9 548
    Par défaut
    Bonjour le forum, jayroom,
    Dans ton fichier, il n'y avait pas de MFC, alors comment vérifier....
    Ou bien peut-on peut-être faire un contrôle non pas sur la couleur mais sur la référence des cellules (type AO16, BN44...) ?
    Oui tu peux si tu es sur que les cellules seront toujours celles-ci, en vérifiant l'adreese, par exemple :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    If Target.Address = "$AO$16" or ....... Then
    Bonne journée

  10. #10
    Candidat au Club
    Homme Profil pro
    Inscrit en
    Avril 2012
    Messages
    8
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Avril 2012
    Messages : 8
    Points : 4
    Points
    4
    Par défaut
    Re-bonjour Casefayere,

    effectivement (et désolé), je n'avais pas fait référence aux cellules avec une MFC ! Les cellules en question seront effectivement toujours les mêmes.
    Merci pour ta modification !
    Par contre, je pense que je dois recopier cette modif au mauvais endroit car le même message d'erreur apparait.
    Voilà l'endroit où j'ai ajouté ta modif :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    Private Sub Worksheet_Change(ByVal Target As Range)
    If Target.Value <> contenu And Target.Address = "$AO$16" Or "$O$36" Then
    La ligne en rouge est celle qui ressort en erreur...
    Ai-je introduit ta modif au mauvais endroit ?

    Ps : peux-tu me dire comment tu fais pouur copier le code macro dans un fond bleu (plus lisible que ce que je viens de faire) sur le forum ?

    Encore un grand merci à toi !

  11. #11
    Expert éminent Avatar de casefayere
    Homme Profil pro
    RETRAITE
    Inscrit en
    Décembre 2006
    Messages
    5 138
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 70
    Localisation : France, Ardennes (Champagne Ardenne)

    Informations professionnelles :
    Activité : RETRAITE
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Décembre 2006
    Messages : 5 138
    Points : 9 548
    Points
    9 548
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    If Target.Value <> contenu Then
       If Target.Address = "$AO$16" Or Target.Address = "$O$36" Then
       '........................
       End If
    End If

  12. #12
    Candidat au Club
    Homme Profil pro
    Inscrit en
    Avril 2012
    Messages
    8
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Avril 2012
    Messages : 8
    Points : 4
    Points
    4
    Par défaut
    Super !!!!
    Un grand merci Caserfayere !
    Le code fonctionne à merveille !
    Merci donc pour ton aide et ton accompagnement !
    Je passe donc de post en "résolu".
    Bonne journée à tous et sûrement à bientôt

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

Discussions similaires

  1. [OL-2010] Macro pour modifier une message avant de le transferer
    Par copainx dans le forum VBA Outlook
    Réponses: 2
    Dernier message: 04/10/2011, 14h56
  2. Demander un mot de passe pour modifier une cellule excel
    Par statista dans le forum Macros et VBA Excel
    Réponses: 3
    Dernier message: 16/09/2011, 09h25
  3. [XL-2003] macro pour remplir une cellule en fonction d'une autre
    Par kamilane dans le forum Macros et VBA Excel
    Réponses: 0
    Dernier message: 27/07/2010, 15h40
  4. [XL-2003] Macro pour copier une cellule d'un classeur à un autre sous condition
    Par mairiemeudon dans le forum Macros et VBA Excel
    Réponses: 25
    Dernier message: 14/06/2010, 15h28
  5. Macro qui modifie une cellule (non-voulu)
    Par spirit1300 dans le forum Macros et VBA Excel
    Réponses: 3
    Dernier message: 11/12/2007, 17h37

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