Précédent   Forum des professionnels en informatique > Logiciels > Microsoft Office > Access > Contribuez
Contribuez Access : Vos contributions. Postez ici vos codes sources, conseils, astuces et autres propositions. Ce forum n'est pas un forum technique mais destiné aux contributions pour www.developpez.com
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 12/02/2006, 13h44   #1
Nouveau Membre du Club
 
Inscription : décembre 2005
Messages : 58
Détails du profil
Informations forums :
Inscription : décembre 2005
Messages : 58
Points : 32
Points : 32
Par défaut Tri de données dans un tableau

je ne connait pas trop les fonction pour faire un tableau

J'ai 2 tables TABLE1 et TABLE2 avec 1 champs C1

j'ouvre mon recorset sur la table TABLE1 et je recupere tout les champs C1 dans un tableau et la je veux trier les valeur dans mon tableau pour les ecrire dans une autre table TABLE2

Code :
1
2
3
4
5
6
7
8
9
10
11
12
Set dB = DBEngine(0)(0)
Set rs = dB.OpenRecordset("SELECT blablabla...")
rs.MoveFirst
While Not rs.EOF
 
    If rs!C1 = DVALEUR1 Then
    ' La je fait un tableau (ne sait pas faire..)
 
End If
    rs.MoveNext
Wend
Rs.close
'puis avec les valeur de mon tableau trie je les balance dans le table2....
GESCOM2000 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 12/02/2006, 14h04   #2
Responsable
Office & Excel

 
Avatar de Pierre Fauconnier
 
Homme Pierre Fauconnier
Formateur et développeur informatique indépendant
Inscription : novembre 2003
Messages : 8 195
Détails du profil
Informations personnelles :
Nom : Homme Pierre Fauconnier
Âge : 45
Localisation : Belgique

Informations professionnelles :
Activité : Formateur et développeur informatique indépendant
Secteur : Enseignement

Informations forums :
Inscription : novembre 2003
Messages : 8 195
Points : 14 410
Points : 14 410
Envoyer un message via Skype™ à Pierre Fauconnier
Bonjour

Le plus simple est de trier dans ta requête

Code :
select c1 from MaTable ORDER BY c1
Si tu passes par le tableau pour uniquement retrier, oublies ton tableau et travailles directement avec les recordsets.

Ok?

Pierre Fauconnier
Pierre Fauconnier est actuellement connecté   Envoyer un message privé Réponse avec citation 00
Vieux 12/02/2006, 14h37   #3
Rédacteur

 
Avatar de Tofalu
 
Christophe Warin
Inscription : octobre 2004
Messages : 8 635
Détails du profil
Informations personnelles :
Nom : Christophe Warin
Âge : 28

Informations forums :
Inscription : octobre 2004
Messages : 8 635
Points : 13 718
Points : 13 718
Le mieux, vraiment le mieux de par sa performance :

Etape1 : Créer une requête comme indiqué avec la clause ORDER BY. Nommer cette requete par exemple R01

Etape2 : Dans le code VBA, instancier un objet QueryDef correspond à la requête

Code :
1
2
3
4
Dim oDb as DAO.Database
Dim oQdf as DAO.QueryDef
Set oDb=CurrentDb
Set oQdf=oDb.QueryDefs("R01")
Etape3 : Ouvrir un recordset sur l'objet QueryDef

Code :
1
2
Dim oRst as DAO.RecordSet
Set oRst=oQdf.OpenRecordSet
Etape4 : Utiliser la methode GetRows pour récuperer le tableau correspondant. Cf le tutoriel http://warin.developpez.com/access/dao/?page=partie_5#L5.5

De cette manière tu auras la code le plus performant possible.

Deux questions surviennent alors

Pourquoi utiliser un objet QueryDef et non pas directement du SQL dans le VBA ?

Tout simplement parce que les objets QueryDef profite de l'effet Rushmore, et tirent un maximum parti des champs indexés (donc gain de temps sur les tris)

Pourquoi la méthode GetRows ?

Parce qu'elle est faite pour cela et là encore, elle est optimisée.
Tofalu est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 12/02/2006, 17h23   #4
Nouveau Membre du Club
 
Inscription : décembre 2005
Messages : 58
Détails du profil
Informations forums :
Inscription : décembre 2005
Messages : 58
Points : 32
Points : 32
Merci Tofalu,
Bon j'ai lu et pas tout pigé le GETROWS (y as des jour comme ça...)

Donc j'ai fait une bidouille à 2 balles (c'est lourd mais ça marche...)

Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
Dim dB As Database
Dim rs As Recordset
Dim TABLEAU(1 To 10) As Variant
Dim COMPTE As Variant
Dim I As Integer
Dim II As Integer
Dim III As Integer
 
I = 0
II = 0
 
Set dB = DBEngine(0)(0)
Set rs = dB.OpenRecordset("SELECT TABLE_1.VALEUR_1, TABLE_1.VALEUR_2 FROM TABLE_1 ORDER BY TABLE_1.VALEUR_1;")
 
rs.MoveFirst
 
While Not rs.EOF
    I = I + 1
 
    If rs!VALEUR_1 = ME.LST_1 Then
    II = II + 1
    TABLEAU(I) = rs!VALEUR2
    End If
 
    rs.MoveNext
Wend
rs.Close
 
III = 0
II = II + 1
COMPTE = 0
 
For III = II To I
	COMPTE = COMPTE + TABLEAU(III)
Next
 
II = II - 1
ME.TXT_1.Caption = Round(COMPTE / II, 2)
J'aimerais quand même pas mourir bête, et comprendre la fonction GETROWS avec ma bidouille.....
GESCOM2000 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 12/02/2006, 17h58   #5
Rédacteur

 
Avatar de Tofalu
 
Christophe Warin
Inscription : octobre 2004
Messages : 8 635
Détails du profil
Informations personnelles :
Nom : Christophe Warin
Âge : 28

Informations forums :
Inscription : octobre 2004
Messages : 8 635
Points : 13 718
Points : 13 718
Attends, j'ai détaillé completement la marche à suivre notamment :

CurrentDb
QueryDef

Tu n'en tiens pas du tout compte. Je me demande vraiment à quoi cela serve qu'on passe notre temps à la rédaction de ressources

Quant aux déclarations des variables et autres ... c'est le genre de code qui est immaintenable...
Tofalu est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 12/02/2006, 18h14   #6
Nouveau Membre du Club
 
Inscription : décembre 2005
Messages : 58
Détails du profil
Informations forums :
Inscription : décembre 2005
Messages : 58
Points : 32
Points : 32
désoler, tu as raison j'ai pas tout lu et c'est vraiment bien expliquer dans
Cf le tutoriel....
Un peu fatiguer ce week-end
Merci
GESCOM2000 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 06/12/2006, 15h55   #7
Candidat au titre de Membre du Club
 
Inscription : mai 2005
Messages : 124
Détails du profil
Informations forums :
Inscription : mai 2005
Messages : 124
Points : 10
Points : 10
Moi j'ai suivi tes conseils et ca marche nickel

merci tofalu
en plus c'est super bien expliqué
branqueira est actuellement 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 19h42.


 
 
 
 
Partenaires

Hébergement Web