Autres Bloquer la saisie sous condition

Ommagawi

XLDnaute Junior
Bonjour à tous,
Dans mon exemple, je valide ou non une ligne par "Validé" ou "Annulé".
La ligne 4 est vide (non renseignée).
Dans ce cas je voudrais pouvoir annuler les lignes en dessous mais ne pas pouvoir les valider.
Donc, si une ligne (la 4) est vide, je peux remplir les suivantes avec "Annulé".
Si je veux mettre "Validé", je voudrai qu'un msg apparaisse : "Saisir les lignes précédentes qui sont vides" et que je ne puisse pas faire de saisie.
Pour résumer : pouvoir mettre "Validé" uniquement si toutes les lignes précédentes sont remplies.
En effet, j'ai un numéro d'ordre qui s'incrémente dans la colonne de droite et je ne veux pas que ce numéro change si je dois annuler par la suite la ligne 4.
Est ce clair ?
Merci de votre contribution.
 

Pièces jointes

  • Bloquer saisie.xlsx
    8.7 KB · Affichages: 8
Solution
Bonjour
nickel fanfan38
juste un petit détail de rien du tout
tu réévalue la plage avec le row de target pour la fin ça n'est pas vraiment nécessaire
par ce que target est un object range et donc dans cet event et dans ce contexte forcement la dernière cellule

on économise le UC avec plein de détails comme ça
VB:
Option Explicit

Private Sub Worksheet_Change(ByVal Target As Range)
  Dim nb As Long
  If Target.Column <> 3 Then Exit Sub
  If Target.Value = "" Then Exit Sub
  If Target.Value = "Annulé" Then Exit Sub
  'nb = Application.CountA(Range("C2:C" & target.row))
  nb = Application.CountA(Range("C2", Target))
  If nb + 1 < Target.Row Then MsgBox ("Saisir les lignes précédentes qui sont vides"): Target.Value = ""
End Sub

patricktoulon

XLDnaute Barbatruc
Bonjour
nickel fanfan38
juste un petit détail de rien du tout
tu réévalue la plage avec le row de target pour la fin ça n'est pas vraiment nécessaire
par ce que target est un object range et donc dans cet event et dans ce contexte forcement la dernière cellule

on économise le UC avec plein de détails comme ça
VB:
Option Explicit

Private Sub Worksheet_Change(ByVal Target As Range)
  Dim nb As Long
  If Target.Column <> 3 Then Exit Sub
  If Target.Value = "" Then Exit Sub
  If Target.Value = "Annulé" Then Exit Sub
  'nb = Application.CountA(Range("C2:C" & target.row))
  nb = Application.CountA(Range("C2", Target))
  If nb + 1 < Target.Row Then MsgBox ("Saisir les lignes précédentes qui sont vides"): Target.Value = ""
End Sub
 
Dernière édition:

Discussions similaires