XL 2016 Interdire de saisir en colonne

Boostez vos compétences Excel avec notre communauté !

Rejoignez Excel Downloads, le rendez-vous des passionnés où l'entraide fait la force. Apprenez, échangez, progressez – et tout ça gratuitement ! 👉 Inscrivez-vous maintenant !

Seddiki_adz

XLDnaute Impliqué
bonjour
je cherche une formule ou une méthode d’interdire de saisir en colonne C et D si en a M1 et M2 en colonne B et interdire de saisir en colonne E et F si en a M3 et M4 en colonne B et interdire de saisir en colonne G et H si en a M5 et M6 en colonne B et interdire de saisir en colonne I et J si en a M7 et M8 en colonne B et interdire de saisir en colonne K et L si en a M9 et M10 en colonne B
Merci
 

Pièces jointes

Solution
Re,

La version avec liste de validation peut poser un problème si on change la valeur en colonne B.
Dans ce cas, on peut se retrouver avec des cellules ayant déjà une valeur avant le changement de la colonne B et ne devant pas en comporter après la nouvelle valeur de la colonne B.

La version VBA répond en partie à ce défaut.
  • Elle n'empêche pas la saisie dans les cellules interdites mais annule la saisie.
  • Elle prend en compte le changement de valeur de la colonne B.
  • Elle permet la saisie multi-cellules.
Le code est dans le module associé à la feuille "Feuil1" :
VB:
Private Sub Worksheet_Change(ByVal Target As Range)
Dim der&, i&, n&, k&
   On Error GoTo FIN
   Application.EnableEvents = False
   der =...
Bonsoir. A mon avis il faudra obligatoirement passer par une macro Visual Basic pour modifier le statut verrouillé/déverrouillé des cellules puis protéger la feuille, avec ou sans mot de passe. Cette macro devra s'exécuter chaque fois qu'il y a modification d'une cellule dans la colonne B.
 
Bonsoir @Seddiki_adz 🙂 , @ChRouan 🙂 ,

Avec une liste de validation pour chaque plage de couleur (voir fichier joint).
1687728470900.png
 

Pièces jointes

Re,

La version avec liste de validation peut poser un problème si on change la valeur en colonne B.
Dans ce cas, on peut se retrouver avec des cellules ayant déjà une valeur avant le changement de la colonne B et ne devant pas en comporter après la nouvelle valeur de la colonne B.

La version VBA répond en partie à ce défaut.
  • Elle n'empêche pas la saisie dans les cellules interdites mais annule la saisie.
  • Elle prend en compte le changement de valeur de la colonne B.
  • Elle permet la saisie multi-cellules.
Le code est dans le module associé à la feuille "Feuil1" :
VB:
Private Sub Worksheet_Change(ByVal Target As Range)
Dim der&, i&, n&, k&
   On Error GoTo FIN
   Application.EnableEvents = False
   der = Me.UsedRange.Row + Me.UsedRange.Rows.Count - 1
   For i = 2 To der
      If Not Intersect(Target, Range("b" & i & ":L" & i)) Is Nothing Then
         If (Cells(i, "b") Like "M#") Or (Cells(i, "b") Like "M##") Then
            n = CInt(Mid(Cells(i, "b"), 2)) - 1: n = n \ 2
            If n <= 4 Then Cells(i, "c").Offset(, 2 * n).Resize(, 2).ClearContents
         End If
      End If
   Next i
FIN:
   Application.EnableEvents = True
End Sub
 

Pièces jointes

Dernière édition:
Re,

La version avec liste de validation peut poser un problème si on change la valeur en colonne B.
Dans ce cas, on peut se retrouver avec des cellules ayant déjà une valeur avant le changement de la colonne B et ne devant pas en comporter après la nouvelle valeur de la colonne B.

La version VBA répond en partie à ce défaut.
  • Elle n'empêche pas la saisie dans les cellules interdites mais annule la saisie.
  • Elle prend en compte le changement de valeur de la colonne B.
  • Elle permet la saisie multi-cellules.
Le code est dans le module associé à la feuille "Feuil1" :
VB:
Private Sub Worksheet_Change(ByVal Target As Range)
Dim der&, i&, n&, k&
   On Error GoTo FIN
   Application.EnableEvents = False
   der = Me.UsedRange.Row + Me.UsedRange.Rows.Count - 1
   For i = 2 To der
      If Not Intersect(Target, Range("b" & i & ":L" & i)) Is Nothing Then
         If (Cells(i, "b") Like "M#") Or (Cells(i, "b") Like "M##") Then
            n = CInt(Mid(Cells(i, "b"), 2)) - 1: n = n \ 2
            Cells(i, "c").Offset(, 2 * n).Resize(, 2).ClearContents
         End If
      End If
   Next i
FIN:
   Application.EnableEvents = True
End Sub
Excellent Merci
 
- Navigue sans publicité
- Accède à Cléa, notre assistante IA experte Excel... et pas que...
- Profite de fonctionnalités exclusives
Ton soutien permet à Excel Downloads de rester 100% gratuit et de continuer à rassembler les passionnés d'Excel.
Je deviens Supporter XLD

Discussions similaires

Retour