Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

vba - ne pas pourvoir effacer de saisie

9 réponses
Avatar
j-pascal
Bonsoir,

Est-il possible que dès lors qu'une cellule est saisie (parmis d'autres
cellules d'une même ligne) qu'il soit impossible de supprimer les
valeurs de la ligne ?

Je suis en train de faire un registre de courrier "départ / arrivée"
partagé et je ne souhaite pas qu'un utilisateur puisse effacer ou
corriger les données saisies par autrui ...

Merci pour votre aide,

JP

PS : je précise que le classeur ouvert accepte forcément les macros
(sinon les feuilles de saisies sont veryhidden...)

9 réponses

Avatar
Fredo P.
Oui c'est possible
1)sélectionner les cellules à saisir>clic droit>format de
cellule>protection>décocher "verrouillée"> menu Outils>Protection>Protéger
la feuille>OK.
2)Dans le code la feuille
Private Sub Worksheet_Change(ByVal Target As Range)
ActiveSheet.Unprotect
If Target <> "" Then
Target.Locked = True
End If
ActiveSheet.Protect
End Sub


"j-pascal" a écrit dans le message de
news:
Bonsoir,

Est-il possible que dès lors qu'une cellule est saisie (parmis d'autres
cellules d'une même ligne) qu'il soit impossible de supprimer les
valeurs de la ligne ?

Je suis en train de faire un registre de courrier "départ / arrivée"
partagé et je ne souhaite pas qu'un utilisateur puisse effacer ou
corriger les données saisies par autrui ...

Merci pour votre aide,

JP

PS : je précise que le classeur ouvert accepte forcément les macros
(sinon les feuilles de saisies sont veryhidden...)




Avatar
Fredo P.
Private Sub Worksheet_Change(ByVal Target As Range)
Dim Lg#
ActiveSheet.Unprotect
Lg = Target.Row
If IsDate(Range("H" & Lg)) Then
Range(Lg & ":" & Lg).Locked = True
Range("U" & Lg & "," & "V" & Lg & "," & "W" & Lg).Locked = False
End If
ActiveSheet.Protect
End Sub

"milloche" a écrit dans le message de
news:
Bonjour Fredo,
J'aurais, moi, besoin de sa petite soeur à ta macro.
Avec cette condition à la place de Target :
Si la cellule H de la ligne de Target est une date, alors verrouiller toute
la ligne et protèger la feuille.
Pour "est une date", je n'ai trouvé pour l'instant que >36000.
Merci
"Fredo P." <ponsinet.frederic363orange.fr> a écrit dans le message de news:
%
Oui c'est possible
1)sélectionner les cellules à saisir>clic droit>format de
cellule>protection>décocher "verrouillée"> menu Outils>Protection>Protéger
la feuille>OK.
2)Dans le code la feuille
Private Sub Worksheet_Change(ByVal Target As Range)
ActiveSheet.Unprotect
If Target <> "" Then
Target.Locked = True
End If
ActiveSheet.Protect
End Sub


"j-pascal" a écrit dans le message de
news:
Bonsoir,

Est-il possible que dès lors qu'une cellule est saisie (parmis d'autres
cellules d'une même ligne) qu'il soit impossible de supprimer les
valeurs de la ligne ?

Je suis en train de faire un registre de courrier "départ / arrivée"
partagé et je ne souhaite pas qu'un utilisateur puisse effacer ou
corriger les données saisies par autrui ...

Merci pour votre aide,

JP

PS : je précise que le classeur ouvert accepte forcément les macros
(sinon les feuilles de saisies sont veryhidden...)




Avatar
Fredo P.
Range("U" & Lg & "," & "V" & Lg & "," & "W" & Lg).Locked = False
peut être remplacée par
Range("U" & Lg & ":" & "W" & Lg).Locked = False


"milloche" a écrit dans le message de
news:
Bonjour Fredo,
J'aurais, moi, besoin de sa petite soeur à ta macro.
Avec cette condition à la place de Target :
Si la cellule H de la ligne de Target est une date, alors verrouiller toute
la ligne et protèger la feuille.
Pour "est une date", je n'ai trouvé pour l'instant que >36000.
Merci
"Fredo P." <ponsinet.frederic363orange.fr> a écrit dans le message de news:
%
Oui c'est possible
1)sélectionner les cellules à saisir>clic droit>format de
cellule>protection>décocher "verrouillée"> menu Outils>Protection>Protéger
la feuille>OK.
2)Dans le code la feuille
Private Sub Worksheet_Change(ByVal Target As Range)
ActiveSheet.Unprotect
If Target <> "" Then
Target.Locked = True
End If
ActiveSheet.Protect
End Sub


"j-pascal" a écrit dans le message de
news:
Bonsoir,

Est-il possible que dès lors qu'une cellule est saisie (parmis d'autres
cellules d'une même ligne) qu'il soit impossible de supprimer les
valeurs de la ligne ?

Je suis en train de faire un registre de courrier "départ / arrivée"
partagé et je ne souhaite pas qu'un utilisateur puisse effacer ou
corriger les données saisies par autrui ...

