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
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)
Code : Sélectionner tout - Visualiser dans une fenêtre à part Me.zdtArticleIdFamille = zdlFamille.Column(0)
* 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 :
* Pour ajout éventuel d’une nouvelle Sous-Catégorie, voici le code
Code : Sélectionner tout - Visualiser dans une fenêtre à part
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
Code : Sélectionner tout - Visualiser dans une fenêtre à part
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