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

Fermé
Huguo90 Messages postés 64 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 20762 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 4 décembre 2022 - 2 juil. 2021 à 11:44
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

yg_be Messages postés 20762 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 4 décembre 2022 1 269
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?
0
Huguo90 Messages postés 64 Date d'inscription lundi 17 juillet 2017 Statut Membre Dernière intervention 30 septembre 2022
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
0
yg_be Messages postés 20762 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 4 décembre 2022 1 269
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?
0