ACCESS Fonction VBA
Fermé
ChBro
Messages postés
17
Date d'inscription
mardi 22 juin 2004
Statut
Membre
Dernière intervention
24 août 2006
-
25 oct. 2005 à 20:19
ChBro Messages postés 17 Date d'inscription mardi 22 juin 2004 Statut Membre Dernière intervention 24 août 2006 - 30 oct. 2005 à 11:06
ChBro Messages postés 17 Date d'inscription mardi 22 juin 2004 Statut Membre Dernière intervention 24 août 2006 - 30 oct. 2005 à 11:06
A partir d'une requête SQL ordonné sur un champ défini, je désire , à partir d'une fonction, attribué un N° d'ordre pour chacun des enregistrements. Cela fonctionne mais....sur une jambe.
Exemple: La requête me donne pour réponse dans un champ JEAN , ARTHUR, puis PHILIPPE .... dans l'autre champ le N° d'ordre à attribuer . La fonction balaie tous les records (il y en a 200000) et vient incrémenter de 1 l'autre champs de la requête.
Le problème est que la fonction omet certaines lignes d'enregistrement sans aucune raison apparente et de manière aléatoire. Curieux ???
Le problème vient -il du fait que je travaille sur base d'une requête et non d'une table ?
Merci d'avance pour une réponse éventuelle.
Exemple: La requête me donne pour réponse dans un champ JEAN , ARTHUR, puis PHILIPPE .... dans l'autre champ le N° d'ordre à attribuer . La fonction balaie tous les records (il y en a 200000) et vient incrémenter de 1 l'autre champs de la requête.
Le problème est que la fonction omet certaines lignes d'enregistrement sans aucune raison apparente et de manière aléatoire. Curieux ???
Le problème vient -il du fait que je travaille sur base d'une requête et non d'une table ?
Merci d'avance pour une réponse éventuelle.
A voir également:
- ACCESS Fonction VBA
- Fonction si et - Guide
- Fonction moyenne excel - Guide
- Fonction filtre excel n'existe pas - Forum Excel
- Access appdata - Guide
- Excel remplir automatiquement une cellule en fonction d'une autre ✓ - Forum Excel
5 réponses
blux
Messages postés
26776
Date d'inscription
dimanche 26 août 2001
Statut
Modérateur
Dernière intervention
11 avril 2025
3 334
26 oct. 2005 à 08:48
26 oct. 2005 à 08:48
Salut,
dans access (comme dans beaucoup de SGBD) les données renvoyées par des tables, requêtes (voire snapshots) sont traitées de la même façon -> le problème ne vient pas de là...
Peux-tu nous éclairer sur ta fonction ?
On ne sait pas ce qu'elle fait, comment tu l'appelles...
Bref, tous les renseignements possibles...
dans access (comme dans beaucoup de SGBD) les données renvoyées par des tables, requêtes (voire snapshots) sont traitées de la même façon -> le problème ne vient pas de là...
Peux-tu nous éclairer sur ta fonction ?
On ne sait pas ce qu'elle fait, comment tu l'appelles...
Bref, tous les renseignements possibles...
WhiteFang
Messages postés
2063
Date d'inscription
dimanche 1 septembre 2002
Statut
Membre
Dernière intervention
15 février 2008
204
27 oct. 2005 à 14:39
27 oct. 2005 à 14:39
;-)
Moi, j'aurais écrit ça comme ça :
Mais je me rends compte qu'il y a un truc bizarre : Pourquoi 2 boucles ?
Moi, j'aurais écrit ça comme ça :
Function Test() Dim Bds, Rdst Dim Val, X On Error GoTo Test_Exit SQEL = "SELECT Table.Champ1, Table.Champ2, Table.Champ3, Table.Champ4, Table.Champ5 FROM Table " & _ "ORDER BY Table.Champ1, Table.Champ2 DESC , Table.Champ3, Table.Champ4;" Set Bds = CurrentDb Set Rdst = Bds.OpenRecordset(SQEL) Rdst.Movelast Rdst.MoveFirst For X = 1 To Rdst.RecordCount Val = Rdst("Champ1") & Rdst("Champ4") i = 1 While Rdst("Champ1") & Rdst("Champ4") = Val Rdst.Edit Rdst("Champ5") = i Rdst.Update i = i + 1 Rdst.MoveNext Wend Next Space 1048576 Rdst.Close Set Bds = Nothing Test_Exit: Exit Function
Mais je me rends compte qu'il y a un truc bizarre : Pourquoi 2 boucles ?
blux
Messages postés
26776
Date d'inscription
dimanche 26 août 2001
Statut
Modérateur
Dernière intervention
11 avril 2025
3 334
27 oct. 2005 à 16:03
27 oct. 2005 à 16:03
Tant qu'ils s'appellent JEAN DUPONT on incrémente le compteur de doublon :
JEAN DUPONT 1
JEAN DUPONT 2
JEAN DUPONT 3
...
Mais je n'arrive pas à comprendre pourquoi il perd des clients en route, et de manière aléatoire...
JEAN DUPONT 1
JEAN DUPONT 2
JEAN DUPONT 3
...
Mais je n'arrive pas à comprendre pourquoi il perd des clients en route, et de manière aléatoire...
WhiteFang
Messages postés
2063
Date d'inscription
dimanche 1 septembre 2002
Statut
Membre
Dernière intervention
15 février 2008
204
>
blux
Messages postés
26776
Date d'inscription
dimanche 26 août 2001
Statut
Modérateur
Dernière intervention
11 avril 2025
27 oct. 2005 à 16:12
27 oct. 2005 à 16:12
;-) Bin moi, je ne comprends pas pourquoi une fonction, ou alors, j'aurais uniquement passé le While en fonction puisque que le MoveNext est dedans, mais bon, j'attends des éclaircissements...
;-)
;-)
ChBro
Messages postés
17
Date d'inscription
mardi 22 juin 2004
Statut
Membre
Dernière intervention
24 août 2006
>
WhiteFang
Messages postés
2063
Date d'inscription
dimanche 1 septembre 2002
Statut
Membre
Dernière intervention
15 février 2008
30 oct. 2005 à 11:06
30 oct. 2005 à 11:06
En tous cas, merci à tous pour votre aide
Ci dessous vous trouverez un exemple
Table de départ:
A B C D Sequence
------------------------------
A 1 450 z ?
A 2 400 a
A 1 100 a
A 1 200 a
B 2 100 z
B 2 300 a
B 3 200 z
B 3 500 a
C 1 200 a
B 2 200 a
A 2 100 z
C 1 100 z
Résultat à obtenir
A B D C Séquence
------------------------------
A 1 z 450 1
A 1 a 100 2
A 1 a 200 3
A 2 z 100 1
A 2 a 400 2
B 2 z 100 1
B 2 a 200 2
B 2 a 300 3
B 3 z 200 1
B 3 a 500 2
C 1 z 100 1
C 1 a 200 2
Bien à vous
Ci dessous vous trouverez un exemple
Table de départ:
A B C D Sequence
------------------------------
A 1 450 z ?
A 2 400 a
A 1 100 a
A 1 200 a
B 2 100 z
B 2 300 a
B 3 200 z
B 3 500 a
C 1 200 a
B 2 200 a
A 2 100 z
C 1 100 z
Résultat à obtenir
A B D C Séquence
------------------------------
A 1 z 450 1
A 1 a 100 2
A 1 a 200 3
A 2 z 100 1
A 2 a 400 2
B 2 z 100 1
B 2 a 200 2
B 2 a 300 3
B 3 z 200 1
B 3 a 500 2
C 1 z 100 1
C 1 a 200 2
Bien à vous
WhiteFang
Messages postés
2063
Date d'inscription
dimanche 1 septembre 2002
Statut
Membre
Dernière intervention
15 février 2008
204
27 oct. 2005 à 14:41
27 oct. 2005 à 14:41
;-)
A la réflexion, je verrais bien un petit IF à la place du While.... Ca me semble plus logique... ?
A la réflexion, je verrais bien un petit IF à la place du While.... Ca me semble plus logique... ?
random
Messages postés
1612
Date d'inscription
vendredi 26 novembre 2004
Statut
Membre
Dernière intervention
30 mars 2006
155
27 oct. 2005 à 17:40
27 oct. 2005 à 17:40
le truc.movenext semble devoir se loger entre les deux wend
et non audessus du premier
tu aurais pu faire
index=0
nom=""
while not truc.eof
if truc![nom]=nom
then index=index+1
truc![index]=index
else
index=0
nom=truc![nom]
end if
truc.movenext
et non audessus du premier
tu aurais pu faire
index=0
nom=""
while not truc.eof
if truc![nom]=nom
then index=index+1
truc![index]=index
else
index=0
nom=truc![nom]
end if
truc.movenext
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
ChBro
Messages postés
17
Date d'inscription
mardi 22 juin 2004
Statut
Membre
Dernière intervention
24 août 2006
28 oct. 2005 à 09:40
28 oct. 2005 à 09:40
En tous cas, merci à tous pour votre aide
Ci dessous vous trouverez un exemple
Table de départ:
A B C D Sequence
------------------------------
A 1 450 z ?
A 2 400 a
A 1 100 a
A 1 200 a
B 2 100 z
B 2 300 a
B 3 200 z
B 3 500 a
C 1 200 a
B 2 200 a
A 2 100 z
C 1 100 z
Résultat à obtenir
A B D C Séquence
------------------------------
A 1 z 450 1
A 1 a 100 2
A 1 a 200 3
A 2 z 100 1
A 2 a 400 2
B 2 z 100 1
B 2 a 200 2
B 2 a 300 3
B 3 z 200 1
B 3 a 500 2
C 1 z 100 1
C 1 a 200 2
Bien à vous
Ci dessous vous trouverez un exemple
Table de départ:
A B C D Sequence
------------------------------
A 1 450 z ?
A 2 400 a
A 1 100 a
A 1 200 a
B 2 100 z
B 2 300 a
B 3 200 z
B 3 500 a
C 1 200 a
B 2 200 a
A 2 100 z
C 1 100 z
Résultat à obtenir
A B D C Séquence
------------------------------
A 1 z 450 1
A 1 a 100 2
A 1 a 200 3
A 2 z 100 1
A 2 a 400 2
B 2 z 100 1
B 2 a 200 2
B 2 a 300 3
B 3 z 200 1
B 3 a 500 2
C 1 z 100 1
C 1 a 200 2
Bien à vous
27 oct. 2005 à 08:54
Function Test()
Dim Bds As DAO.Database
Dim rdst As DAO.Recordset
Dim val As String
On Error GoTo Champ5_error
SQEL = "SELECT Table.Champ1, Table.Champ2, Table.Champ3, Table.Champ4, Table.Champ5 FROM Table " & _
"ORDER BY Table.Champ1, Table.Champ2 DESC , Table.Champ3, Table.Champ4;"
Set Bds = CurrentDb
Set rdst = Bds.OpenRecordset(SQEL)
rdst.MoveFirst
While Not (rdst.EOF)
val = rdst.Fields("Champ1").Value & rdst.Fields("Champ4").Value
i = 1
While rdst.Fields("Champ1").Value & rdst.Fields("Champ4").Value = val
With rdst
.Edit
![Champ5] = i
.Update
End With
i = i + 1
rdst.MoveNext
If rdst.EOF = True Then Exit Function
Wend
Wend
Space 1048576
rdst.Close
Set Bds = Nothing
Test_Exit:
Exit Function
Encore merci...