ACCESS:calcul de valeur à partir de résultats dans une listbox

jaketothebone Messages postés 3 Date d'inscription mardi 20 janvier 2004 Statut Membre Dernière intervention 4 mars 2004 - 1 mars 2004 à 15:59
KC62 Messages postés 229 Date d'inscription mardi 3 juin 2003 Statut Membre Dernière intervention 20 juin 2007 - 4 mars 2004 à 16:15
Bonjour,
J'ai une listbox qui affiche les résultats d'une recherche multi-critères. J'ai 7 colonnes dans ma listbox.
L'une de celles-ci affiche des résultats sur lesquels j'aimerai effectuer une somme des valeurs contenues dans cette colonne dans un autre champ (peu importe).
Premièrement, ma connaissance Vb ne m'a permis de ne faire des recherches que sur des champs texte.Or, je voudrai que cette colonne affiche des résultats réellement numériques à partir de ma combo box: et là, arghh, je bloque. Une fois ceci fait, je voudrais savoir comme faire ma $ù^/,!?@ de somme
Tant que j'y suis, comment faire pour imprimer en appuyant sur un bouton créé dans access par exemple les résultats
affichés dans ma listbox et que ces résultats?
En ce moment jefais de la brasse coulée... L'aide VB est nul, ne parlons pas de celui d'access (en fait c'est moi qui comprend rien...)
Jaketothebone

5 réponses

KC62 Messages postés 229 Date d'inscription mardi 3 juin 2003 Statut Membre Dernière intervention 20 juin 2007
2 mars 2004 à 10:24
Salut !
On va résoudre T probleme 1 par 1 si tu veux bien :

La Somme : Pourquoi ne pas la faire lors de ta recherche ?
ou pourquoi ne pas utilisé la fonction SUM d'SQL ( trés pratique mais tout le monde loublie..."

Je ne comprend pas ton probleme du numérique/Texte tout ce que je peux te dire c'est que VB est capable de convertir du texte en numérique sans trop de souci... Tu peux donc réutiliser des variables déclaré en numérique qui permettré de faire tés calculs !

Pour l'impression le mieux c'est de transfere ta listbox dans une feuille Excel... Ce qui permet la mise en forme et limpression des fichiers. de plus tous les utilisateurs sont a l'aise sous Excel. C donc trés pratique.

Pour la brasse coulée i doit me reste un canard gonflabe a la maison.... ;-)

Si tout tes pb ne sont pas résolu ! décris les mieux avec un exemple sa permet de savoir ou on va...

jespere t'avoir dépanné mais je suis certain de pas n'avoir fini ! je surveille ton post !

KC62

On a pas toutes les solutions de tous les probleme mais chaque probleme à ses solutions ...
0
jaketothebone Messages postés 3 Date d'inscription mardi 20 janvier 2004 Statut Membre Dernière intervention 4 mars 2004
2 mars 2004 à 11:07
Salut,
Je te remercie pour ton message. Je vais tenter de mieux expliquer mes soucis.
Donc j'ai un formulaire que l'on appelera "recherche multi"
Dans celui-ci j'ai intégré des champs indépendants dont la source est une table. Devant chaque champ indépendant, j'ai intégré une case à cocher . Quand je décoche la case, le champ correspondant s'affiche (en combobox)
Il y a 6 champs de recherche (Localité, Nom Société, Nombre de couvert, Distance, zone, activité).
Les résultats s'affichent dans une listBox à 6 colonnes triés selon la clé primaire qui est le n° d'enregistrements.
Le fonctionnement est simple.
Je décoche la cas pour afficher le champ de recherche (ex: nombre de couverts), je tape un nombre (ex: 14, pour m'afficher toutes les sociétés dont le nombre de couverts est supérieur ou égal à 14). Le résultat s'affiche dans ma listbox.
Jusque là tout fonctionne bien, je peux faire ma recherche selon plusieurs critères (ex: nombre de couverts + localité...)
Or, comme le résultat de nombre de couverts est supérieur ou égal à n, j'ai besoin de faire la somme de tous les nombre de couverts de tous les enregistrements du résultat de ma listbox. Et là, je ne sais pas comment faire, mais vraiment pas. J'ai d'abord créé un champ indépendant en utilisant la fonction Sum mais je ne sais pas lui dire d'aller additionner le nombre de couverts résultant dans ma listbox.
Je pense que je ne vais pas dans la bonne direction.
De plus, le champ nombre de couverts de la table est en alpha, il faut donc que je convertisse ce champ en numérique.
Or, kan je change ce paramètre dans ma table, j'ai un beau message d'erreur du type "incompatibilité nianiania...fonction d'agrégat...nianiania", ce qui pour moi s'apparente à du chinois de la province du ziang, c'est dire...
Voilà, j'espère avoir été un peu plus clair.
En ce qui concerne l'impression, là aussi, je nage. Comment importer uniquement les résultats de ma listbox dans excel?
Il faut comprendre que pour faire ma recherche multi-critères j'ai mis un temps que la décence m'interdit de divulguer ici pour des raisons évidentes de railleries ;-)
Je te remercie pour le canard gonflable...
jaketothebone
0
KC62 Messages postés 229 Date d'inscription mardi 3 juin 2003 Statut Membre Dernière intervention 20 juin 2007
3 mars 2004 à 11:56
bon ok reprenons notre petite résolution :

