Regrouper et compter des valeurs par paquet de 10 maximum avec reset.

3 réponses
Avatar
Baton .rouge
Bonjour

je ne sais pas si c'est faisable en sql access.
Au pire, je peux passer par un critère pour remplir les champs.

Ce dessous une liste de nombre que je dois classer et ce que j'ai du
mal à faire.

Le but étant de regrouper par paquet de 10 valeur maximum la colonne C
sachant que la première valeur sert de référence au compteur.
Si le premier nombre est 41, alors on ne poura pas dépasser 50 même
s'il y a des trous.

Pour corser le tout, quand la valeur de la colonne B change, C repart
à zéro. Si A change, c'est B et C qui repartent à zéro.

Cerise sur le gateau, mais ça c'est le plus facile, la nouvelle
colonne D indique combien de valeur il y a dans chaque paquet.

J'arrive plus ou moins (surtout moins bien que plus), seulement je
passe par un paquet de collones intermédiaire et avec des vraifaux en
pagaille et je trouve àa pas propre.


Merci de votre aide

Ce que je cherche à faire:
A B C D
1 2 067 10
1 2 077 10
1 2 087 5
1 2 098 2
1 3 024 1
1 3 064 3
1 3 157 1
1 6 050 2

2 2 064 2
2 2 072 5
2 2 082 9
2 3 000 5
2 3 066 6
2 6 050 2

3 2 064 2
3 2 078 10
3 2 088 10
3 2 098 5
3 3 000 6
3 3 066 9
3 3 076 2
3 3 114 4
3 6 050 1



A partir de :

A B C

1 2 067
1 2 068
1 2 069
1 2 070
1 2 071
1 2 072
1 2 073
1 2 074
1 2 075
1 2 076
1 2 077
1 2 078
1 2 079
1 2 080
1 2 081
1 2 082
1 2 083
1 2 084
1 2 085
1 2 086
1 2 087
1 2 088
1 2 089
1 2 090
1 2 091
1 2 098
1 2 099
1 3 024
1 3 064
1 3 065
1 3 066
1 3 157
1 6 050
1 6 051
2 2 064
2 2 065
2 2 072
2 2 074
2 2 075
2 2 076
2 2 077
2 2 082
2 2 083
2 2 084
2 2 085
2 2 086
2 2 087
2 2 088
2 2 089
2 2 090
2 3 000
2 3 001
2 3 002
2 3 003
2 3 004
2 3 066
2 3 067
2 3 068
2 3 069
2 3 070
2 3 071
2 6 050
2 6 051
3 2 064
3 2 065
3 2 078
3 2 079
3 2 080
3 2 081
3 2 082
3 2 083
3 2 084
3 2 085
3 2 086
3 2 087
3 2 088
3 2 089
3 2 090
3 2 091
3 2 092
3 2 093
3 2 094
3 2 095
3 2 096
3 2 097
3 2 098
3 2 099
3 2 100
3 2 101
3 2 102
3 3 000
3 3 001
3 3 002
3 3 003
3 3 004
3 3 005
3 3 006
3 3 066
3 3 067
3 3 068
3 3 069
3 3 070
3 3 072
3 3 073
3 3 074
3 3 075
3 3 076
3 3 077
3 3 114
3 3 115
3 3 116
3 3 117
3 6 050

Pour les courageux qui sont arrivé jusqu'ici : ;o))
En tout cas, je tiens à remercier ceux qui donnent du temps, car je
mets en pratique tous les jours ce que j'apprends grace à vous et je
le transmet à mes collègues.



--
Vous voulez un conseil ?
Ne faites jamais confiance à ceux qui vous donnent des conseils.

3 réponses

Avatar
db
Le 18/10/2013 18:34, Baton .rouge a écrit :
Bonjour

je ne sais pas si c'est faisable en sql access.
Au pire, je peux passer par un critère pour remplir les champs.

Ce dessous une liste de nombre que je dois classer et ce que j'ai du
mal à faire.

Le but étant de regrouper par paquet de 10 valeur maximum la colonne C
sachant que la première valeur sert de référence au compteur.
Si le premier nombre est 41, alors on ne poura pas dépasser 50 même
s'il y a des trous.

Pour corser le tout, quand la valeur de la colonne B change, C repart
à zéro. Si A change, c'est B et C qui repartent à zéro.

Cerise sur le gateau, mais ça c'est le plus facile, la nouvelle
colonne D indique combien de valeur il y a dans chaque paquet.

J'arrive plus ou moins (surtout moins bien que plus), seulement je
passe par un paquet de collones intermédiaire et avec des vraifaux en
pagaille et je trouve àa pas propre.




Avec des requêtes, ça me paraît compliqué, mais avec un module, ça
pourrait donner ça :

Sub baton()
Dim db As Database
Dim r As DAO.Recordset
Set db = CurrentDb
Set r = db.OpenRecordset("select a,b,c from baton order by a,b,c")
Dim a As String, b As String, c As String, cs As String

