Re : Validation de données avec deux cas de figure
J'ai essayé de continuer grâce à vos indications, mais la solution que vous proposez ne fonctionne pas lorsque la cellule située 2 lignes plus bas est régie par une autre procédure (cf. code ci-dessous).
Private Sub Worksheet_Change(ByVal Target As Range)
If Not Intersect([C2:I2,C7:I7,C12:I12], Target) Is Nothing And Target.Count = 1 Then
p = Application.Match(Target.Value, [Code_6_chiffres], 0)
If IsError(p) Then
If MsgBox("Veuillez saisir un code 6 chiffres existant dans Navision", vbOKOnly + vbCritical, "Erreur de saisie") = vbOK Then
Application.EnableEvents = False
Target = ""
Target.Select
Application.EnableEvents = True
End If
Else
If MsgBox("Vous essayez de mettre en stock la référence :" & vbCrLf & vbCrLf & Target.Value & " - " & Application.Index([Désignation_article], p) & vbCrLf & vbCrLf & "Confirmer la mise en stock ?", vbYesNo + vbExclamation, "Validation du code 6 chiffres") <> vbYes Then
Application.EnableEvents = False
Target = ""
Target.Select
Application.EnableEvents = True
Else
Application.EnableEvents = False
If MsgBox("Veuillez saisir la quantité contenue dans la palette filmée", vbOKOnly + vbInformation, "Quantité à mettre en stock") = vbOK Then
Target.Offset(2, 0).Select
Application.EnableEvents = True
End If
End If
End If
Else
If Not Intersect([C4:I4,C9:I9], Target) Is Nothing And Target.Count = 1 Then
If Target.Value = 9999 Then
AdrSaisie = ""
Application.EnableEvents = False
Application.EnableEvents = True
Exit Sub
End If
q = IsNumeric(Target.Value)
r = IsEmpty(Target.Offset(-2, 0).Value)
If r = True Then
If MsgBox("Veuillez d'abord saisir une référence pour l'emplacement", vbOKOnly + vbCritical, "Erreur de saisie") = vbOK Then
Application.EnableEvents = False
Target = ""
Target.Offset(-2, 0).Select
Application.EnableEvents = True
End If
Else
If q = False Then
If MsgBox("Veuillez saisir un nombre", vbOKOnly + vbCritical, "Erreur de saisie") = vbOK Then
Application.EnableEvents = False
Target = ""
Target.Select
AdrSaisie = Target.Address
Application.EnableEvents = True
End If
Else
If Target.Value < 0 Then
If MsgBox("Veuillez saisir une quantité positive", vbOKOnly + vbCritical, "Erreur de saisie") = vbOK Then
Application.EnableEvents = False
Target = ""
Target.Select
AdrSaisie = Target.Address
Application.EnableEvents = True
End If
Else
If MsgBox("Vous essayez de mettre en stock :" & vbCrLf & vbCrLf & Target.Value & " unités du produit " & Target.Offset(-2, 0).Value & vbCrLf & vbCrLf & "Confirmer la mise en stock ?", vbYesNo + vbExclamation, "Validation de la quantité") <> vbYes Then
Application.EnableEvents = False
Target = ""
Target.Select
AdrSaisie = Target.Offset(0, 0).Address
Application.EnableEvents = True
Else
AdrSaisie = ""
Exit Sub
End If
End If
End If
End If
End If
End If
End Sub
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
If AdrSaisie <> "" Then
If Range(AdrSaisie) = "" Then
Range(AdrSaisie).Select
End If
End If
End Sub
_______________________
Je pense qu'il serait plus simple d'interdire la sortie de la cellule en forçant la saisie (cf. ce qui se passe lorsqu'on utilise la fonction données / validation avec erreur). L'utilisateur entre dans la cellule (idem touche F2) et ne peux pas la quitter tant qu'il n'a pas saisis une valeur satisfaisante.
Merci d'avance
Paulwasit