Admettre les doublons sauf une valeur
Utilisateur anonyme -
Bonsoir à tous!
Je me débrouille dans Ms Access et j'ai un souci.
En effet j'ai une table T_Personnel qui a trois champs: ID_Personnel; Nom et Prenom; Fonction. Le champ Fonction est une liste déroulante contenant Directeur, Adjoint, Gardien. J'ai un formulaire de saisie qui alimente la table T_Personnel. L'objectif est de saisir le personnel d'une école primaire.
Je voudrais que lorsque je saisie un nom et lui attribue la fonction Directeur, je ne puisse plus attribuer la même fonction Directeur à un autre. En somme, dans la liste du personnel, la fonction Directeur ne sera pas repétée, mais les autres OUI puisque dans les faits, il n'y a pas deux Directeurs dans une école primaire.
J'ai fait des recherches sur le Net, mais je n'ai eu gain de cause.
Je demande donc votre aide.
- Petite langoustine
- Doublons photos - Guide
- Supprimer les doublons excel - Guide
- Logiciel gratuit calcul valeur nutritionnelle - Télécharger - Santé & Bien-être
- Valeur ascii - Guide
- Supprimer les doublons photos gratuit - Télécharger - Nettoyage
3 réponses
Bonjour,
Je comprends parfaitement votre problème. Vous voulez vous assurer qu'il ne puisse y avoir qu'un seul Directeur dans votre table T_Personnel, tout en permettant plusieurs Adjoints et Gardiens.
Voici une solution que vous pouvez implémenter :
Validation dans le formulaire
Dans l'événement "Avant MAJ" (BeforeUpdate) de votre formulaire, ajoutez ce code VBA :
Private Sub Form_BeforeUpdate(Cancel As Integer) If Me.Fonction = "Directeur" Then ' Vérifier s'il existe déjà un directeur (excluant l'enregistrement actuel si on modifie) Dim strSQL As String Dim intCount As Integer If Me.NewRecord Then ' Nouveau record strSQL = "SELECT COUNT(*) FROM T_Personnel WHERE Fonction = 'Directeur'" Else ' Modification d'un record existant strSQL = "SELECT COUNT(*) FROM T_Personnel WHERE Fonction = 'Directeur' AND ID_Personnel <> " & Me.ID_Personnel End If intCount = DCount("*", "T_Personnel", Replace(Mid(strSQL, InStr(strSQL, "WHERE")), "COUNT(*)", "*")) If intCount > 0 Then MsgBox "Il ne peut y avoir qu'un seul Directeur dans l'école !", vbExclamation, "Attention" Cancel = True Me.Fonction.SetFocus End If End If End Sub
Vous pouvez également faire ceci :
Contrainte au niveau de la base de données
Vous pouvez aussi créer un index unique conditionnel :
Ouvrez la table T_Personnel en mode Création
Allez dans l'onglet "Index"
Créez un nouvel index nommé "DirecteurUnique"
Définissez le champ comme "Fonction"
Cochez "Unique" et "Ignorer les valeurs Null"
Mais cette solution est moins flexible car elle donnera une erreur système moins conviviale.
Bonjour!
Merci à Monsieur Bruno pour l'intérêt qu'il a accordé à mon problème.
j'ai copié le code vba et je l'ai collé dans l'évènement après MAJ de mon formulaire.
Mais je constate un message d'erreur lorsque je passe à l'essai. il est le suivant: Erreur de syntaxe (opérateur absent) dans l'expression WHERE Fonction = 'Directeur'
Que dois-je faire?