XL 2016 Choix unique pour le même utilisateur

Yusuke

XLDnaute Nouveau
Bonjour,

Je suis nouveau sur ce forum, et j'aimerais bien en profiter pour saluer tous les contributeurs et les remercier pour leur aide précieuse.

J'ai créé un tableau Excel avec 4 colonnes:

ID | Nom | Repas | Date/Heure
01 X Déj
02 Y Petit-déj
03 Z Collation
01 X Déj

La colonne Repas est une liste de choix contenant: Petit-déjeuner, Déjeuner, Collation et Dîner. A chaque nouvelle entrée, on doit sélectionner un repas pour un utilisateur (ID).
Je souhaite savoir comment interdire la sélection d'un repas s'il est déjà pris par un utilisateur (ID).

Merci à vous.
 

Staple1600

XLDnaute Barbatruc
Re

Une solution à peaufiner
VB:
Private Sub Worksheet_Change(ByVal R As Range)
If R.Column = 3 Then
If Application.CountIf(Range("C:C"), R) > 1 And Application.CountIf(Range("F:F"), Cells(R.Row, "F")) > 1 Then
MsgBox "Doublons!", vbCritical, "ERREUR!"
R.Offset(, 1) = Format(Now, "dd-mm-yyyy | hh:mm:ss")
R.ClearContents
End If
End If
End Sub
J'ai ajouter une formule de ce type en colonne F
=CONCATENER(Tableau1[@ID];Tableau1[@REPAS];GAUCHE(Tableau1[@DATE];10))

Cela fonctionne en situation de test.

NB: Tu remarques donc que j'ai utilisé la fonction Tableau
 

Staple1600

XLDnaute Barbatruc
Re

1) As-tu transformé ton tableau en Tableau Excel?
(Dans mon exemple, le tableau est nommé Tableau1, nom attribué automatiquement par Excel)
https://support.office.com/fr-fr/ar...ux-excel-f5ed2452-2337-4f71-bed3-c8ae6d2b276e

2) Ensuite il faut mettre la formule en colonne F (à partir de F2 et recopier vers le bas)
Pour l'esthétisme, on mettra la couleur de police en blanc.

3) Je ne joins plus de fichier Excel sur le forum.
Normalement, les explications que je poste et l'implication du demandeur à résoudre sa question doivent suffire. ;)
(Ce que j'appelle la philosophie "Mélam1ndanlekamboui" ;))
 

Staple1600

XLDnaute Barbatruc
Re

Je rajoute cette macro qui devrait finir de t'aider ;)
(à ne lancer qu'une seule fois, c'est pour créer le Tableau)

VB:
Sub MiseEnTableau()
Dim objTable As ListObject, rng As Range
Set rng = Feuil1.Range("$A$1:$D$20")
Set objTable = Feuil1.ListObjects.Add(xlSrcRange, rng, , xlYes)
objTable.Name = "Tableau1"
objTable.TableStyle = "TableStyleLight16"
Range("F2:F20").FormulaR1C1 = "=CONCATENATE(Tableau1[@ID],Tableau1[@REPAS],LEFT(Tableau1[@DATE],10))"
End Sub

NB: Le nom des entêtes du tableau seront:
ID NOM REPAS DATE
 

Staple1600

XLDnaute Barbatruc
Re

@Yusuke
Quand tu auras réussi à mettre ton tableau sous forme de Tableau, çà devrait déjà mieux fonctionner
(comme cela a fonctionné chez moi, mais ce n'est là qu'une ébauche qui fonctionne en mode test)

PS: Il y a surement de meilleures façons de faire ;)
Je laisse la place à mes petits camarades de jeux pour cela ;)
 

Discussions similaires

Statistiques des forums

Discussions
312 104
Messages
2 085 349
Membres
102 869
dernier inscrit
radyreth