Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

Regroupement en VBA

8 réponses
Avatar
JMD
Bonjour.

Dans une feuille Excel, j'obtiens des données via un recordset ODBC qui sont
mises en formes comme ci-dessous :

Famille Code Qte Prix
Divers A 10 100.00
Divers AA 12 120
Fourniture AB 5 12
Fourniture AC 3 12
Fourniture AV 2 15

etc, c'est à dire que la première colonne, "Famille", contient le nom de la
famille qui est répété à chaque ligne.

Je souhaiterais faire des sous totaux par famille (valorisation par famille)
et afficher la sous total dans la colonne suivante (après prix), soit à la
dernière soit à la première ligne de chaque famille. C'est à dire :

Famille Code Qte Prix Total Famille
Divers A 10 100.00
Divers AA 12 120 120.00
Fourniture AB 5 12
Fourniture AC 3 12
Fourniture AV 2 15 39.00


Je n'ai aucune idée de la manière de procéder en VBA. Certes, je peux faire
un "select sum(prix) group by Famille", mais comment repérer la cellule dans
laquelle je dois écrire le résultat ? Bien entendu, le nombre d'articles par
famille n'est jamais le même.

Un piste ?

Mille mercis !!!

8 réponses

Avatar
JB
Bonjour,

Commande Données/Sous-totaux

http://boisgontierjacques.free.fr/fichiers/Tri/jb-trisoustotaux.xls

JB

On 1 août, 11:45, "JMD" wrote:
Bonjour.

Dans une feuille Excel, j'obtiens des données via un recordset ODBC qui sont
mises en formes comme ci-dessous :

Famille Code Qte Prix
Divers A 10 100.00
Divers AA 12 120
Fourniture AB 5 12
Fourniture AC 3 12
Fourniture AV 2 15

etc, c'est à dire que la première colonne, "Famille", contient le nom de la
famille qui est répété à chaque ligne.

Je souhaiterais faire des sous totaux par famille (valorisation par famil le)
et afficher la sous total dans la colonne suivante (après prix), soit à la
dernière soit à la première ligne de chaque famille. C'est à dire :

Famille Code Qte Prix Total Famille
Divers A 10 100.00
Divers AA 12 120 120.00
Fourniture AB 5 12
Fourniture AC 3 12
Fourniture AV 2 15 39.00

Je n'ai aucune idée de la manière de procéder en VBA. Certes, je pe ux faire
un "select sum(prix) group by Famille", mais comment repérer la cellule dans
laquelle je dois écrire le résultat ? Bien entendu, le nombre d'artic les par
famille n'est jamais le même.

Un piste ?

Mille mercis !!!


Avatar
FFO
Salut à toi

cette petite macro devrait faire :

For Each c In Worksheets("Onglet").Range("A1", [A65535].End(xlUp))
If c.Interior.ColorIndex <> 6 Then
For Each d In Worksheets("Onglet").Range(c, [A65535].End(xlUp))
If c = d Then
n = n + 1
d.Interior.ColorIndex = 6
End If
Next
c.Offset(0, 4) = n
n = 0
End If
Next
Columns("A:A").Interior.ColorIndex = xlNone

Dis moi !!!

Actualises le nom "Onglet" du nom de ta feuille dans le code


Bonjour.

Dans une feuille Excel, j'obtiens des données via un recordset ODBC qui sont
mises en formes comme ci-dessous :

Famille Code Qte Prix
Divers A 10 100.00
Divers AA 12 120
Fourniture AB 5 12
Fourniture AC 3 12
Fourniture AV 2 15

etc, c'est à dire que la première colonne, "Famille", contient le nom de la
famille qui est répété à chaque ligne.

Je souhaiterais faire des sous totaux par famille (valorisation par famille)
et afficher la sous total dans la colonne suivante (après prix), soit à la
dernière soit à la première ligne de chaque famille. C'est à dire :

Famille Code Qte Prix Total Famille
Divers A 10 100.00
Divers AA 12 120 120.00
Fourniture AB 5 12
Fourniture AC 3 12
Fourniture AV 2 15 39.00


Je n'ai aucune idée de la manière de procéder en VBA. Certes, je peux faire
un "select sum(prix) group by Famille", mais comment repérer la cellule dans
laquelle je dois écrire le résultat ? Bien entendu, le nombre d'articles par
famille n'est jamais le même.

