Pour faciliter la lecture de la discussion, ce post intègre le contenu des posts : 11 et 15.
Présentation du formulaire fArticles
Points fonctionnels
Ce formulaire est polyvalent en ce sens qu’il sert à la fois d’outil pour gérer la table tArticles, mais aussi de formulaire de recherche multicritères.
* Le formulaire est présenté à la fois :
- enregistrement par enregistrement, en mode simple dans la section Détail (les contrôles sont modifiables)
- en vue d’ensemble, en mode continu dans la section PiedFormulaire (les contrôles sont non modifiables)
* L’enregistrement actif dans le mode simple apparaît mis en évidence dans le mode continu.
* Un double-clic sur un contrôle d’une ligne du mode continu, provoque l’activation de cet enregistrement.
* Dans les listes modifiables, si l’utilisateur introduit un élément non encore prévu dans la liste, l’opportunité lui est offerte de l’ajouter dans la liste.
* Le contenu de la liste des Sous-Catégories est limitée aux cas compatibles avec le choix d’une catégorie
La source du formulaire principal fArticles
La source est en fait une requête qui sélectionne dans tArticles les enregistrements qui satisfont aux critères suivants :
- le nom de l’article : contient une chaîne de caractères spécifiée ou est vierge ;
- la destination : une valeur ou est vierge ;
- la famille : une valeur ou est vierge ;
- l’unité : une valeur ou est vierge.
A l’ouverture du formulaire, tous ces critères étant vierges, c’est l’entièreté de la table qui est affichée.
Dès que l’utilisateur modifie un critère, la source est réactualisée (Me.Requery).
Voici la requête qui va servir de filtre permanent
La requête qui va servir de source sera donc :
La source du formulaire en version continu
est construite en suivant le même principe.
Autres particularités techniques
* Voir les contrôles zdtArticleIdDestination, zdtArticleIdFamille et zdtArticleidUnite.
Ils ont une fonction technique ---> en rouge et non visibles.
Ils reçoivent la valeur de l’id correspondant au choix effectué dans les listes correspondantes.
* Examiner l’événement après MàJ de ces listes
l’instruction
Me.zdtArticleIdFamille = zdlFamille.Column(0)
signifie que [Me.zdtArticleIdFamille] prend la valeur de la 1ère colonne de la requête qui sert de source à [zdlFamille] (column(0) car Access, ici, numérote à partir de zéro)
* La liste des Sous-Catégories est limitée aux cas possibles déterminés par le choix d’une Catégorie.
A la suite de mises à jour d’articles existants, il pourrait arriver que Catégorie et Sous-Catégorie deviennent incohérentes.
Exemple, à l’origine on a
Abricots sirop boite 3/1 Pâtisserie Ovoproduits
et comme notre ami veut maintenant faire du pain spécial au goût d’abricot, il modifie en
Abricots sirop boite 3/1 Boulangerie Ovoproduits
Pour cette mettre cette incohérence en évidence, j’ai prévu un formatage conditionnel pour ces deux champs.
Ce formatage fait appel à une fonction que voici :
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19
| Public Function CoherenceCategorie_SousCategorie() As Boolean
On Error GoTo GestionErreur
' ? coherenceCategorie_SousCategorie
'en français : le idCategorie du formulaire est-il égal
'au idCategorie que je trouve
'dans la table tSousCategories avec le idSousCategorie du formulaire ?
'si oui, il y a cohérence --> la fonction renvoie TRUE
CoherenceCategorie_SousCategorie = (Forms!fArticles!zdtArticleIdCategorie = DLookup("idCategorie", "tSousCategories", "idSousCategorie=" & Forms!fArticles!zdtArticleIdSousCategorie))
Exit Function
GestionErreur:
Select Case Err.Number
Case 94 'nouvel article
Exit Function
Case Else
MsgBox "Erreur inattendue dans CoherenceCategorie " _
& Err.Number & " " & Err.Description, vbCritical
End Select
End Function |
* Pour ajout éventuel d’une nouvelle Sous-Catégorie, voici le code
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18
| Private Sub zdlSousCategorie_NotInList(NewData As String, Response As Integer)
If MsgBox("Voulez-vous ajouter " & NewData & " à la liste des SousCategories ?" _
& vbLf & "Si oui, la Catégorie doit d'abord être complétée.", _
vbYesNo + vbQuestion + vbDefaultButton2, "Ajout") = vbYes Then
DoCmd.RunSQL "INSERT INTO tSousCategories ( SousCategorie, idCategorie, OrdreListe ) SELECT """ & NewData & """ AS Expr3, " _
& zdtArticleIdCategorie _
& " AS Expr2, DMax(""OrdreListe"",""tSousCategories"")+1 AS Expr1;"
'En français:
'insérez dans la table tSousCategorie,
'pour le champ SousCategoie : la nouvelle valeur proposée ;
'pour le champ idCategorie : la valeur de [zdtArticleIdCategorie] du formulaire ;
'pour le champ OrdreListe : incrémenter de 1. ---> ajout à la fin.
Response = acDataErrAdded
Else
Response = acDataErrContinue
Me.zdlCategorie.Undo
End If
End Sub |
Partager