XL 2013 BLOQUER CELLULES APRES SAISIE

THIERRY35

XLDnaute Occasionnel
Bonjour,

je n'arrive pas à trouver la bonne formule avec la validation des données (est ce la bonne solution ?)
pour arriver à ce que je souhaiterai.

Ma problématique est la suivante :
pour chaque client il y a un choix de 4 couleurs de peinture, une fois la couleur choisie les 3 autres ne peuvent plus être sélectionnées et le curseur se positionne (si possible) sur la cellule correspondant aux prix du litre.
Ci-joint un extrait du ficher, et merci d'avance pour votre aide.
 

Pièces jointes

  • modele.xlsx
    10.7 KB · Affichages: 54

Jacky67

XLDnaute Barbatruc
Bonjour,

je n'arrive pas à trouver la bonne formule avec la validation des données (est ce la bonne solution ?)
pour arriver à ce que je souhaiterai.

Ma problématique est la suivante :
pour chaque client il y a un choix de 4 couleurs de peinture, une fois la couleur choisie les 3 autres ne peuvent plus être sélectionnées et le curseur se positionne (si possible) sur la cellule correspondant aux prix du litre.
Ci-joint un extrait du ficher, et merci d'avance pour votre aide.
Bonjour,
Essaye avec la validation de donnée==>formule
Code:
=NB($C4:$F4)=1
 

Pièces jointes

  • modele.xlsx
    10.5 KB · Affichages: 55

sousou

XLDnaute Barbatruc
Bonsoir
Un début de solution avec macro?
Une seule valeur peut être saisie.
Il faut voir si si c'est suffisant, cette solution permet de modifier les saisies....
Quant au prix par litre il est ou???
 

Pièces jointes

  • peinture.xlsm
    16.7 KB · Affichages: 60

THIERRY35

XLDnaute Occasionnel
Bonjour sousou et jacky67

merci pour vos réponses,
je vais retenir l'option macro de SOUSOU

je rajoute une mise en forme conditionnelle pour l'utilisateur, ça rend plus lisible sa saisie.
quant au prix par litre il est prévu en bout de chaque ligne (je l'avais oublié), le prix est à documenter pour un calcul du prix total
ci-joint le fichier modifié, je pensais utiliser le code Range pour positionner au bout de chaque ligne mais vu les codes utilisés dans ta macro ça ne me semble pas pertinent

merci pour ton aide sur ce dernier point.
 

Pièces jointes

  • peinture.xlsm
    17.1 KB · Affichages: 52

THIERRY35

XLDnaute Occasionnel
Merci pour la rapidité de ta réponse,
mais à l'usage il se pose un problème
si l'utilisateur saisit par erreur une autre donnée sur la même ligne ce serait plutôt la dernière saisie qui doit être annulée et non pas la première.
je ne maîtrise pas assez pour savoir comment inverser cet ordre dans la macro
en espérant être clair
Merci
 

sousou

XLDnaute Barbatruc
Ca reprend ma première remarque faut il interdire la modification dès qu'une saisie à été faite?
J'y ai bien pensé (code de protection en commentaire), mais que fait tu si une l'opérateur à fait une erreur de saisie?
La première saisie doit-elle être figée ad vitam?
 

THIERRY35

XLDnaute Occasionnel
non, la 1ère saisie peut être modifiée ou supprimée, dans ce dernier cas pour ressaisir sur une autre cellule de la même ligne s'il y a erreur de couleur par exemple.
j 'essaye également d'intégrer un code supplémentaire : une fois le prix du litre saisi, le curseur se positionne sur le numéro de client suivant qui se trouve en colonne A :
Target.Parent.Cells(Target.Row+1, 1).Select, mais du coup la macro tourne indéfiniment.
A voir si c'est possible (cherry on the cake) !
merci
 

sousou

XLDnaute Barbatruc
re
Private Sub Worksheet_Change(ByVal Target As Range)
' si saisie du prix
If Target.Column = 8 Then
Target.Parent.Cells(Target.Row + 1, 1).Select
End If
Exit Sub
'Target.Parent.Unprotect ("")

Application.EnableEvents = False
If Target.Column > 2 And Target.Column < 7 Then
nb = Target
For n = 3 To 6
Target.Parent.Cells(Target.Row, n) = ""
'Target.Parent.Cells(Target.Row, n).Locked = True
Next

Target = nb
End If
Application.EnableEvents = True
Target.Parent.Cells(Target.Row, 8).Select
'Target.Parent.Protect ("")
End Sub
 

Discussions similaires

Membres actuellement en ligne

Statistiques des forums

Discussions
312 329
Messages
2 087 334
Membres
103 520
dernier inscrit
Azise