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

En vba à faire des sous-totaux

7 réponses
Avatar
fred
Bonjour,
Je recherche en vba à faire des sous-totaux d'une feuille comprenant 3
colonnes avec Pseudo, Date, Montant, les sous totaux étant rajoutés dans une
colonne Sous total.
Dans la colonne Pseudo le même nom peut ressortir plusieurs fois comme ceci
:
Pseudo Date Montant Sous Total
nova3 Nov-14-2006 6,97 6,97
dello Nov-14-2006 18,70
dello Nov-14-2006 12,70
dello Nov-14-2006 151,30 182,70
simmont Nov-14-2006 5,10
simmont Nov-14-2006 28,90 34.00
sosoil Nov-14-2006 4,10 4,10
J'ai testé avec cette boucle qui fonctionne bien si le pseudo apparait 2
fois...mais s'il apparait plus de 2 fois ça ne va plus!
Je devrais peut-être utiliser Index et equiv?
Sub SousTotaux()
Dim i As Integer
Sheets("Feuil6").Select
For i = Range("a65536").End(xlUp).Row - 1 To 1 Step -1
If Cells((i + 1), 1).Value <> Cells(i, 1).Value Then Cells(i, 5).Value =
Cells(i, 3).Value
If Cells((i + 1), 1).Value = Cells(i, 1).Value Then
Cells(i, 4).Value = Cells(i, 3).Value
Cells((i + 1), 4).Value = Cells((i + 1), 3).Value
LaSomme = Application.Sum(Cells(i, 4), Cells((i + 1), 4))
Cells((i + 1), 5).Value = LaSomme
End If
Next i
Columns("D:D").Select
Selection.Delete Shift:=xlToLeft
End Sub

Merci de votre aide

7 réponses

Avatar
DesseJ
Bonsoir,

comme ceci peut-être

Cordialement
Steph D.

