Faire un group by sur deux colonnes en VBA et un calcul

Signaler
Messages postés
62
Date d'inscription
lundi 17 juillet 2017
Statut
Membre
Dernière intervention
19 juillet 2021
-
Messages postés
16410
Date d'inscription
lundi 9 juin 2008
Statut
Contributeur
Dernière intervention
22 juillet 2021
-
Bonjour à tous,

J'ai un tableau ainsi, je souhaite faire comme un group by avec deux calculs dessus comme ça:



Je vous ai mis l'image.
Mes données sont Num et résults et j'aimerais faire un petit tableau comme ça c'est bcp plus de données mais ici c'est un exemple que j'ai simplifié.

Merci d'avance,
Huguo

2 réponses

Messages postés
16410
Date d'inscription
lundi 9 juin 2008
Statut
Contributeur
Dernière intervention
22 juillet 2021
877
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?
Messages postés
62
Date d'inscription
lundi 17 juillet 2017
Statut
Membre
Dernière intervention
19 juillet 2021

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
Messages postés
16410
Date d'inscription
lundi 9 juin 2008
Statut
Contributeur
Dernière intervention
22 juillet 2021
877
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?