Bonjour,
Je souhaite vérifier dans une plage de cellules (définie en début de procédure) si la valeur saisie dans chaque cellule n'est pas supérieure à un nombre situé en tête de colonne. Si une erreur est détectée au moment de la validation de la cellule, un message apparait puis la cellule est vidée (chaine vide).
Mon problème, c'est que je dois valider 2 fois le message, cela signifie que la procédure se déroule une seconde fois. Certes ma procédure est une Worksheet_SelectionChange, je conçois donc que remplacer le contenu d'une case contenant un nombre par une chaine vide constitue un changement qui nécessite que la procédure se relance, mais avec ma condition if isnumeric(cell), je ne comprends pas pourquoi je rentre une seconde fois dans cette partie de la procédure.
Pour info : le "for each" en bas me sert à vérifier si il reste des cases non remplies. Si oui, un bouton de validation reste inactif.
Voici la procédure
Merci pour votre aide
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27 Private Sub Worksheet_SelectionChange(ByVal Target As Range) Dim maplage As Range, note, x As Byte Set maplage = Sheets("saisie").Range(Cells(3, 2), Cells(Range("A50").End(xlUp).Row, Range("Z1").End(xlToLeft).Column)) If Not Application.Intersect(Target, maplage) Is Nothing Then For Each cell In maplage note = Val(Right(Cells(2, cell.Column), Len(Cells(2, cell.Column)) - 2)) If IsNumeric(cell) Then x = cell If (cell > note) Or (cell < 0) Then Cells(cell.Row, cell.Column).Select MsgBox ("Valeur incorrecte") Selection.Value = "" Exit For End If End If Next For Each cell In maplage If cell = "" Then CommandButton1.Enabled = False Exit For Else: CommandButton1.Enabled = True End If Next End If End Sub
Partager