Bonjour le forum, bonjour à toi, qui va lire mon sujet et m'aider,
J'ai un tableau 6x5 commençant en B3 (la dernière ligne commence à B8 et la dernière colonne à G3) et j'aimerais ne pouvoir rentrer qu'une seule valeur sur chaque ligne. J'ai déjà écrit un code, dans le sub worksheet_change, pour n'autoriser que 2 types de données: "x" ou "" (rien). Et donc je ne veux pas 2 fois "x" dans une ligne de mon tableau.
Comme fonctionnement général du code, j'aimerais que lorsque l'utilisateur rentre un "x" dans une ligne en contenant déjà un, un message d'erreur s'affiche et la cellule qui vient d'être remplie est vidée.
Voilà ce que j'ai essayé de faire jusqu'à présent mais je rentre dans une boucle infinie et je ne vois pas du tout comment m'orienter pour régler ce souci et pour obtenir le fonctionnement que je désire:
En te remerciant par avance pour l'intérêt porté à cette discussion et pour toute aide! (les liens vers d'autres explications sont les bienvenus également)
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 Option Explicit Private Sub Worksheet_Change(ByVal Target As Range) Dim Ligne As Range, CopieLigne as Variant If Not Intersect(Target, Range("tableau")) Is Nothing Then 'Si le changement de valeur est fait dans le tableau... For Each Ligne In Range("tableau").Rows 'Pour chaque ligne du tableau... CopieLigne=Ligne.Value 'Je garde la valeur de la ligne quelque part (ça marche de l'écrire comme ça?) If Not IsEmpty(Ligne.Value) Then 'Si la ligne n'est pas vide (dans le cas où la ligne n'est pas vide cela signifie qu'il y 'a forcément une croix dans une des cases donc ça suffit à distinguer mes 2 cas: 'une case est déjà remplie ou aucune n'est remplie) Application.EnableEvents = False 'Je désactive les events car je vais changer la valeur de la ligne MsgBox ("Une seule case par ligne doit être remplie") Ligne.Value=CopieLigne 'Je remets l'ancienne ligne pour ne pas que l'utilisateur puisse changer les valeurs des cases Application.EnableEvents = True 'Je réactive les events End If Next End If End Sub
Bonne journée,
Bastien
Partager