Détection d'écriture dans cellule

Greeegoryyy -  
ThauTheme Messages postés 1564 Statut Membre -
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. ThauTheme Messages postés 1564 Statut Membre 160
     
    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
    1. Greeegoryyy
       
      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" ?
      0
  2. ccm81 Messages postés 11033 Statut Membre 2 434
     
    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
  3. ThauTheme Messages postés 1564 Statut Membre 160
     
    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
    1. Greeegoryyy
       
      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
      0
  4. ThauTheme Messages postés 1564 Statut Membre 160
     
    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"


    0