ACCESS Fonction VBA
ChBro
Messages postés
17
Date d'inscription
Statut
Membre
Dernière intervention
-
ChBro Messages postés 17 Date d'inscription Statut Membre Dernière intervention -
ChBro Messages postés 17 Date d'inscription Statut Membre Dernière intervention -
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 miroir - Guide
- Incompatibilité de type vba ✓ - Forum Programmation
- Fonction moyenne excel - Guide
- Acer quick access - Forum logiciel systeme
5 réponses
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...
;-)
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 ?
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
;-)
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... ?
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
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
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...