Un piste ?

Mille mercis !!!





Avatar
JMD
Bonjour.

Ta macro met toute la colonne A en jaune.

Merci.


"FFO" a écrit dans le message de news:

Salut à toi

cette petite macro devrait faire :

For Each c In Worksheets("Onglet").Range("A1", [A65535].End(xlUp))
If c.Interior.ColorIndex <> 6 Then
For Each d In Worksheets("Onglet").Range(c, [A65535].End(xlUp))
If c = d Then
n = n + 1
d.Interior.ColorIndex = 6
End If
Next
c.Offset(0, 4) = n
n = 0
End If
Next
Columns("A:A").Interior.ColorIndex = xlNone

Dis moi !!!

Actualises le nom "Onglet" du nom de ta feuille dans le code


Bonjour.

Dans une feuille Excel, j'obtiens des données via un recordset ODBC qui
sont
mises en formes comme ci-dessous :

Famille Code Qte Prix
Divers A 10 100.00
Divers AA 12 120
Fourniture AB 5 12
Fourniture AC 3 12
Fourniture AV 2 15

etc, c'est à dire que la première colonne, "Famille", contient le nom de
la
famille qui est répété à chaque ligne.

Je souhaiterais faire des sous totaux par famille (valorisation par
famille)
et afficher la sous total dans la colonne suivante (après prix), soit à
la
dernière soit à la première ligne de chaque famille. C'est à dire :

Famille Code Qte Prix Total Famille
Divers A 10 100.00
Divers AA 12 120 120.00
Fourniture AB 5 12
Fourniture AC 3 12
Fourniture AV 2 15 39.00


Je n'ai aucune idée de la manière de procéder en VBA. Certes, je peux
faire
un "select sum(prix) group by Famille", mais comment repérer la cellule
dans
laquelle je dois écrire le résultat ? Bien entendu, le nombre d'articles
par
famille n'est jamais le même.

Un piste ?

Mille mercis !!!







Avatar
JMD
Mais j'ai fait :

For Each C In Worksheets("STOCKPHYSIQUE").Range("A6", [A65535].End(xlUp))

If C.Value <> C.Offset(1, 0).Value Then
C.Interior.ColorIndex = 6
Else
C.Interior.ColorIndex = 0
End If
Next


et c'est OK. Merci infiniment, je ne connaissais pas Offset.

A +


"JMD" a écrit dans le message de news:
%
Bonjour.

Ta macro met toute la colonne A en jaune.

Merci.


"FFO" a écrit dans le message de news:

Salut à toi

cette petite macro devrait faire :

For Each c In Worksheets("Onglet").Range("A1", [A65535].End(xlUp))
If c.Interior.ColorIndex <> 6 Then
For Each d In Worksheets("Onglet").Range(c, [A65535].End(xlUp))
If c = d Then
n = n + 1
d.Interior.ColorIndex = 6
End If
Next
c.Offset(0, 4) = n
n = 0
End If
Next
Columns("A:A").Interior.ColorIndex = xlNone

Dis moi !!!

Actualises le nom "Onglet" du nom de ta feuille dans le code


Bonjour.

Dans une feuille Excel, j'obtiens des données via un recordset ODBC qui
sont
mises en formes comme ci-dessous :

Famille Code Qte Prix
Divers A 10 100.00
Divers AA 12 120
Fourniture AB 5 12
Fourniture AC 3 12
Fourniture AV 2 15

etc, c'est à dire que la première colonne, "Famille", contient le nom de
la
famille qui est répété à chaque ligne.

Je souhaiterais faire des sous totaux par famille (valorisation par
famille)
et afficher la sous total dans la colonne suivante (après prix), soit à
la
dernière soit à la première ligne de chaque famille. C'est à dire :

Famille Code Qte Prix Total Famille
Divers A 10 100.00
Divers AA 12 120 120.00
Fourniture AB 5 12
Fourniture AC 3 12
Fourniture AV 2 15 39.00


Je n'ai aucune idée de la manière de procéder en VBA. Certes, je peux
faire
un "select sum(prix) group by Famille", mais comment repérer la cellule
dans
laquelle je dois écrire le résultat ? Bien entendu, le nombre d'articles
par
famille n'est jamais le même.

Un piste ?

Mille mercis !!!











