Précédent   Forum des professionnels en informatique > Logiciels > Microsoft Office > Access > VBA Access
VBA Access Le forum pour les questions relatives au code VBA sous Access, et à son environnement de développement VBE.
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 28/01/2011, 02h40   #1
Membre régulier
 
Inscription : janvier 2011
Messages : 309
Détails du profil
Informations forums :
Inscription : janvier 2011
Messages : 309
Points : 76
Points : 76
Par défaut Gestion d'unités avancée

Bonjour à tous,

J'ai comme projet d'inclure dans mon développement d'application de gestion une gestion des unités universelles.

Pour cela et en m'inspirant de ce que j'ai vu dans d'autres logiciels il suffirait de deux champs
[Quantité] et [Unité]

[Unité] étant une liste de valeurs (h,L,m,m² etc...)
[Quantité] (0.00)

Je me doute bien qu'il faudra coder pour vérifier que la quantité introduite soit correcte par rapport à l'unité sélectionnée et qu'il faudra aussi formater ensuite les données.

Par exemple dans le cas d'une unité heure, il faudra que la quantité supportée soit supérieure à 24h pour la partie gauche et d'un maximum de 59 pour la partie droite(J'ai déjà quelques éléments de réponse vus ici)

Comment vous y prendriez vous pour qu'en suite dans les états les données introduites puissent s'additionner correctement (dans le cas d'une unité horaire) ?
clickandgo est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 28/01/2011, 16h47   #2
Membre éprouvé
 
Avatar de Tonioyo
 
Anthony Schricke
Développeur informatique
Inscription : juin 2008
Messages : 342
Détails du profil
Informations personnelles :
Nom : Anthony Schricke
Localisation : France, Haute Garonne (Midi Pyrénées)

Informations professionnelles :
Activité : Développeur informatique

Informations forums :
Inscription : juin 2008
Messages : 342
Points : 455
Points : 455
Bonjour,

Personnellement, d'un point de vue purement de codage VBA j'utiliserai une interface (via un module de classe) que je pourrai ensuite implémenter dans les différents cas de figures. Par exemple une interface qui possède les principaux accesseur getUnite(), setUnite(), getValeur() et setValeur(), etc... Le plus pratique serrai d'utiliser les propriétés car elles sont plus simple d'utilisation.

Après je déclinerai dans une autre classe pour chaque type de base. Par exemple UniteHeure, UniteDouble, UniteLong, etc...

L'intérêt c'est que l'on peux ensuite les utiliser dans une collection d'objets(grâce à l'objet Collection) en typant la collection de l'interface. On sais que tous ces objets sont du type de l'interface unite par exemple.

De cette manière, on peux manipuler les objets quelque soit leur type. Pour retrouver un type d'objet il faut faire quelque chose dans ce genre ci :

Code :
If TypeOf monObjet Is UniteHeure Then ...
Par contre pour le stockage d'une unité dans la base de données je pense qu'il faut au moins sauvegarder le type dans un champ afin de pouvoir implémenter, au moment du chargement, le bon type d'unité en mémoire.

Cordialement,
__________________
loi de LeBlanc : Plus tard signifie jamais. extrait de Coder proprement Auteur:Robert C. Martin
Tonioyo est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 29/01/2011, 00h56   #3
Membre régulier
 
Inscription : janvier 2011
Messages : 309
Détails du profil
Informations forums :
Inscription : janvier 2011
Messages : 309
Points : 76
Points : 76
Citation:
Envoyé par Tonioyo Voir le message
Bonjour,

Personnellement, d'un point de vue purement de codage VBA j'utiliserai une interface (via un module de classe) que je pourrai ensuite implémenter dans les différents cas de figures. Par exemple une interface qui possède les principaux accesseur getUnite(), setUnite(), getValeur() et setValeur(), etc... Le plus pratique serrai d'utiliser les propriétés car elles sont plus simple d'utilisation.

Après je déclinerai dans une autre classe pour chaque type de base. Par exemple UniteHeure, UniteDouble, UniteLong, etc...

L'intérêt c'est que l'on peux ensuite les utiliser dans une collection d'objets(grâce à l'objet Collection) en typant la collection de l'interface. On sais que tous ces objets sont du type de l'interface unite par exemple.

De cette manière, on peux manipuler les objets quelque soit leur type. Pour retrouver un type d'objet il faut faire quelque chose dans ce genre ci :

Code :
If TypeOf monObjet Is UniteHeure Then ...
Par contre pour le stockage d'une unité dans la base de données je pense qu'il faut au moins sauvegarder le type dans un champ afin de pouvoir implémenter, au moment du chargement, le bon type d'unité en mémoire.

Cordialement,
Merci pour ta réponse,

Ouh la la, que ça me semble compliqué tout ça !

Pour un débutant comme moi, je vais galérer, surtout sachant qu'il ne faut que 2 champs maximum dans le formulaire ...
Je suppose qu'il faudra dédoubler en créant un champ dans la table pour chaque type d'unité et ce sera par vba que la valeur sera réinjectée dans le champ [Quantité]...

La seule complication venant de l'unité horaire > 24h et de la mise en place d'une logique s'y rapportant...
clickandgo est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 29/01/2011, 15h06   #4
Rédacteur/Modérateur

 
Avatar de argyronet
 
Homme Jean-Philippe AMBROSINO
Panseur de bobos en solutions ETL
Inscription : mai 2004
Messages : 3 650
Détails du profil
Informations personnelles :
Nom : Homme Jean-Philippe AMBROSINO
Localisation : France

Informations professionnelles :
Activité : Panseur de bobos en solutions ETL
Secteur : Finance

Informations forums :
Inscription : mai 2004
Messages : 3 650
Points : 6 210
Points : 6 210
Envoyer un message via MSN à argyronet
Bonjour,

La classe est une bonne idée mais bon... il ne faut pas exagérer, c'est juste un calcul.
Ta liste déroulante qui propose l'unité... tu modifie la source qui doit être une table, ok ??? Selon ce qui est sélectionné, tu peux engager une décision car ta liste possède un ID qui correspond à l'élément sélectionné...

Dans cette table tu ajoutes les champs Coefficient requis et la formule... Tu exploites le tout avec un Eval().
Voici un exemple :

Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
 
Sub testformule()
    Dim strFormule                           As String
    Dim L                                    As Double
    Dim P                                    As Double
    Dim H                                    As Double
    Dim Coefficient As Double
 
    L = 15
    P = 15
    H = 10
    Coeficient = 1.7554
    'On suppose que la formule ci-dessous est dans ta table...
    strFormule = "Long*Larg*Haut"
 
    MsgBox Eval(Replace(Replace(Replace(strFormule, "Long", L), "Larg", P), "Haut", H)) * Coefficient
End Sub
Argy
__________________
Ils comptent sur vous...

Ce qui donne son sens à la communication, c´est la réponse que l´on obtient. Si vous n´obtenez pas la réponse voulue, communiquez différemment.

Web Site@Mail
Livres : VBA pour OFFICE 2007 et MICROSOFT ACCESS 2007
Nouveau Tutoriel : Déployer vos applications avec Microsoft Access 2010
MDB Viewer : Visionneuse Access v4.0
argyronet est déconnecté   Envoyer un message privé Réponse avec citation 20
Réponse Proposer ce sujet en actualité
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 03h40.


 
 
 
 
Partenaires

Hébergement Web