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

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
Merci pour votre aide