Pour la somme du nombre de couvert je te conseille un petit bout de code VBA ( pour l'évenement je te laisse choisir)
en gros sa donnera

For i = 1 To List1.ListCount
List1.Index (numcolCouvert)
Som = Som + List1.Text
Next i

Javoue ne pas être sur jutilise jamais de listbox

Perso j'utiliserais une MSFlexgrid ou une Grid sa serait plus simple a manier

L'avantage du code VBA c'est qu'il ne prendra pas en compte si le champ est numérique ou pas. en effet une fois les données dans ton tableau il te suffiré de lé récupérer ( MaVar = MSflexgrid.text ) avec MaVar as integer
aprés tu fais une somme, tous sa dans une boucle est laffaire est dans le sac

Pour imprimer ben meme principe en fait il faut recopier valeur par valeur dans chaque cellule avec un boucle qui gere les colonnes et une autre les lignes.

Pour ouvrir Excel ilte faudra la référence Microsof Excel 9.0 library

et ce tit code :
Set xlApp = New Excel.Application
Set xlBook = xlApp.Workbooks.Add
Set xlSheet = xlBook.ActiveSheet

Screen.ActiveForm.MousePointer = vbHourglass

For i = 0 To Msfour.Rows - 1
    For j = 0 To Msfour.Cols - 1
        xlSheet.Cells(i + 1, j + 1) = Msfour.TextMatrix(i, j)
    Next
Next
xlApp.Visible = True

Screen.ActiveForm.MousePointer = vbNormal
 
Set xlApp = Nothing
Set xlBook = Nothing
Set xlSheet = Nothing


Et déclaré bien sur ces variables ( Dans un module C préférable ) :

Global xlApp As Excel.Application
Global xlBook As Excel.Workbook
Global xlSheet As Excel.Worksheet


Voila jespere avoir bien saisi ton probleme, mais je reste sur mon conseille change ta listBox avec un tableau Type MSFlexGrid ....

KC62

On a pas toutes les solutions de tous les probleme mais chaque probleme à ses solutions ...
0
jaketothebone Messages postés 3 Date d'inscription mardi 20 janvier 2004 Statut Membre Dernière intervention 4 mars 2004
4 mars 2004 à 08:53
Salut,
Je te remercie vraiment de ton aide, a priori ça devrait fonctionner, j'ai encore quelques modifs à faire pour que le code corresponde à ma procédure, mais c'est super.
Par contre, je n'ai pas trouvé d'infos complémentaires sur les MsFlexGrid.
Comment je peux remplacer ma listbox par un tableau sans avoir à modifier tout mon code (qui commence à être vachement long pour moi, qui ne suis qu'un tout petit débutant en VB).
Au fait, n'existe-t-il pas une sorte de bible Access-VB où je pourrais taper des infos?
En tout cas, tu ne m'as pas fourni un canard gonflable mais un canot de sauvetage...:-)
@+
jaketothebone
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
KC62 Messages postés 229 Date d'inscription mardi 3 juin 2003 Statut Membre Dernière intervention 20 juin 2007
4 mars 2004 à 16:15
re :

Joli le coup de canot de sauvetage !

La MSFlexgrid je gere trés simplement avec un .row pour les ligne un .col pour les colonnes et un .text pour mettre ou prendre la valeur selectionner.

Le truc a ce dire lorsque l'on veut gerer une MSFLEXGRID c'est que avant le .text il faut selectionner la cellule voulu.
Le reste est de la logique.
par exemple le code peut donner sa si on image qu'il y a x colonne et x ligne et que l'on veut vider toutes les cellules...

For i = 1 to msflexgrid.cols
msflexgrid.col = i
For j = 1 to msflexgrid.rows
msflexgrid.row = j
msflexgrid.text = ""
next j
next i

voila C un peit exemple bidon mais qui peut te donner un vague idée.

Pour ton code je C pas comment il est fait donc je C pas comment le changer ...

KC62

On a pas toutes les solutions de tous les probleme mais chaque probleme à ses solutions ...
0
Rejoignez-nous