Détection d'écriture dans cellule

Bonjour,

Y'a t-il un moyen de savoir/détecter quand un utilisateur commence à écrire dans une cellule, pour lancer une MsgBox, comme le réalise les mots de passe sur les plages de cellules où la demande de mot de passe apparaît dès que (par exemple) l'on appuie sur la lettre "D" ?

Cordialement

4 réponses

  1. Re,

    je comprends pas ton problème. Tu peux mettre le mot de passe de protection de l'onglet dans le code en dur en activant la protection. Ainsi il ne te le demande pas :
    ActiveSheet.Protect "Ton_Mot_de_passe"

    Idem pour la déprotection :
    ActiveSheet.Unprotect "Ton_Mot_de_passe"


    1. Re,

      Pourquoi faire une usine à gaz alors que protéger l'onglet par mot de passe plus + verrouiller les cellules le fait très bien ?

      Mais bon... Le code dans trois composants différents :
      • Dans un module standard quelconque (Module1 par exemple), les premières lignes avant tout autre code, les déclarations des variables publiques :
      Public V As Variant
      Public AD As Range
      Public Autorisation1 As Boolean


      • dans le composant de l'onglet concerné :
      Private Sub Worksheet_SelectionChange(ByVal Target As Range)
      V = Target.Value
      Set AD = Target
      If Not Application.Intersect(Target, Range("A:U")) Is Nothing Then MdPDemande.Show
      End Sub
      
      Private Sub Worksheet_Change(ByVal Target As Range)
      If Autorisation1 = False Then AD.Value = V
      End Sub


      Dans l'userform MdPDemande :
      Private Sub TextBox1_Change()
      TextBox1.PasswordChar = "*"
      If TextBox1.Value = "Demandeur" Then
          Autorisation1 = True
          Unload Me
      End If
      End Sub
      
      Private Sub UserForm_QueryClose(Cancel As Integer, CloseMode As Integer)
      If Autorisation1 = False Then Cancel = True
      End Sub


      À tester... Maintenant, si je suis utilisateur de ton fichier et que je dois taper le mot de passe chaque fois que je dois modifier une des cellules des colonnes A à U, je te garantis que je pète un câble !...

      À plus,
      ThauTheme
      1. Je n'utilise pas les mots de passe de feuille et de cellules car ils bloquaient mes macros, et lorsque je désactivais le mot de passe puis le réactivais après la procédure, cela faisait qu'il me demandait le mot de passe à chaque cellule.
        Mais je vais essayer ta méthode et celle de ccm81.
        Merci
    2. Bonjour

      Il te faut mettre le contenu de la cellule cliquée dans une variable globale à la selection de la cellule visée
      Quelque chose de ce genre

      Dim v     ' variable globale, tu peux en preciser le type
      
      Dim Autorisation1 As Boolean  ' vairable affectée quelque part dans tes procedures
      
      Private Sub Worksheet_Change(ByVal Target As Range)
      If Not Intersect(Target, Range("A:U")) Is Nothing Then
        v = Target.Value
      End Sub
      
      Private Sub Worksheet_SelectionChange(ByVal Target As Range)
      If Not Intersect(Target, Range("A:U")) Is Nothing And Autorisation1 = False Then
          MdPDemande.Show
          If Autorisation1 = False Then Target.Value = "": Exit Sub
      End If
      End Sub


      RQ. Si tu ne veux que nettoyer la cellule ceci suffira (sans procédure Change)
          If Autorisation1 = False Then Target.Value = v: Exit Sub

      Cdlmnt
      1. Bonjour,

        Détecter non, mais effacer ou rétablir après le changement oui... Car la procédure Change ne s'exécute qu'après la validation. Tu peux éventuellement, émettre un message quand la cellule est sélectionnée via la procédure SelectionChange mais ce dernier apparaîtra même si elle n'est pas éditée...
        1. Très bien.

          Du coup admettons, en partant de ma situation :

          J'ai ces codes :
          Dans le Change
          If Not Application.Intersect(Target, Range("A:U")) Is Nothing And Autorisation1 = False Then
          MdPDemande.Show
          If Autorisation1 = False Then Exit Sub
          End If

          Userform
          Private Sub TextBox1_Change()

          ' Pour autorisation de sélection de la plage de cellule Demandeur

          TextBox1.PasswordChar = "*"
          If TextBox1.Value = "Demandeur" Then
          Autorisation1 = True
          Unload Me
          Else
          Autorisation1 = False
          End If
          End Sub

          La UserForm est une fenêtre qui demande un mot de passe.
          Ce qu'il ce passe, c'est que dès que j'aurais modifier une cellule, il va me demander un mot de passe. Or, si l'utilisateur ne rentre pas le mot de passe (quitte la userform), le contenu de la cellule reste alors que si l'utilisateur n'a pas le mot de passe, il n'est pas censé la changer.
          Comment faire pour que, si l'utilisateur quitte la userform sans renseigner de mot de passe, la cellule soit "vidée" ?