a = 0
b = 0
c = ""
While Not r.EOF
If (r!a <> a Or r!b <> b Or n = 10 Or Val(c) + 1 <> Val(r!c) Or (cs
= "041" And c = "050")) Then
If a <> 0 Then Debug.Print a, b, cs, n
a = r!a
b = r!b
cs = r!c
c = r!c
n = 1
Else
n = n + 1
c = r!c
End If
r.MoveNext
Wend
Debug.Print a, b, cs, n

Set r = Nothing
Set db = Nothing
End Sub




db
Avatar
Baton .rouge
On Fri, 18 Oct 2013 20:06:20 +0200, db
wrote:

Le 18/10/2013 18:34, Baton .rouge a écrit :
Bonjour

je ne sais pas si c'est faisable en sql access.
Au pire, je peux passer par un critère pour remplir les champs.

Ce dessous une liste de nombre que je dois classer et ce que j'ai du
mal à faire.

Le but étant de regrouper par paquet de 10 valeur maximum la colonne C
sachant que la première valeur sert de référence au compteur.
Si le premier nombre est 41, alors on ne poura pas dépasser 50 même
s'il y a des trous.

Pour corser le tout, quand la valeur de la colonne B change, C repart
à zéro. Si A change, c'est B et C qui repartent à zéro.

Cerise sur le gateau, mais ça c'est le plus facile, la nouvelle
colonne D indique combien de valeur il y a dans chaque paquet.

J'arrive plus ou moins (surtout moins bien que plus), seulement je
passe par un paquet de collones intermédiaire et avec des vraifaux en
pagaille et je trouve àa pas propre.




Avec des requêtes, ça me paraît compliqué, mais avec un module, ça
pourrait donner ça :

Sub baton()
Dim db As Database
Dim r As DAO.Recordset
Set db = CurrentDb
Set r = db.OpenRecordset("select a,b,c from baton order by a,b,c")
Dim a As String, b As String, c As String, cs As String

a = 0
b = 0
c = ""
While Not r.EOF
If (r!a <> a Or r!b <> b Or n = 10 Or Val(c) + 1 <> Val(r!c) Or (cs
= "041" And c = "050")) Then
If a <> 0 Then Debug.Print a, b, cs, n
a = r!a
b = r!b
cs = r!c
c = r!c
n = 1
Else
n = n + 1
c = r!c
End If
r.MoveNext
Wend
Debug.Print a, b, cs, n

Set r = Nothing
Set db = Nothing
End Sub




Sur le principe, je comprend, mais ça coince avec access 2003 sur
"r!a". Il aime pas trop, probablement pas ce que c'est déjà basé sur
une requete et non une table.

Je vais reessayer demain.


--
Vous voulez un conseil ?
Ne faites jamais confiance à ceux qui vous donnent des conseils.
Avatar
Baton .rouge
On Mon, 21 Oct 2013 16:58:17 +0200, Baton .rouge
wrote:

On Fri, 18 Oct 2013 20:06:20 +0200, db
wrote:

Le 18/10/2013 18:34, Baton .rouge a écrit :
Bonjour

je ne sais pas si c'est faisable en sql access.
Au pire, je peux passer par un critère pour remplir les champs.

Ce dessous une liste de nombre que je dois classer et ce que j'ai du
mal à faire.

Le but étant de regrouper par paquet de 10 valeur maximum la colonne C
sachant que la première valeur sert de référence au compteur.
Si le premier nombre est 41, alors on ne poura pas dépasser 50 même
s'il y a des trous.

Pour corser le tout, quand la valeur de la colonne B change, C repart
à zéro. Si A change, c'est B et C qui repartent à zéro.

Cerise sur le gateau, mais ça c'est le plus facile, la nouvelle
colonne D indique combien de valeur il y a dans chaque paquet.

J'arrive plus ou moins (surtout moins bien que plus), seulement je
passe par un paquet de collones intermédiaire et avec des vraifaux en
pagaille et je trouve àa pas propre.




Avec des requêtes, ça me paraît compliqué, mais avec un module, ça
pourrait donner ça :

Sub baton()
Dim db As Database
Dim r As DAO.Recordset
Set db = CurrentDb
Set r = db.OpenRecordset("select a,b,c from baton order by a,b,c")
Dim a As String, b As String, c As String, cs As String

a = 0
b = 0
c = ""
While Not r.EOF
If (r!a <> a Or r!b <> b Or n = 10 Or Val(c) + 1 <> Val(r!c) Or (cs
= "041" And c = "050")) Then
If a <> 0 Then Debug.Print a, b, cs, n
a = r!a
b = r!b
cs = r!c
c = r!c
n = 1
Else
n = n + 1
c = r!c
End If
r.MoveNext
Wend
Debug.Print a, b, cs, n

Set r = Nothing
Set db = Nothing
End Sub




Sur le principe, je comprend, mais ça coince avec access 2003 sur
"r!a". Il aime pas trop, probablement pas ce que c'est déjà basé sur
une requete et non une table.

Je vais reessayer demain.



Finalement, je suis passé par excel sur le même principe. Si j'ai le
temps, j'aimerai quand même faire ça sur access un jour
--
Vous voulez un conseil ?
Ne faites jamais confiance à ceux qui vous donnent des conseils.