Faire un group by sur deux colonnes en VBA et un calcul
Fermé
Huguo90
Messages postés
63
Date d'inscription
lundi 17 juillet 2017
Statut
Membre
Dernière intervention
30 septembre 2022
-
Modifié le 30 juin 2021 à 13:47
yg_be Messages postés 23342 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 21 novembre 2024 - 2 juil. 2021 à 11:44
yg_be Messages postés 23342 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 21 novembre 2024 - 2 juil. 2021 à 11:44
2 réponses
yg_be
Messages postés
23342
Date d'inscription
lundi 9 juin 2008
Statut
Contributeur
Dernière intervention
21 novembre 2024
Ambassadeur
1 550
30 juin 2021 à 14:07
30 juin 2021 à 14:07
bonjour,
utilises-tu Excel?
quelle signification donnes-tu à "group by" dans ce contexte?
qu'as-tu essayé en VBA?
as-tu essayé d'utiliser des formules pour faire cela? ou un TCD?
utilises-tu Excel?
quelle signification donnes-tu à "group by" dans ce contexte?
qu'as-tu essayé en VBA?
as-tu essayé d'utiliser des formules pour faire cela? ou un TCD?
Huguo90
Messages postés
63
Date d'inscription
lundi 17 juillet 2017
Statut
Membre
Dernière intervention
30 septembre 2022
2 juil. 2021 à 11:39
2 juil. 2021 à 11:39
J'ai envie de faire exactement comme dans ma question
Option Explicit
Dim oWbk As Workbook
Sub GenereTCD()
Dim oSheet As Workbook
Dim i As Integer
Dim J As Integer
'suppression des feuille Existantes
Set oWbk = ThisWorkbook
Application.DisplayAlerts = False
For i = oWbk.Sheets.Count To 2 Step -1
oWbk.Sheets(i).Delete
Next
Application.DisplayAlerts = True
'Ajouter les nouvelles feuilles
For i = oWbk.Sheets.Count + i To 3
oWbk.Sheets.Add After:=oWbk.Sheets(oWbk.Sheets.Count)
Next
oWbk.Sheets(2).Name = "Données Traitées"
'Tableau croisé dynamique Données traitées
Creation_TCD "TCD", "Num", "Result", ""
oWbk.Sheets("Données Traitées").Activate
Application.ScreenUpdating = True
End Sub
Private Sub Creation_TCD(sTCDName As String, sheetName As String, _
sField1 As String, sField2 As String)
Dim Ilig As Integer
Dim oSheet As Worksheet
Dim oCache As PivotCache
'création du tableau croiser dynamique
Ilig = 2
oWbk.Activate
Set oSheet = oWbk.Sheets("Base de données")
'creation du Cache du tableau
Set oCache = oWbk.PivotCaches.Create(SourceType:=xlDatabase, _
SourceData:="Tableau_base", Version:=xlPivotTableVersion15)
'Création du Tableau
oCache.CreatePivotTable _
TableDestination:=oWbk.Sheets(sheetName).Cells(Ilig, 2), _
TableName:=sTCDName
Set oSheet = oWbk.Sheets(sheetName)
'Ligne du TCD
With oSheet.PivotTables(sTCDName).PivotFields(sField1)
.Orientation = xlRowField
.Position = 1
End With
If sField2 <> "" Then
With oSheet.PivotTables(sTCDName).PivotFields(sField2)
.Orientation = xlRowField
.Position = 2
End With
End If
oSheet.PivotTables(sTCDName).CompactLayoutRowHeader = UCase(sField1)
'Supprime les lignes Vide
oSheet.PivotTables(sTCDName).PivotFields(sField1) _
.PivotFilters.Add Type:=16, Value1:="(Vide)"
'En nombre et Pourcentage
oSheet.PivotTables(sTCDName).AddDataField _
oSheet.PivotTables(sTCDName).PivotFields("Nom"), "NOMBRE", xlCount
oSheet.PivotTables(sTCDName).AddDataField _
oSheet.PivotTables(sTCDName).PivotFields("Nom"), "POURCENTAGE", xlCount
With oSheet.PivotTables(sTCDName).PivotFields("Pourcentage")
.Calculation = xlPercentOfTotal
.Numerformat = "0.00%"
End With
End Sub
Option Explicit
Dim oWbk As Workbook
Sub GenereTCD()
Dim oSheet As Workbook
Dim i As Integer
Dim J As Integer
'suppression des feuille Existantes
Set oWbk = ThisWorkbook
Application.DisplayAlerts = False
For i = oWbk.Sheets.Count To 2 Step -1
oWbk.Sheets(i).Delete
Next
Application.DisplayAlerts = True
'Ajouter les nouvelles feuilles
For i = oWbk.Sheets.Count + i To 3
oWbk.Sheets.Add After:=oWbk.Sheets(oWbk.Sheets.Count)
Next
oWbk.Sheets(2).Name = "Données Traitées"
'Tableau croisé dynamique Données traitées
Creation_TCD "TCD", "Num", "Result", ""
oWbk.Sheets("Données Traitées").Activate
Application.ScreenUpdating = True
End Sub
Private Sub Creation_TCD(sTCDName As String, sheetName As String, _
sField1 As String, sField2 As String)
Dim Ilig As Integer
Dim oSheet As Worksheet
Dim oCache As PivotCache
'création du tableau croiser dynamique
Ilig = 2
oWbk.Activate
Set oSheet = oWbk.Sheets("Base de données")
'creation du Cache du tableau
Set oCache = oWbk.PivotCaches.Create(SourceType:=xlDatabase, _
SourceData:="Tableau_base", Version:=xlPivotTableVersion15)
'Création du Tableau
oCache.CreatePivotTable _
TableDestination:=oWbk.Sheets(sheetName).Cells(Ilig, 2), _
TableName:=sTCDName
Set oSheet = oWbk.Sheets(sheetName)
'Ligne du TCD
With oSheet.PivotTables(sTCDName).PivotFields(sField1)
.Orientation = xlRowField
.Position = 1
End With
If sField2 <> "" Then
With oSheet.PivotTables(sTCDName).PivotFields(sField2)
.Orientation = xlRowField
.Position = 2
End With
End If
oSheet.PivotTables(sTCDName).CompactLayoutRowHeader = UCase(sField1)
'Supprime les lignes Vide
oSheet.PivotTables(sTCDName).PivotFields(sField1) _
.PivotFilters.Add Type:=16, Value1:="(Vide)"
'En nombre et Pourcentage
oSheet.PivotTables(sTCDName).AddDataField _
oSheet.PivotTables(sTCDName).PivotFields("Nom"), "NOMBRE", xlCount
oSheet.PivotTables(sTCDName).AddDataField _
oSheet.PivotTables(sTCDName).PivotFields("Nom"), "POURCENTAGE", xlCount
With oSheet.PivotTables(sTCDName).PivotFields("Pourcentage")
.Calculation = xlPercentOfTotal
.Numerformat = "0.00%"
End With
End Sub
yg_be
Messages postés
23342
Date d'inscription
lundi 9 juin 2008
Statut
Contributeur
Dernière intervention
21 novembre 2024
1 550
2 juil. 2021 à 11:44
2 juil. 2021 à 11:44
merci d'utiliser les balises de code quand tu partages du code: https://codes-sources.commentcamarche.net/faq/11288-les-balises-de-code
ton code fonctionne bien?
ton code fonctionne bien?