GESTION DYNAMIQUE DES ITEMS - BIEN PLUS INTERESSANT QUE LES TABLEAUX DYNAMIQUES

cs_asimengo Messages postés 280 Date d'inscription jeudi 24 mars 2005 Statut Membre Dernière intervention 18 mars 2009 - 15 oct. 2008 à 21:20
cs_asimengo Messages postés 280 Date d'inscription jeudi 24 mars 2005 Statut Membre Dernière intervention 18 mars 2009 - 16 oct. 2008 à 14:25
Cette discussion concerne un article du site. Pour la consulter dans son contexte d'origine, cliquez sur le lien ci-dessous.

https://codes-sources.commentcamarche.net/source/48235-gestion-dynamique-des-items-bien-plus-interessant-que-les-tableaux-dynamiques

cs_asimengo Messages postés 280 Date d'inscription jeudi 24 mars 2005 Statut Membre Dernière intervention 18 mars 2009
16 oct. 2008 à 14:25
Je prends le cas de tables de references dans une applis, en général pour ce cas on a besoin que Ajouter/Modifier/Supprimer/Visualiser, de ce fait on peut aisement penser le faire avec des forms dynamiques.

Les informations des champs de tables sont etockes dans une table ainsi que le comportement de chaque (caption, required, rowsource, AutoIncrement, LimitToList, InputMask, ....). Soit au départ on charge tous les champs avec instruction du genre moClsItems("<Nom propriete>", "<Nom Table>/<Nom Champ>") = ..., soit on le fais a la demande de lutilisateur.

Mais pour ne pas recharger une table 2 fois, il suffit de stocker moClsItems.AddItem "<Nom Table>","DEJA LU", True, meBoolean et apres il suffira de il suffira de tester if moClsItems(<Nom Table>, "DEJA LU") Then Call InitTable (<Nom Table>).

Comme je disais il y'a des possibiliés infinie d'utilisation.

De même supposons que pour un logiciel de cotation (voir facturation, mais pas tout a fait) par exemple, on a des rubriques qui dependent des fonctions voir une petite illustration dans ma source http://www.vbfrance.com/codes/DLL-EXECUTER-FONCTIONS-PROCEDURES-EXTERNES-TON-APPLI-MEME_47010.aspx on peut utiliser cette DLL pour faire valider les valeurs par l'utilisateur.
De ce fait pour chaque rubrique de cotation ou de facturation (les 2 sont possibles) d'associer dans leur table un champs formule de calcul qui sera quelque du genre "[%_Poids]*[%_Taux]" ou encore plus complexe une vrai fonction en language de script. Il suffit d'analyser le texte pour rechercher les paramètres, dans mon cas tous les mots entre "[%_" et "]" rien de plus simple qu'une petite fonction Public Function SplitSNA(ByVal psText As String, ByVal psLeftSeparator As String, ByVal psRightSeparator As String) As Variant, tous les parametres sont passes controles dans moClsItems pour voir si elles sont déjà initialisées sinon utiliser ValidateItems pour que l'utilsateur les renseigne.Apres il suffit d'utiliser une boucle elementaire pour remplacer les variables dans le texte par les valeurs. Reste plus qu'à utiliser la fonction Public Function EvalExpression(ByVal psExpression As String, Optional ByVal psLanguage "VBScript", Optional ByVal peType As EnumDataTypeSimplified meTexte) As Variant
se trouvant dans cette source pour faire le calcul.

La fonction SplitSNA est aussi simple que ceci:
Public Function SplitSNA(ByVal psText As String, ByVal psLeftSeparator As String, ByVal psRightSeparator As String) As Variant
Dim lPosDebut As Long, lPosFin As Long, sArray As String

lPosDebut = InStr(psText, psLeftSeparator)
Do While lPosDebut > 0
psText = Mid(psText, lPosDebut + Len(psLeftSeparator))
lPosFin = InStr(psText, psRightSeparator)
If lPosFin <> 0 Then
sArray = sArray & psLeftSeparator & psRightSeparator & Left(psText, lPosFin - 1)
lPosDebut = InStr(lPosFin + 1, psText, psLeftSeparator)
Else
Exit Do
End If
Loop
SplitSNA = Split(Mid(sArray, Len(psLeftSeparator & psRightSeparator) + 1), psLeftSeparator & psRightSeparator)
End Function

Voila assez expliqué pour être bien clair sur les possibilités d'aide de celle DLL et les grands de son utilisation chez moi.

A+
ASIMENGO
cs_asimengo Messages postés 280 Date d'inscription jeudi 24 mars 2005 Statut Membre Dernière intervention 18 mars 2009
16 oct. 2008 à 13:54
Je ne suis pas toujours tres complet pour expliquer mes sources, mais il faut noter que je traite également de facon tres simple et aise le probleme de form avec contrôles dynamiques. Les contrôles sont construits en fonction du nombre d'items dans le form et le dimensionnement de la form est consequent. Le resize automatique de toute la form y est traité y est traité et il montre une des méthodes simples pour le faire. Il n'est pas important pour le resize de se lancer dans des calculs vectorielles, il faut delimiter la form en secteur en utilisant soit des picturebox, soit des frames, ... et avoir une vue d'ensemble pour le resize plutot qu'un resize vectoriel sur chaque contrôle.

Pour mon usage personnel je n'utilise que des form à contrôles dynamiques, toute la structure de la form se trouve dans une table, et on peut indiquer le nombre de colonnes, scroll auto.

C'est important de le préciser afin d'y jeter un coup d'oeil si ca peut être utile.

A+
cs_asimengo Messages postés 280 Date d'inscription jeudi 24 mars 2005 Statut Membre Dernière intervention 18 mars 2009
15 oct. 2008 à 21:20
J'allais oublier un élément plutôt très utile. L'utilisateur peut saisir des expressions directement dans les textbox si le cas se presente et le système fera le calcul il suffit de précéder le texte par "=".
Par exemple =Now() donne la date/heure de l'instant, =Date() la date du jour, toute autre forme de calcul est possible, =15 + sin(34) + .....

J'ai donc un petit bout de code qui permet d'évaluer toute forme d'expressions en utilisant le language de script.
Rejoignez-nous