Merci pour votre aide,

JP

PS : je précise que le classeur ouvert accepte forcément les macros
(sinon les feuilles de saisies sont veryhidden...)




Avatar
Fredo P.
Si si , il suffit d'essayer de la démarrer à partir de l'éditeur vba en
cliquant un fois sur "Exécuter Sub/Userform" puis de modifier la cellule
adéquat.
"milloche" a écrit dans le message de
news:
OK
Merci
Petite question : pas possible de faire du pas à pas (F8) avec ce genre de
macro évènementielle ?
"Fredo P." <ponsinet.frederic363orange.fr> a écrit dans le message de news:
etq09$
Range("U" & Lg & "," & "V" & Lg & "," & "W" & Lg).Locked = False
peut être remplacée par
Range("U" & Lg & ":" & "W" & Lg).Locked = False


"milloche" a écrit dans le message de
news:
Bonjour Fredo,
J'aurais, moi, besoin de sa petite soeur à ta macro.
Avec cette condition à la place de Target :
Si la cellule H de la ligne de Target est une date, alors verrouiller toute
la ligne et protèger la feuille.
Pour "est une date", je n'ai trouvé pour l'instant que >36000.
Merci
"Fredo P." <ponsinet.frederic363orange.fr> a écrit dans le message de news:
%
Oui c'est possible
1)sélectionner les cellules à saisir>clic droit>format de
cellule>protection>décocher "verrouillée"> menu Outils>Protection>Protéger
la feuille>OK.
2)Dans le code la feuille
Private Sub Worksheet_Change(ByVal Target As Range)
ActiveSheet.Unprotect
If Target <> "" Then
Target.Locked = True
End If
ActiveSheet.Protect
End Sub


"j-pascal" a écrit dans le message de
news:
Bonsoir,

Est-il possible que dès lors qu'une cellule est saisie (parmis d'autres
cellules d'une même ligne) qu'il soit impossible de supprimer les
valeurs de la ligne ?

Je suis en train de faire un registre de courrier "départ / arrivée"
partagé et je ne souhaite pas qu'un utilisateur puisse effacer ou
corriger les données saisies par autrui ...

Merci pour votre aide,

JP

PS : je précise que le classeur ouvert accepte forcément les macros
(sinon les feuilles de saisies sont veryhidden...)




Avatar
Fredo P.
Juste un pti conseil sur OE, change ton format en texte brut cela prendra
moin de place sur ton PC.
Avatar
j-pascal
Bonsoir,

Merci pour ta réponse.
Je voudrais ajouter le petit bout de code qui suit pour permettre la
suppression de la saisie. Je ne sais pas comment l'intégre à ton code
pour ne pas avoir à le lancer séparément !
(Par ailleurs, si le mot de passe est erroné avec des nombres ça
fonctionne, mais si on met des lettres ça bugue !)

@+ ?

'---- (ton code)
Private Sub Worksheet_Change(ByVal Target As Range)
ActiveSheet.Unprotect
If Target <> "" Then
Target.Locked = True
End If
ActiveSheet.Protect
End Sub
'----

Sub Suppr()
Dim MdP As Variant

MdP = InputBox("Entrez le MdP pour supprimer cette saisie") +
vbExclamation

If MdP <> 0 Then
MsgBox "MdP erroné !"
Exit Sub
Else
ActiveSheet.Unprotect

With ActiveCell
.ClearContents
.Locked = False
End With
End If
End Sub
'----


Oui c'est possible
1)sélectionner les cellules à saisir>clic droit>format de
cellule>protection>décocher "verrouillée"> menu Outils>Protection>Protéger
la feuille>OK.
2)Dans le code la feuille
Private Sub Worksheet_Change(ByVal Target As Range)
ActiveSheet.Unprotect
If Target <> "" Then
Target.Locked = True
End If
ActiveSheet.Protect
End Sub


"j-pascal" a écrit dans le message de
news:
Bonsoir,

Est-il possible que dès lors qu'une cellule est saisie (parmis d'autres
cellules d'une même ligne) qu'il soit impossible de supprimer les
valeurs de la ligne ?

Je suis en train de faire un registre de courrier "départ / arrivée"
partagé et je ne souhaite pas qu'un utilisateur puisse effacer ou
corriger les données saisies par autrui ...

Merci pour votre aide,

JP

PS : je précise que le classeur ouvert accepte forcément les macros
(sinon les feuilles de saisies sont veryhidden...)




Avatar
Fredo P.
"j-pascal" a écrit dans le message de
news:
Bonsoir,

Merci pour ta réponse.
Je voudrais ajouter le petit bout de code qui suit pour permettre la
suppression de la saisie. Je ne sais pas comment l'intégre à ton code
pour ne pas avoir à le lancer séparément !
(Par ailleurs, si le mot de passe est erroné avec des nombres ça
fonctionne, mais si on met des lettres ça bugue !)

@+ ?

'---- (ton code)
Private Sub Worksheet_Change(ByVal Target As Range)


