XL 2016 Interdire de saisir en colonne

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

  • INTERDIR DE SAISIR.xlsx
    8.6 KB · Affichages: 5
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 =...

ChRouan

XLDnaute Nouveau
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.
 

mapomme

XLDnaute Barbatruc
Supporter XLD
Bonsoir @Seddiki_adz :) , @ChRouan :) ,

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

Pièces jointes

  • Seddiki_adz- INTERDIRE DE SAISIR- v1.xlsx
    9.7 KB · Affichages: 3

mapomme

XLDnaute Barbatruc
Supporter XLD
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

  • Seddiki_adz- INTERDIRE DE SAISIR- v2.xlsm
    16.7 KB · Affichages: 3
Dernière édition:

Seddiki_adz

XLDnaute Impliqué
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
 

Discussions similaires

Statistiques des forums

Discussions
314 630
Messages
2 111 381
Membres
111 118
dernier inscrit
gmc