Détection d'écriture dans cellule
Greeegoryyy
-
ThauTheme Messages postés 1564 Statut Membre -
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
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
-
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...
-
Très bien.
Du coup admettons, en partant de ma situation :
J'ai ces codes :
Dans le ChangeIf Not Application.Intersect(Target, Range("A:U")) Is Nothing And Autorisation1 = False Then
MdPDemande.Show
If Autorisation1 = False Then Exit Sub
End If
UserformPrivate 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" ?
-
-
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 -
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 -
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"