Comment interdire modif ds cellule remplie ?

kormi -  
lermite222 Messages postés 9042 Statut Contributeur -
Bonjour,

J'ai créé un tableau avec des cellules qui comportent des jours, des noms et des sommes qui sont verrouillées. Je remplis au fur et à mesure les cellules avec des chiffres. je souhaiterais verrouiller les cellules dès qu'elles contiennent un chiffre.
Comment ?
Merci d'avance

5 réponses

plubarj Messages postés 103 Statut Contributeur 6
 
Hello kormi
Je te propose cette solution un peu basique:
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
        If IsNull(ActiveCell.Value) Then
             ActiveSheet.Protect Contents:=False
        Else
            ActiveSheet.Protect Contents:=True
        End If
End Sub
En résumé: si la cellule que tu sélectionnes contient quelque chose, tu protèges la feuille, sinon, tu désactive la protection.
Cheer

Plubarj Tumeur
0
lermite222 Messages postés 9042 Statut Contributeur 1 191
 
Bonsoir,
Ta solution est certe un peu basique mais surtout tout à fait fausse.
Quand tu donne une "solution" il faudrait d'abord la tester !!!

copie cette sub dans un nouveau classeur et teste...
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
    Range("A1").Value = Target.Address
    Range("A2").Value = ActiveCell.Address
    Range("B4").Value = 12
    Range("A5").Value = IsNull(Range("B4").Value)
End Sub


Activecell donne l'adresse de la cellule dans lequel ont vient d'arriver...et non celle où ont était
idem pour Target.Address
La fonction IsNull ne fonctionne que sur des objet ou variable de type Variant, dans le cas soumis, renvoit toujour FAUX
la ligne...
    ActiveSheet.Protect Contents:=False

déprotège toute la feuille, ce qui veux dire qu'il n'y à plus de protection
la ligne
    ActiveSheet.Protect Contents:=True

reprotège la feuille, mais ne protège pas la cellule concernée...
Voila le code comme il devrait être, du moins une solution.
Il faut d'abord déprotéger la feuille et décocher les verrouillage de toutes les cellules vides et ensuite reverrouillé la feuille
Sans cette condition ca marchera jamais, par facilité j'ai mis une macro qui peu déverrouillé par bloc.

Dim AncienneCellule As String

Private Sub Worksheet_Activate()
    AncienneCellule = ActiveCell.Address
End Sub

Private Sub Worksheet_SelectionChange(ByVal Target As Range)
    If AncienneCellule <> "" Then
        If Range(AncienneCellule).Value <> "" Then
            Sheets("Feuil1").Unprotect
            Range(AncienneCellule).Locked = True
            Sheets("Feuil1").Protect
        End If
    End If
    AncienneCellule = Target.Address
End Sub

Sub déverrouilleCellules()
    Worksheets("Feuil1").Unprotect
    'Changer l'adresse pour déverrouillé des cellules
    Sheets("Feuil1").Range("A1:G30").Locked = False
    Worksheets("Feuil1").Protect
End Sub

Vérifié et tester.
A+
0
plubarj Messages postés 103 Statut Contributeur 6
 
Hola hola, excuse, lermite!
J'ai bien testé mon truc avant de poster et j'ai commis l'erreur de faire une modif de mon post après coup.
Mais si on garde la même approche (protection générale de la feuille si la cellule sélectionnée n'est pas vide et protection générale si elle l'est), tu vois une erreur là dedans?
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
        If ActiveCell.Value <> 0 And ActiveCell.Value <> "" Then
            ActiveSheet.Protect Contents:=True
        Else
            ActiveSheet.Protect Contents:=False
        End If
End Sub
je ne comprends pas pourquoi tu dis
'reprotège la feuille, mais ne protège pas la cellule concernée...'

Avec encore toutes mes excuses!
0
lermite222 Messages postés 9042 Statut Contributeur 1 191
 
Bonjour,
Je suis rouge de honte, tu voudras bien m'excuser pour les remarques que j'ai fait, je devais être drôlement fatigué pour pas avoir compris ta sub directement.
A+
0
plubarj Messages postés 103 Statut Contributeur 6
 
Ohh, pas de quoi être rouge de honte, il y avait bien un truc foireux dans 'ma solution'. Merci donc de l'avoir soulevé.
Cheers
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
lermite222 Messages postés 9042 Statut Contributeur 1 191
 
Précision pour kormi...
La solution basique permet de protéger la feuille pour éviter de recopier sur une cellule mais ne procure pas une grande sécurité. Certaine manoueuvre peuvent endommager le fichier malgré la protection..
Ex: effacer des données "protégées"
Mettre données dans A1
Mettre la souris sur une cellule vide, pas relacher et marquer une sélection jusque A1 ensuite tape Delete !! tout le bloc est vide.

pour changer A1 (volontairement) dans une autre feuille mettre une valeur différente et sélectionner un bloc de la même grandeur que précédament et la recopier comme ci-dessus
A+
0