1 membre
Connectés : ( personne )
- La Charte du Forum - Forum - Problèmes Access des débutants
Sujet n° 679 |
Recherche multicritères |
le 29/05/2013 : 13:06 par med_rab
visiteur |
Salut, Je voudrais faire une recherche dans recodset avec la commande Findfirst (critère), avec 2 champs numérique qui forment en principe la clé primaire de ma table du genre : rs.findfirst critere (que j'aurai prealablement rempli avec par exemple : "Matricule="& monchamp1 and "mois=" & monchamp2 ) j'ai une erreur merci |
|
|
Réponse n° 2 -------- le 29/05/2013 : 14:02 par med_rab
visiteur |
Merci pour votre réponse, j'ai plus de bug sur cette ligne mais j'ai toujours le problème de recherche, voila je vous soumet mon code pour y jeter un œil d'expert:(erreur d’exécution 3251) Sub Cal_cum() Dim req As DAO.QueryDefDim Rst As DAO.RecordsetDim rs As Recordset, mmois As IntegerDim mCum As Double, mmat As Integer, CumMois(12) As DoubleDim stLinkCriteria As String' exemple pour le mois 1mmois = 1 Set Rst = CurrentDb.OpenRecordset("Table Detail", DB_OPEN_DYNASET) Set rs = CurrentDb.OpenRecordset("Table Cumul ", DB_OPEN_TABLE) While Not Rst.EOF mmat = Rst![Matricule] CumMois(1) = Rst![Janvier] CumMois(2) = Rst![Fevrier] CumMois(3) = Rst![Mars] CumMois(4) = Rst![Avril] CumMois(5) = Rst![Mai] CumMois(6) = Rst![Juin] CumMois(7) = Rst![Juillet] CumMois(8) = Rst![Aout] CumMois(9) = Rst![Septembre] CumMois(10) = Rst![Octobre] CumMois(11) = Rst![Novembre] CumMois(12) = Rst![Decembre] For m = 1 To mmois mCum = mCum + CumMois(m) Next m stLinkCriteria = "Matricule =" & mmat & " And Mois =" & mmois ' la ou j'ai l'eereur rs.FindFirst stLinkCriteria If rs.NoMatch = True Then rs.AddNew rs![Matricule] = mmat rs![Mois] = mmois rs![Sal_Net] = CumMois(mmois) rs![Sal_Annuel_Cum] = mCum else ' 1 traitement que j'ai pas encore fait End If rs.Update Rst.MoveNext
Wend
rs.Close Rst.Close Set rs = NothingSet Rst = Nothing End Sub |
|
|
Réponse n° 3 -------- le 29/05/2013 : 21:12 par 3Stone
Administrateur
|
Bonjour,
En admettant que les noms de tables et de champs soient correct, il faut aussi que les mmat et mmois soient des zones de texte sur un formulaire ouvert!
Ou alors tu transmet ces valeurs par une autre manière... selon ce que tu essaies de faire.
Mais, il y a un autre (gros) problème dans ta construction
Car ta base n'est absolument pas normalisée ! Tu ne dois pas avoir des champs "mois" de cette manière dans une table. Il n'est pas normal de faire des additions et placer ces totaux dans une autre table.
Cela montre que tes problèmes viennent d'abord de la conception de la base et de ses tables. Il faut, entre autre, retenir que des valeurs qui doivent être additionnées doivent absolument se trouver dans une table de manière verticale et non de façon horizontale. Cela amène qu'il faut un enregistrement par mois, ce qui permet de faire les additions de manière simple dans une requête - sans devoir sauver quoi que ce soit.
Pour comprendre comment éviter ces erreurs de débutant, tu devrait commencer à lire et à comprendre ce qui est expliqué dans cette page et suivante. Cordialement, Pierre(3stone)
|
|
|
Réponse n° 4 -------- le 30/05/2013 : 01:30 par med_rab
visiteur |
Bonsoir Monsieur Pierre,je vous remercie pour l’intérêt que avez voulu porter à mon problème, c'est très gentil à vous, cependant, je tien à vous informer que ma première table contient les salaires du personnel, chaque enregistrement contient le n° de matricule, le salaire net des mois de janvier à décembre que je prépare dans un autre traitement sans problème, ma seconde table doit en principe à la fin de l'année contenir pour chaque matricule 12 enregistrements (janvier à décembre) pour chaque mois j'ai le salaire mensuel net de la personne, le salaire annuel (c.à.d) ((si par exemple je suis en mois de mars ce cumul contiendra le salaire net de janvier à mars)), je doit calculer une contribution lorsque le salaire net atteint un certain chiffre j'ai un barème pour cela. je dois vous avouer que je ne suis pas débutant dans la programmation mais soit disant je me converti en vba. j’avoue aussi que j'ai beaucoup appris soit avec vous ou avec d'autres personnes, je vous en remercie infiniment. je reviendrai vers vous (expert en la matière) chaque fois je suis bloqué.merci encore |
|
|
Réponse n° 5 -------- le 30/05/2013 : 06:25 par 3Stone
Administrateur
|
Bonjour, Citation :ma première table contient les salaires du personnel, chaque enregistrement contient le n° de matricule, le salaire net des mois de janvier à décembre
Oui, ma c'est justement le problème... Ce que tu as fait, c'est d'imiter une feuille Excel avec des valeurs (les mois) rangé horizontalement dans la table.
Cette table devrait avoir les champs [NoMatricule], [NoMois], [Salaire], etc. Si la table contient les données de plusieurs années, il faut ajouter un champ année ou carrément un champ date.
Avec l'organisation ci-dessus, tu peux faire très simplement le total d'une personne avec comme filtre son matricule. Pour le total des salaires d'un mois précis de tout le personnel, il suffit d'un filtre sur un mois...
Comme dit dans mon message précédent, les données doivent être organisés de manière verticale. Lorsque tu dois faire des calculs de manière horizontale (donc entre les champs d'un même enregistrement), il y a généralement un problème de conception.
Cordialement, Pierre(3stone) |
|
|
Réponse n° 6 -------- le 30/05/2013 : 10:49 par med_rab
visiteur |
merci pierre,j'ai passé un quart d'heure à écrire un texte et à l'envoi on me dit stop Anti spam j'ai rien compris |
|
|
sujet actif
sujet clos
Important!
Nouveau message -
Rectifier message
Clôturer sujet
Remonter
|