Avatar
FFO
Rebonjour à toi

la ligne:

Columns("A:A").Interior.ColorIndex = xlNone

en fin de mon code doit remettre la colonne A sans couleur

Ne l'a tu pas oublié dans ta recopie

Dis moi !!!!


Bonjour.

Ta macro met toute la colonne A en jaune.

Merci.


"FFO" a écrit dans le message de news:

Salut à toi

cette petite macro devrait faire :

For Each c In Worksheets("Onglet").Range("A1", [A65535].End(xlUp))
If c.Interior.ColorIndex <> 6 Then
For Each d In Worksheets("Onglet").Range(c, [A65535].End(xlUp))
If c = d Then
n = n + 1
d.Interior.ColorIndex = 6
End If
Next
c.Offset(0, 4) = n
n = 0
End If
Next
Columns("A:A").Interior.ColorIndex = xlNone

Dis moi !!!

Actualises le nom "Onglet" du nom de ta feuille dans le code


Bonjour.

Dans une feuille Excel, j'obtiens des données via un recordset ODBC qui
sont
mises en formes comme ci-dessous :

Famille Code Qte Prix
Divers A 10 100.00
Divers AA 12 120
Fourniture AB 5 12
Fourniture AC 3 12
Fourniture AV 2 15

etc, c'est à dire que la première colonne, "Famille", contient le nom de
la
famille qui est répété à chaque ligne.

Je souhaiterais faire des sous totaux par famille (valorisation par
famille)
et afficher la sous total dans la colonne suivante (après prix), soit à
la
dernière soit à la première ligne de chaque famille. C'est à dire :

Famille Code Qte Prix Total Famille
Divers A 10 100.00
Divers AA 12 120 120.00
Fourniture AB 5 12
Fourniture AC 3 12
Fourniture AV 2 15 39.00


Je n'ai aucune idée de la manière de procéder en VBA. Certes, je peux
faire
un "select sum(prix) group by Famille", mais comment repérer la cellule
dans
laquelle je dois écrire le résultat ? Bien entendu, le nombre d'articles
par
famille n'est jamais le même.

Un piste ?

Mille mercis !!!












Avatar
JB
En VBA:

[A1:D1000].Sort Key1:=Range("A2"), Order1:=xlAscending, Header:= _
xlGuess, OrderCustom:=1, MatchCase:úlse
i = 2
Do While Cells(i, 1) <> ""
m = Cells(i, 1)
total = 0
Do While Cells(i, 1) = m
total = total + Cells(i, 4) * Cells(i, 3)
i = i + 1
Loop
Cells(i - 1, 5) = "Total pour " & m & ":" & total
Loop

JB


On 1 août, 11:45, "JMD" wrote:
Bonjour.

Dans une feuille Excel, j'obtiens des données via un recordset ODBC qui sont
mises en formes comme ci-dessous :

Famille Code Qte Prix
Divers A 10 100.00
Divers AA 12 120
Fourniture AB 5 12
Fourniture AC 3 12
Fourniture AV 2 15

etc, c'est à dire que la première colonne, "Famille", contient le nom de la
famille qui est répété à chaque ligne.

Je souhaiterais faire des sous totaux par famille (valorisation par famil le)
et afficher la sous total dans la colonne suivante (après prix), soit à la
dernière soit à la première ligne de chaque famille. C'est à dire :

Famille Code Qte Prix Total Famille
Divers A 10 100.00
Divers AA 12 120 120.00
Fourniture AB 5 12
Fourniture AC 3 12
Fourniture AV 2 15 39.00

Je n'ai aucune idée de la manière de procéder en VBA. Certes, je pe ux faire
un "select sum(prix) group by Famille", mais comment repérer la cellule dans
laquelle je dois écrire le résultat ? Bien entendu, le nombre d'artic les par
famille n'est jamais le même.

Un piste ?

Mille mercis !!!


Avatar
JMD
Merci JB


"JB" a écrit dans le message de news:

En VBA:

[A1:D1000].Sort Key1:=Range("A2"), Order1:=xlAscending, Header:= _
xlGuess, OrderCustom:=1, MatchCase:úlse
i = 2
Do While Cells(i, 1) <> ""
m = Cells(i, 1)
total = 0
Do While Cells(i, 1) = m
total = total + Cells(i, 4) * Cells(i, 3)
i = i + 1
Loop
Cells(i - 1, 5) = "Total pour " & m & ":" & total
Loop