if "Mot de passe"=inputbox("Entrer le mot de passe") Then
ActiveSheet.Unprotect
If Target <> "" Then
Target.Locked = True
End If
ActiveSheet.Protect


else
msgbox" Mot de passe incorrect"
End Sub
'----

Sub Suppr()
Dim MdP As Variant

MdP = InputBox("Entrez le MdP pour supprimer cette saisie") +
vbExclamation

If MdP <> 0 Then
MsgBox "MdP erroné !"
Exit Sub
Else
ActiveSheet.Unprotect

With ActiveCell
.ClearContents
.Locked = False
End With
End If
End Sub
'----


> Oui c'est possible
> 1)sélectionner les cellules à saisir>clic droit>format de
> cellule>protection>décocher "verrouillée"> menu


Outils>Protection>Protéger
> la feuille>OK.
> 2)Dans le code la feuille
> Private Sub Worksheet_Change(ByVal Target As Range)
> ActiveSheet.Unprotect
> If Target <> "" Then
> Target.Locked = True
> End If
> ActiveSheet.Protect
> End Sub
>
>
> "j-pascal" a écrit dans le message de
> news:
>> Bonsoir,
>>
>> Est-il possible que dès lors qu'une cellule est saisie (parmis d'autres
>> cellules d'une même ligne) qu'il soit impossible de supprimer les
>> valeurs de la ligne ?
>>
>> Je suis en train de faire un registre de courrier "départ / arrivée"
>> partagé et je ne souhaite pas qu'un utilisateur puisse effacer ou
>> corriger les données saisies par autrui ...
>>
>> Merci pour votre aide,
>>
>> JP
>>
>> PS : je précise que le classeur ouvert accepte forcément les macros
>> (sinon les feuilles de saisies sont veryhidden...)




Avatar
Fredo P.
AAch! j'ai pas pu le rattraper en vol, parti trop vite
il manque un End If juste avant End Sub

"j-pascal" a écrit dans le message de
news:
Bonsoir,

Merci pour ta réponse.
Je voudrais ajouter le petit bout de code qui suit pour permettre la
suppression de la saisie. Je ne sais pas comment l'intégre à ton code
pour ne pas avoir à le lancer séparément !
(Par ailleurs, si le mot de passe est erroné avec des nombres ça
fonctionne, mais si on met des lettres ça bugue !)

@+ ?

'---- (ton code)
Private Sub Worksheet_Change(ByVal Target As Range)
ActiveSheet.Unprotect
If Target <> "" Then
Target.Locked = True
End If
ActiveSheet.Protect
End Sub
'----

Sub Suppr()
Dim MdP As Variant

MdP = InputBox("Entrez le MdP pour supprimer cette saisie") +
vbExclamation

If MdP <> 0 Then
MsgBox "MdP erroné !"
Exit Sub
Else
ActiveSheet.Unprotect

With ActiveCell
.ClearContents
.Locked = False
End With
End If
End Sub
'----


> Oui c'est possible
> 1)sélectionner les cellules à saisir>clic droit>format de
> cellule>protection>décocher "verrouillée"> menu


Outils>Protection>Protéger
> la feuille>OK.
> 2)Dans le code la feuille
> Private Sub Worksheet_Change(ByVal Target As Range)
> ActiveSheet.Unprotect
> If Target <> "" Then
> Target.Locked = True
> End If
> ActiveSheet.Protect
> End Sub
>
>
> "j-pascal" a écrit dans le message de
> news:
>> Bonsoir,
>>
>> Est-il possible que dès lors qu'une cellule est saisie (parmis d'autres
>> cellules d'une même ligne) qu'il soit impossible de supprimer les
>> valeurs de la ligne ?
>>
>> Je suis en train de faire un registre de courrier "départ / arrivée"
>> partagé et je ne souhaite pas qu'un utilisateur puisse effacer ou
>> corriger les données saisies par autrui ...
>>
>> Merci pour votre aide,
>>
>> JP
>>
>> PS : je précise que le classeur ouvert accepte forcément les macros
>> (sinon les feuilles de saisies sont veryhidden...)




Avatar
Fredo P.
Et pour avoir à ne répondre à la demande du Mdp qu'une seule fois, placer
un" Public MdP$ "en première ligne d'un module et en première ligne du code
de feuille: Option Compare Text pour ne pas faire de différence entre
caractères minuscules et majuscules.

Option Explicit
Option Compare Text

Private Sub Worksheet_Change(ByVal Target As Range)
If "Mdp" <> MDp Then
MDp = InputBox("Entrez le Mot de passe")
End If
If "Mdp" = MDp Then
ActiveSheet.Unprotect
If Target <> "" Then
Target.Locked = True
End If
ActiveSheet.Protect
Else
MsgBox "Mot de passe incorrect"
End If
End Sub


ps: ce moyen de faire n'empèche pas d'effacer les données présentes dans les
cellules, pour cela il serait sans doute préférable de la placer dans
Private Sub Worksheet_SelectionChange(ByVal Target As Range)