Autres Bloquer la saisie sous condition

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 !

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

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
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:
- 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