Comment empêcher la saisie de plus d'1 cellule dans ligne

Bonjour,

J'ai ci-dessous une partie d'un tableau excel qui est un questionnaire envoyé à des patients.

Pour chaque ligne, le patient doit choisir de remplir 1 cellulle bleu en indiquant le chiffre qui correspond à la fréqence.

Exemple pour la 1ère affirmation, si le patient estime qu'il réagit rarement négativement, il doit inscrire "4" dans la colonne "Rarement".

Mon soucis, c'est que certains patients comprennent mal les consignes, ou hésitent et remplissent 2 cellules de la ligne (dans l'exemple ci--dessus, il pourrait remplir "3" dans la colonne "parfois" (h) et "4" dans la colonne "rarement" (i), ce qui fausse les calculs. Il n'a droit qu'à 1 seul coix par ligne.

Ma question est donc : peut-on, sur chaque ligne, interdire d'inscrire plus d'1 note dans les colonnes de F à J ? Ou dit autrement : à partir du moment où 1 cellule d'une ligne est remplie, comment empêcher de saisir une autre donnée dans les colonnes F à J de cette ligne.

Si la solution passe par du VBA, pouvez-vous me donner un petit mode opératoire car je n'ai jamais pratiqué.

Merci d'avance !

Jacques

image

Bonjour Jacques et bienvenu, bonjour le forum,

Pour une solution sur Photochope ta capture d'écran est parfaite. En revanche, pour une solution sur Excel c'est le fichier qu'il nous faudrait.

Les formules c'est pas mon truc, je te propose une solution VBA. Mais je pense qu'au lieu de taper la valeur (de 1 à 5) un X suffirait dans la bonne colonne avec une petite macro qui effacerait automatiquement les autres cellules de la plage. Donc impossible d'avoir deux (ou plus d'X) dans la même ligne.

Dis-nous si tu tiens vraiment aux valeurs (à cause peut-être de calculs effectués à l'aide des ces valeurs) ou si la proposition que je te fais te conviendrait. Et le fichier qui va bien pour qu'on puisse te faire le code le mieux adapté.

Bonjour à tous,

avec une validation de données

eric

45classeur2.xlsx (54.34 Ko)

On pourrait contrôler en plus si saisie de 1 à 5 au bon endroit, mais ça multiplie les manip (ici saisie d'un X ou caractère quelconque)
Tu peux récupérer la note avec =EQUIV("x";F6:J6)

Merci eriiic et ThauThème pour ton message de bienvenue..

Comme tu le signales, ThauThème, le problème est que j'ai besoin des valeurs des cellules (de 1 à 5 sur chaque ligne), qui donnent une somme au final qui permet de définir l'état du patient.

Voici la page comme tu me l'as demandé.

Bonne journée !

Jacques

Bonjour à tous,

Pourquoi ne pas te servir de la fonction d'Eriiiic qui fonctionne très bien et que je ne connaissais pas d'ailleurs merci à lui.

@Eriiiic : Tu as plus d'informations sur la fonction "personnalisée" d'une liste de validation ? C'est la première fois que je la vois utilisée. Elle n'est utilisable que dans ce contexte ?

Bon dimanche.

Bonjour,

@Eriiiic : Tu as plus d'informations sur la fonction "personnalisée" d'une liste de validation ?

pas grand chose à en dire.
Tu as juste à y mettre une formule qui te retourne VRAI ou FAUX. La restriction s'appliquera si VRAI.
Il faut être bien attentif aux ref relatives/absolues vu que ça s'applique à une plage.
eric

Bonjour,

Désolé de ma nullité, mais c'est qu'une validation des données est l'équivalent d'une MEFC mais sur les valeurs entrées ? Elle ne permet une saisie que si la valeur de retour est VRAIE ? Donc lorsqu'on y indique une liste elle compare l'égalité entre la valeur saisie et la liste prédéfini, si c'est VRAI alors elle accepte l'entrée, sinon c'est la msgbox d'erreur ?

Un dimanche instructif !

Merci beaucoup !

Bonjour le fil, bonjour le forum,

En pièce jointe ton fichier modifié avec l'événementielle Change ci-dessous placé dans le composant Feuil1(Sensoriel) :

Private Sub Worksheet_Change(ByVal Target As Range)
Dim PL As Range 'déclare la variable PL (PLage)
Dim V As Byte 'déclare la variable V (Valeur)

'définit la plage PL
Set PL = Application.Union(Range("F6:J13").Range("F20:J28"), Range("F35:J45"), Range("F52:J69"), Range("F76,J82"), Range("F89:J106"))
If Not Application.Intersect(Target, PL) Is Nothing Then Exit Sub 'si le changement a lieu ailleurs que dans la plage PL, sort de la procédure
If Target.Value = "" Then Exit Sub 'si la celllue est effacée, sort de la procédure
Application.EnableEvents = False 'interdit les événementielles (évite de faire tourner cette événementielle "Change" en boucle quand on efface la ligne et quand on renvoie la valeur V)
V = Target.Column - 5 'définit la variable V
Cells(Target.Row, "F").Resize(1, 5).ClearContents 'efface la ligne de la cellule modifiée
Target.Value = V 'renvoie la valeur V dans la cellue modifiée
Application.EnableEvents = True 'autorise les événementielles
End Sub

Non seulement une seule valeur n'est autorisée mais la valeur est en accord avec la colonne. Si l'utilisateur tape 4 dans la colonne 5, c'est 5 qui sera gardé.

Le fichier :

Heuuu Ergotamine...
Il y a une vraie question ou c'est juste un commentaire ?

Non ce sont mes neurones qui se sont touchés en ce dimanche matin je me suis laissé une note à moi même suite à ton explication sur les VRAIS/FAUX

10 ans d'Excel et je ne connais toujours pas les bases ..

Merci !

Bonjour tout le monde !

Autre exemple d'utilisation ici, quasi similaire 😉

Lien

Bonjour …

Vous avez parlé de saisie ? Que doit-on saisir ?

oups

ThauTeme (salut) j’avais aussi une macro mais pas le même (voirFeuil2)

Merci à tout le monde pour vos interventions, et Big Up Pour ThauThème, ça marche du tonnerre, génial ! En plus tu as ajouté en bonus la reconnaissance de valeur par colonne en cas de mauvaise saisie. Merci infiniment !

Bonne soirée à toutes/tous !

Jak

Rechercher des sujets similaires à "comment empecher saisie ligne"