Ceci est une page optimisée pour les mobiles. Cliquez sur ce texte pour afficher la vraie page.

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,
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

sousou

XLDnaute Barbatruc
Bonjour
Tu peux utiliser le code range sans difficulté, personnellement j'ai utilisé ceci:

Target.Parent.Cells(Target.Row, 8).Select

(tout tourne autour de la cellule modifiée)
 

Pièces jointes

  • peinture.xlsm
    17.3 KB · Affichages: 57

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
 

THIERRY35

XLDnaute Occasionnel
je réinstalle surement mal la macro, car du coup ça ne fonctionne plus !
ci-joint le fichier en pj
y a t il un ordre dans la macro que je n'ai pas respecté ?
Merci
 

Pièces jointes

  • peinture (6).xlsm
    15.7 KB · Affichages: 60

sousou

XLDnaute Barbatruc
Désolé autant pour moi, il faut inverser l'exit sub et le end if

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

Exit Sub
End If
 

THIERRY35

XLDnaute Occasionnel
Merci,
une question encore
à quoi sert cette ligne de code rajoutée par rapport à la version précédente
'Target.Parent.Cells(Target.Row, n).Locked = True
car cela ne change pas le déroulement de la macro ?
 

Discussions similaires

Les cookies sont requis pour utiliser ce site. Vous devez les accepter pour continuer à utiliser le site. En savoir plus…