JB


On 1 août, 11:45, "JMD" wrote:
Bonjour.

Dans une feuille Excel, j'obtiens des données via un recordset ODBC qui
sont
mises en formes comme ci-dessous :

Famille Code Qte Prix
Divers A 10 100.00
Divers AA 12 120
Fourniture AB 5 12
Fourniture AC 3 12
Fourniture AV 2 15

etc, c'est à dire que la première colonne, "Famille", contient le nom de
la
famille qui est répété à chaque ligne.

Je souhaiterais faire des sous totaux par famille (valorisation par
famille)
et afficher la sous total dans la colonne suivante (après prix), soit à la
dernière soit à la première ligne de chaque famille. C'est à dire :

Famille Code Qte Prix Total Famille
Divers A 10 100.00
Divers AA 12 120 120.00
Fourniture AB 5 12
Fourniture AC 3 12
Fourniture AV 2 15 39.00

Je n'ai aucune idée de la manière de procéder en VBA. Certes, je peux
faire
un "select sum(prix) group by Famille", mais comment repérer la cellule
dans
laquelle je dois écrire le résultat ? Bien entendu, le nombre d'articles
par
famille n'est jamais le même.

Un piste ?

Mille mercis !!!


Avatar
JMD
Bonjour.

Oui, si je laisse la ligne en fin de code, rien n'est jaune évidemment. Par
contre, si je la vire, toutes les lignes sont jaunes.

Peu importe, je me suis inspiré de ton code et j'ai obtenu ce que je
cherchais :

For Each C In Worksheets("STOCKPHYSIQUE").Range("A6", [A65535].End(xlUp))
If C.Value <> C.Offset(1, 0).Value Then
C.Interior.ColorIndex = 6
N = N + C.Offset(0, 5).Value
C.Offset(0, 6).Value = N
C.Offset(0, 6).Interior.ColorIndex = 6
N = 0
Else
N = N + C.Offset(0, 5).Value
C.Interior.ColorIndex = 0
End If

Next


Tout va bien, merci encore, c'est très sympa à toi.

A +

"FFO" a écrit dans le message de news:

Rebonjour à toi

la ligne:

Columns("A:A").Interior.ColorIndex = xlNone

en fin de mon code doit remettre la colonne A sans couleur

Ne l'a tu pas oublié dans ta recopie

Dis moi !!!!


Bonjour.

Ta macro met toute la colonne A en jaune.

Merci.


"FFO" a écrit dans le message de news:

Salut à toi

cette petite macro devrait faire :

For Each c In Worksheets("Onglet").Range("A1", [A65535].End(xlUp))
If c.Interior.ColorIndex <> 6 Then
For Each d In Worksheets("Onglet").Range(c, [A65535].End(xlUp))
If c = d Then
n = n + 1
d.Interior.ColorIndex = 6
End If
Next
c.Offset(0, 4) = n
n = 0
End If
Next
Columns("A:A").Interior.ColorIndex = xlNone

Dis moi !!!

Actualises le nom "Onglet" du nom de ta feuille dans le code


Bonjour.

Dans une feuille Excel, j'obtiens des données via un recordset ODBC
qui
sont
mises en formes comme ci-dessous :

Famille Code Qte Prix
Divers A 10 100.00
Divers AA 12 120
Fourniture AB 5 12
Fourniture AC 3 12
Fourniture AV 2 15

etc, c'est à dire que la première colonne, "Famille", contient le nom
de
la
famille qui est répété à chaque ligne.

Je souhaiterais faire des sous totaux par famille (valorisation par
famille)
et afficher la sous total dans la colonne suivante (après prix), soit
à
la
dernière soit à la première ligne de chaque famille. C'est à dire :

Famille Code Qte Prix Total Famille
Divers A 10 100.00
Divers AA 12 120 120.00
Fourniture AB 5 12
Fourniture AC 3 12
Fourniture AV 2 15 39.00


Je n'ai aucune idée de la manière de procéder en VBA. Certes, je peux
faire
un "select sum(prix) group by Famille", mais comment repérer la
cellule
dans
laquelle je dois écrire le résultat ? Bien entendu, le nombre
d'articles
par
famille n'est jamais le même.

Un piste ?

Mille mercis !!!