Verrouillage de cellule en fonction d'une valeur

bonjour le forum

c'est ma première fois donc je vais essayer d'être le plus claire possible.

je chercher a pouvoir verrouillé des cellules de B15 à E15 de ma page "jan" si la valeur contenue dans a15 est = au résultat de la cellule sheets("sheet5") range("a1") donc les cellules b15:e15 sont verrouillées même chose pour les lignes suivantes(a16,a17,a18,a19,...)

si la valeur de la cellule en A ne correspond pas à la valeur de sheets("sheet5") range("a1") je voudrais verrouillé la plage de cellule de B a AL.

il faut que le filtre reste actif.

j'ai fais plusieurs recherche sur le forum et essayé d'adapter ce que j'ai trouvé mais en vain

je chipote un peu en Vba mais étant autodidacte il me reste encore bcp a apprendre .

le but 1er est évidement, si vous pouvez m'aider, de comprendre le code tout en résolvant mon problème.

voila j'espère avoir été assez clair

ps:

un petit fichier est joint pour que ce soit peut être plus claire

en vert quand c'est égal a sheet5 a1 en rouge quand ce ne l'est pas et en jaune ce qui doit être vérouillé

21fichier.xlsm (12.11 Ko)

bonjour,

voilà un code qui fonctionne je pense, en espérant qu'il te convient :

Sub test()

    ActiveSheet.Unprotect

For i = 15 To Range("A" & Rows.Count).End(xlUp).Row
    If Range("A" & i) = Sheet5.[A1] Then
        Range("B" & i & ":E" & i).Locked = True
        Range("F" & i & ":AL" & i).Locked = False
            Else
                Range("B" & i & ":AL" & i).Locked = True
    End If
Next i

        ActiveSheet.Protect DrawingObjects:=True, Contents:=True, Scenarios:=True, AllowFiltering:=True
End Sub

tu peux mettre le code dans un Worksheet_change ou activate dans le module de ta feuille 1.

A plus !

merci pour la réponse

ca marche pour le fichier que j'ai mis en exemple mais pas pour mon fichier réel.

Est-ce possible que ce soit a cause que dans un module je dois désactiver et réactiver la protection.

voici les codes que j'ai dans un autre module

Sheets("jan").Select

ActiveSheet.Unprotect "mdp"

Sheets("Jan").Range("$A$14:$F$178").AutoFilter Field:=1, Criteria1:=Sheets("sheet5").Range("a1").Value

If Sheets("sheet5").Range("a1").Value = "67" Then

Sheets("jan").Rows("1:7").EntireRow.Hidden = True

Sheets("jan").Rows("8:13").EntireRow.Hidden = False

ElseIf Sheets("sheet5").Range("a1").Value = "15" Then

Sheets("jan").Rows("1:3").EntireRow.Hidden = True

Sheets("jan").Rows("4:7").EntireRow.Hidden = False

Sheets("jan").Rows("8:13").EntireRow.Hidden = True

ElseIf Sheets("sheet5").Range("a1").Value = "3" Then

Sheets("jan").Rows("1").EntireRow.Hidden = True

Sheets("jan").Rows("2").EntireRow.Hidden = False

Sheets("jan").Rows("3:13").EntireRow.Hidden = True

ElseIf Sheets("sheet5").Range("a1").Value = "14" Then

Sheets("jan").Rows("1:2").EntireRow.Hidden = True

Sheets("jan").Rows("4:13").EntireRow.Hidden = True

Sheets("jan").Rows("3").EntireRow.Hidden = False

ElseIf Sheets("sheet5").Range("a1").Value = "EM" Then

Sheets("jan").Rows("2:13").EntireRow.Hidden = True

Sheets("jan").Rows("1").EntireRow.Hidden = False

End If

ActiveSheet.Protect "mdp", AllowFiltering:=True

As-tu rajouté le "mdp" dans mon code lorsque tu l'as insérer dans ton code ?

oui j'y ai pensé

C'est étrange cela fonctionne chez moi, j'ai lancé ton code, les lignes voulues se sont masquées et le filtre activé. j'ai ensuite lancé ma macro qui a verrouillé les cellules voulues.

Ce sont 2 macros distinctes ou bien tu a réuni les deux dans une meme macro ?

ce sont deux distinctes mais je vais essayer de les mettre en une pour voir

je te tiens au courant demain

merci de ton dévouement

j'ai retenté ca ne marche pas sur mon ficher c'est bizard en effet car sur le tien ca fonctionne je vais l'analyser demain

car il est trop gros pour te l'envoyer

merci

VOILA après avoir regardé comme il faut, j'ai réussi.

le problème était dans la désignation de la page pour aller rechercher la valeur de référence.

dans mon fichier la page sheeet5 est la sheet8 nommée sheet5 petite différence mais qui change tout.

donc j'ai modifier ton code en If Range("A" & i) = sheets("Sheet5").[A1] Then et c'est magique ca fonctionne.

un énorme merci

petite autre question : est-il possible de changer le msg quand la cellule est verrouillée?

encore un énorme merci

Bonjour,

tu peux mettre le code suivant dans le module de ta feuille en mettant le message que tu veux :

Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean)
If Target.Locked Then
MsgBox "Cette cellule est verrouillée et ne peut être modifiée."
End If
End Sub

A plus

merci pour la rapidité des réponses

pour les messages ca marche quand je double clic mais ca me met quand même le message excel après mon msg. j'ai essayé Application.DisplayAlerts = False mais ca ne change rien

de plus ca ne me met pas mon message mais uniquement le msg excel si je clic sur une cellule protégé et que j'essaye d'écrire

si vous pouviez encore me donner un petit coup de pouce ce serait magnifique

merci

Après quelques recherches, il ne semble pas possible d'empêcher le message d'apparaitre si l'on essaye de saisir quelques choses dans une cellule verrouillée. Une solution serait d'empêcher la sélection des cellules verrouillées et beaucoup plus simple !

(A rajouter dans la macro au moment de la protection de la feuille)

A plus

merci pour les réponses et le temps consacré

Rechercher des sujets similaires à "verrouillage fonction valeur"