[]
Nombre de membres 1 membre
Connectés : ( personne )
 

La Charte du Forum - La Charte du Forum

Forum - Forum
Problèmes Access des débutants - Problèmes Access des débutants


clos par 3Stone le 22/08/2013 : 11:23  Sujet n° 679  Recherche multicritères

le 29/05/2013 : 13:06
par med_rab

Anonyme

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
 sujet clos  Haut

[]   

Réponse n° 1
--------
le 29/05/2013 : 13:43
par 3Stone

3Stone

Administrateur

Salut,
 
Citation :

rempli avec par exemple : "Matricule="& monchamp1 and "mois=" & monchamp2 )

 
Il faut écrire :

"Matricule=" & monchamp1 & " AND mois=" & monchamp2

donc, le "AND" doit faire partie de la phrase...

Cordialement,
Pierre(3stone)
  clos par 3Stone le 22/08/2013 : 11:23  Haut
Réponse n° 2
--------
le 29/05/2013 : 14:02
par med_rab

Anonyme

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
  clos par 3Stone le 22/08/2013 : 11:23  Haut
Réponse n° 3
--------
le 29/05/2013 : 21:12
par 3Stone

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 d

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)

  clos par 3Stone le 22/08/2013 : 11:23  Haut
Réponse n° 4
--------
le 30/05/2013 : 01:30
par med_rab

Anonyme

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
  clos par 3Stone le 22/08/2013 : 11:23  Haut
Réponse n° 5
--------
le 30/05/2013 : 06:25
par 3Stone

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)
Ecrire à 3Stone   clos par 3Stone le 22/08/2013 : 11:23  Haut
Réponse n° 6
--------
le 30/05/2013 : 10:49
par med_rab

Anonyme

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
  clos par 3Stone le 22/08/2013 : 11:23  Haut
Réponse n° 7
--------
le 30/05/2013 : 17:55
par 3Stone

3Stone

Administrateur

Bonjour,
 
Citation :

et à l'envoi on me dit stop Anti spam

 
Désolé pour cet inconvénient... c'est une fonction pour combattre le spam (asiatique) qui ces derniers temps devient un plaie universelle !

Si tu mets beaucoup de temps à écrire ton message, pense à le sélectionner, puis Ctrl + C pour faire un copié. Donc, Ctrl+A et un Ctrl+C te mets à l'abri d'un problème d'envoi du message.
Si cela ne passe pas l'anti-spam, il te suffit alors recoller par un Ctrl + V

Cordialement,
Pierre(3stone)
  clos par 3Stone le 22/08/2013 : 11:23  Haut
Réponse n° 8
--------
le 31/05/2013 : 02:46
par med_rab

Anonyme

visiteur
merci pierre du conseil, je tacherai de le faire la prochaine fois. 
cordialement
Mohamed Rabie
  clos par 3Stone le 22/08/2013 : 11:23  Haut
actif sujet actif   clos sujet clos   Important! Important!   Nouveau Nouveau message   -   Rectifier Rectifier message   Clôturer Clôturer sujet   Remonter Remonter
[]
Catégories de discussion  Forum 



Haut