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 01/09/2011, 08h59   #1
Membre à l'essai
 
Inscription : février 2011
Messages : 76
Détails du profil
Informations forums :
Inscription : février 2011
Messages : 76
Points : 20
Points : 20
Par défaut comparer deux lignes d'un recordset

bonjour,
je voudrais comparer deux lignes d'un recordset afin d'ajouter les valeurs communes, mais les lignes en question ne sont pas cote a cote.
J'ai essayé un truc, mais il m affiche tout mon record set sans faire l'ajout, alors qu'il y a plusieurs plusieurs lignes identiques.
voila ce que j ai fait pour l'instant:

Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
leslignes = "select c.RefProd, MPF.NomMP, MP.QteDispo, QtekgNecessaire from Ligne_Commande as c, "
    leslignes = leslignes & "PRODUIT as p, MPF, MATIERE_PREMIERE as MP where c.RefProd=p.RefProd and "
    leslignes = leslignes & "p.NumFormule=MPF.NumFormule and MPF.NomMP=MP.NomMP and RefFou='MPFT' "
    leslignes = leslignes & "and NumComm=" & Me.NumComm & ";"
 
    Set rsleslignes = CurrentDb.OpenRecordset(leslignes)
    rsleslignes.MoveFirst
    Do Until rsleslignes.EOF
        lignesnom = rsleslignes.Fields("NomMP").Value
        lignesnec = rsleslignes.Fields("QtekgNecessaire").Value
        If (lignesnom = lignesnom) Then
            lignesnec = lignesnec + lignesnec
            MsgBox (lignesnom & ", " & lignesnec)
        End If
 
        rsleslignes.MoveNext
    Loop
je pense que c est dans mon if.

Merci de votre aide
xargin est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 01/09/2011, 09h48   #2
Membre confirmé
 
Avatar de lelensois16
 
Homme Romain M.
Étudiant
Inscription : avril 2009
Messages : 167
Détails du profil
Informations personnelles :
Nom : Homme Romain M.
Localisation : France, Nord (Nord Pas de Calais)

Informations professionnelles :
Activité : Étudiant
Secteur : Conseil

Informations forums :
Inscription : avril 2009
Messages : 167
Points : 204
Points : 204
Bonjour,

Est ce que j'ai bien compris :
Vous voulez faire la somme des quantités pour chaque produit ?

Pourquoi ne pas faire une requête SUM accompagné de quelques group by ?

Sinon il vaudrait mieux tester 2 recordsets différents issus d'une même requête car là on teste toujours la meme variable

Excuse moi si j'ai pas compris...

Cdt
lelensois16 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 01/09/2011, 09h48   #3
Rédacteur/Modérateur
 
Avatar de Dolphy35
 
Homme Morgan BILLY
Technicien de Production
Inscription : octobre 2004
Messages : 4 103
Détails du profil
Informations personnelles :
Nom : Homme Morgan BILLY
Âge : 33
Localisation : France, Ille et Vilaine (Bretagne)

Informations professionnelles :
Activité : Technicien de Production
Secteur : Industrie

Informations forums :
Inscription : octobre 2004
Messages : 4 103
Points : 8 728
Points : 8 728
Bonjour,

Je ne comprends pas cette ligne
Code :
If (lignesnom = lignesnom) Then
en gros ton test est Si 1=1 Alors.

ton test est toujours vrai car tu test la même variable

Dolphy
__________________
Personnaliser la vue Backstage d'Access 2010
Découvrez avec nous Office 2010
Je ne réponds pas aux questions techniques par MP
Dolphy35 est déconnecté   Envoyer un message privé Réponse avec citation 10
Vieux 01/09/2011, 09h56   #4
Membre actif
 
Homme Lionel Garnier
Consultant informatique
Inscription : octobre 2007
Messages : 134
Détails du profil
Informations personnelles :
Nom : Homme Lionel Garnier
Localisation : France, Somme (Picardie)

Informations professionnelles :
Activité : Consultant informatique
Secteur : Industrie

Informations forums :
Inscription : octobre 2007
Messages : 134
Points : 179
Points : 179
Aussi, la base de ton recordset est loin d'être optimisée!
Elle est en effet composé d'une requête basée sur plusieurs tables sans joint entre elles...
Ca peut marcher mais cela consommera énormément plus de ressources (car toutes le combinaisons possibles seront testées par Access.

Bien que ce ne soit pas la cause de ton problème, je te propose donc dans un premier temps de refaire ta requête en utilisant des joints.

Par la suite ca nous permettra de mieux identifier ton problème!
yonnel est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 01/09/2011, 10h02   #5
Membre actif
 
Homme Lionel Garnier
Consultant informatique
Inscription : octobre 2007
Messages : 134
Détails du profil
Informations personnelles :
Nom : Homme Lionel Garnier
Localisation : France, Somme (Picardie)

Informations professionnelles :
Activité : Consultant informatique
Secteur : Industrie

Informations forums :
Inscription : octobre 2007
Messages : 134
Points : 179
Points : 179
Car devrait donner quelque chose du genre:

Code :
1
2
3
4
5
6
7
8
"SELECT c.RefProd, MPF.NomMP, MP.QteDispo, QtekgNecessaire
 
FROM ((Ligne_Commande as c
INNER JOIN PRODUIT as p ON c.RefProd=p.RefProd) 
INNER JOIN MPF ON p.NumFormule=MPF.NumFormule)
INNER JOIN MATIERE_PREMIERE as MP ON MPF.NomMP=MP.NomMP
 
WHERE RefFou='MPFT' and NumComm=" & Me.NumComm ";"
Ton code s’exécutera plus vite (sinon le temps est rallongé de façon exponentielle!)
yonnel est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 01/09/2011, 10h07   #6
Membre actif
 
Homme Lionel Garnier
Consultant informatique
Inscription : octobre 2007
Messages : 134
Détails du profil
Informations personnelles :
Nom : Homme Lionel Garnier
Localisation : France, Somme (Picardie)

Informations professionnelles :
Activité : Consultant informatique
Secteur : Industrie

Informations forums :
Inscription : octobre 2007
Messages : 134
Points : 179
Points : 179
C'est re-moi!

Pour ce que tu veux faire, si j'ai bien compris, je pense effectivement comme lelensois16 qu'il faut faire une autre requête qui fait la somme.

Le code de la requête serait donc simplement:

Code :
1
2
3
4
5
6
7
8
9
10
"SELECT MPF.NomMP, SUM(QtekgNecessaire) AS QtekgTotalNecessaire
 
FROM ((Ligne_Commande as c
INNER JOIN PRODUIT as p ON c.RefProd=p.RefProd) 
INNER JOIN MPF ON p.NumFormule=MPF.NumFormule)
INNER JOIN MATIERE_PREMIERE as MP ON MPF.NomMP=MP.NomMP
 
WHERE RefFou='MPFT' and NumComm=" & Me.NumComm ";"
 
GROUP BY MPF.NomMP;
Ensuite, libre à toi de mettre le résultat dans un nouvelle table ou de mettre à jour une autre table...
yonnel est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 01/09/2011, 10h43   #7
Membre à l'essai
 
Inscription : février 2011
Messages : 76
Détails du profil
Informations forums :
Inscription : février 2011
Messages : 76
Points : 20
Points : 20
merci pour vos réponses qui me donnent un début de solution.
xargin est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 18h20.


 
 
 
 
Partenaires

Hébergement Web