Détection d'écriture dans cellule

Fermé
Greeegoryyy - 23 mai 2017 à 12:44
ThauTheme Messages postés 1442 Date d'inscription mardi 21 octobre 2014 Statut Membre Dernière intervention 29 juillet 2022 - 23 mai 2017 à 15:12
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
A voir également:

4 réponses

ThauTheme Messages postés 1442 Date d'inscription mardi 21 octobre 2014 Statut Membre Dernière intervention 29 juillet 2022 160
23 mai 2017 à 13:50
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
Greeegoryyy
23 mai 2017 à 13:57
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
ccm81 Messages postés 10903 Date d'inscription lundi 18 octobre 2010 Statut Membre Dernière intervention 19 novembre 2024 2 427
Modifié le 23 mai 2017 à 14:36
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
ThauTheme Messages postés 1442 Date d'inscription mardi 21 octobre 2014 Statut Membre Dernière intervention 29 juillet 2022 160
Modifié le 23 mai 2017 à 14:41
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
Greeegoryyy
23 mai 2017 à 14:45
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
ThauTheme Messages postés 1442 Date d'inscription mardi 21 octobre 2014 Statut Membre Dernière intervention 29 juillet 2022 160
23 mai 2017 à 15:12
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