'-----------------------------------
Sub SousTotaux()
Dim i#, DerLig#
Dim MesNoms As Range, MesMontants As Range
Dim temp$
Sheets("Feuil6").Activate
DerLig = [A65536].End(3).Row
Set MesNoms = Range("A2:A" & DerLig)
Set MesMontants = Range("C2:C" & DerLig)
For i = 2 To DerLig
If Cells(i, 1).Value <> Cells(i + 1, 1).Value Then
temp = Cells(i, 1).Value
Cells(i, 4) = Evaluate("sumproduct((""" & temp & """=" &
MesNoms.Address & ")*(" & MesMontants.Address & "))")
End If
Next i
Set MesNoms = Nothing
Set MesMontants = Nothing
End Sub
Avatar
fred
OK Ca marche DesseJ
Je ne connais pas la syntaxe de l'objet Range avec End(3)...pourquoi 3,
DerLig = [A65536].End(3).Row ' qui définit en fait la limite de la
dernière ligne utilisée????

et cette autre ligne...qui permet de faire le sous-total..je ne comprends
pas????
Evaluate("sumproduct((""" & temp & """=" & MesNoms.Address & ")*(" &
MesMontants.Address & "))")

Merci tout de même de cette réponse rapide ;)

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

Bonsoir,

comme ceci peut-être

Cordialement
Steph D.

'-----------------------------------
Sub SousTotaux()
Dim i#, DerLig#
Dim MesNoms As Range, MesMontants As Range
Dim temp$
Sheets("Feuil6").Activate
DerLig = [A65536].End(3).Row
Set MesNoms = Range("A2:A" & DerLig)
Set MesMontants = Range("C2:C" & DerLig)
For i = 2 To DerLig
If Cells(i, 1).Value <> Cells(i + 1, 1).Value Then
temp = Cells(i, 1).Value
Cells(i, 4) = Evaluate("sumproduct((""" & temp & """=" &
MesNoms.Address & ")*(" & MesMontants.Address & "))")
End If
Next i
Set MesNoms = Nothing
Set MesMontants = Nothing
End Sub
Avatar
fred
En fait pour le End(3) j'ai trouvé la réponse dans les astuces de
http://dj.joss.free.fr
Pour sélectionner la dernière cellule:
De la colonne A
[A65536].End(3).Select
(4 = xlDown)
(3 = xlUp)
(2= xlToRight)
(1= xlToLeft)

Par contre je cherche tj sur la ligne :
Evaluate("sumproduct((""" & temp & """=" & MesNoms.Address & ")*(" &
MesMontants.Address & "))")
Merci de vos éclaircissements ;)


"fred" a écrit dans le message de news:
eWHv8$
OK Ca marche DesseJ
Je ne connais pas la syntaxe de l'objet Range avec End(3)...pourquoi 3,
DerLig = [A65536].End(3).Row ' qui définit en fait la limite de la
dernière ligne utilisée????

et cette autre ligne...qui permet de faire le sous-total..je ne comprends
pas????
Evaluate("sumproduct((""" & temp & """=" & MesNoms.Address & ")*(" &
MesMontants.Address & "))")

Merci tout de même de cette réponse rapide ;)

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

Bonsoir,

comme ceci peut-être

Cordialement
Steph D.

'-----------------------------------
Sub SousTotaux()
Dim i#, DerLig#
Dim MesNoms As Range, MesMontants As Range
Dim temp$
Sheets("Feuil6").Activate
DerLig = [A65536].End(3).Row
Set MesNoms = Range("A2:A" & DerLig)
Set MesMontants = Range("C2:C" & DerLig)
For i = 2 To DerLig
If Cells(i, 1).Value <> Cells(i + 1, 1).Value Then
temp = Cells(i, 1).Value
Cells(i, 4) = Evaluate("sumproduct((""" & temp & """=" &
MesNoms.Address & ")*(" & MesMontants.Address & "))")
End If
Next i
Set MesNoms = Nothing
Set MesMontants = Nothing
End Sub




Avatar
JB
Bonjour,

http://cjoint.com/?lqe26YiNJE

Sub soustot()
[A2].Select
Do While ActiveCell <> ""
stotal = 0
mpseudo = ActiveCell
Do While ActiveCell = mpseudo
stotal = stotal + ActiveCell.Offset(0, 2)
ActiveCell.Offset(1, 0).Select
Loop
ActiveCell.Offset(-1, 3) = stotal
Loop
End Sub

Cordialement JB


Bonjour,
Je recherche en vba à faire des sous-totaux d'une feuille comprenant 3
colonnes avec Pseudo, Date, Montant, les sous totaux étant rajoutés d ans une
colonne Sous total.
Dans la colonne Pseudo le même nom peut ressortir plusieurs fois comme ceci
:
Pseudo Date Montant Sous Total
nova3 Nov-14-2006 6,97 6,97
dello Nov-14-2006 18,70
dello Nov-14-2006 12,70
dello Nov-14-2006 151,30 182,70
simmont Nov-14-2006 5,10
simmont Nov-14-2006 28,90 34.00
sosoil Nov-14-2006 4,10 4,10
J'ai testé avec cette boucle qui fonctionne bien si le pseudo apparait 2
fois...mais s'il apparait plus de 2 fois ça ne va plus!
Je devrais peut-être utiliser Index et equiv?
Sub SousTotaux()
Dim i As Integer
Sheets("Feuil6").Select
For i = Range("a65536").End(xlUp).Row - 1 To 1 Step -1
If Cells((i + 1), 1).Value <> Cells(i, 1).Value Then Cells(i, 5).Value =
Cells(i, 3).Value
If Cells((i + 1), 1).Value = Cells(i, 1).Value Then
Cells(i, 4).Value = Cells(i, 3).Value
Cells((i + 1), 4).Value = Cells((i + 1), 3).Value
LaSomme = Application.Sum(Cells(i, 4), Cells((i + 1), 4))
Cells((i + 1), 5).Value = LaSomme
End If
Next i
Columns("D:D").Select
Selection.Delete Shift:=xlToLeft
End Sub

Merci de votre aide


Avatar
JB
Sans VBA

=SI(A2<>A3;SOMMEPROD(Montant*(pseudo¢));"")

http://cjoint.com/?lqg1GN37jl

JB

Bonjour,
Je recherche en vba à faire des sous-totaux d'une feuille comprenant 3
colonnes avec Pseudo, Date, Montant, les sous totaux étant rajoutés d ans une
colonne Sous total.
Dans la colonne Pseudo le même nom peut ressortir plusieurs fois comme ceci
:
Pseudo Date Montant Sous Total
nova3 Nov-14-2006 6,97 6,97
dello Nov-14-2006 18,70
dello Nov-14-2006 12,70
dello Nov-14-2006 151,30 182,70
simmont Nov-14-2006 5,10
simmont Nov-14-2006 28,90 34.00
sosoil Nov-14-2006 4,10 4,10
J'ai testé avec cette boucle qui fonctionne bien si le pseudo apparait 2
fois...mais s'il apparait plus de 2 fois ça ne va plus!
Je devrais peut-être utiliser Index et equiv?
Sub SousTotaux()
Dim i As Integer
Sheets("Feuil6").Select
For i = Range("a65536").End(xlUp).Row - 1 To 1 Step -1
If Cells((i + 1), 1).Value <> Cells(i, 1).Value Then Cells(i, 5).Value =
Cells(i, 3).Value
If Cells((i + 1), 1).Value = Cells(i, 1).Value Then
Cells(i, 4).Value = Cells(i, 3).Value
Cells((i + 1), 4).Value = Cells((i + 1), 3).Value
LaSomme = Application.Sum(Cells(i, 4), Cells((i + 1), 4))
Cells((i + 1), 5).Value = LaSomme
End If
Next i
Columns("D:D").Select
Selection.Delete Shift:=xlToLeft
End Sub

Merci de votre aide


Avatar
DesseJ
Bonjour Fred,


Je ne connais pas la syntaxe de l'objet Range avec End(3)...pourquoi 3,
DerLig = [A65536].End(3).Row ' qui définit en fait la limite de la
dernière ligne utilisée????
Oui 3 pour le XlUp


et cette autre ligne...qui permet de faire le sous-total..je ne comprends
pas????
Evaluate("sumproduct((""" & temp & """=" & MesNoms.Address & ")*(" &
MesMontants.Address & "))")
Traduction VBA de'une formule de calcul de ce type

SommeProd((A2=$A2$A10)*($C2$C10))
qui te calcule la somme de la colonne C pour le pseudo en A2 e cetera

Bonne journée
Steph. D.

Avatar
fred
Merci à tous pour vos réponses...c'est plus clair maintenant ;)

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

Sans VBA

=SI(A2<>A3;SOMMEPROD(Montant*(pseudo¢));"")

http://cjoint.com/?lqg1GN37jl

JB

Bonjour,
Je recherche en vba à faire des sous-totaux d'une feuille comprenant 3
colonnes avec Pseudo, Date, Montant, les sous totaux étant rajoutés dans
une
colonne Sous total.
Dans la colonne Pseudo le même nom peut ressortir plusieurs fois comme
ceci
:
Pseudo Date Montant Sous Total
nova3 Nov-14-2006 6,97 6,97
dello Nov-14-2006 18,70
dello Nov-14-2006 12,70
dello Nov-14-2006 151,30 182,70
simmont Nov-14-2006 5,10
simmont Nov-14-2006 28,90 34.00
sosoil Nov-14-2006 4,10 4,10
J'ai testé avec cette boucle qui fonctionne bien si le pseudo apparait 2
fois...mais s'il apparait plus de 2 fois ça ne va plus!
Je devrais peut-être utiliser Index et equiv?
Sub SousTotaux()
Dim i As Integer
Sheets("Feuil6").Select
For i = Range("a65536").End(xlUp).Row - 1 To 1 Step -1
If Cells((i + 1), 1).Value <> Cells(i, 1).Value Then Cells(i, 5).Value > Cells(i, 3).Value
If Cells((i + 1), 1).Value = Cells(i, 1).Value Then
Cells(i, 4).Value = Cells(i, 3).Value
Cells((i + 1), 4).Value = Cells((i + 1), 3).Value
LaSomme = Application.Sum(Cells(i, 4), Cells((i + 1), 4))
Cells((i + 1), 5).Value = LaSomme
End If
Next i
Columns("D:D").Select
Selection.Delete Shift:=xlToLeft
End Sub

Merci de votre aide