XL 2019 Accélérer le traitement de données par rapport à une formule.

Loïc DUBOIS

XLDnaute Occasionnel
Bonjour tout le monde,

J'espère que vous allez bien ?

Voici mon problème : je travaille actuellement avec des fichiers très gros (les bases de données brutes comprennent entre 400k et 950k lignes). J'utilise une formule très basique pour compter selon des critères (sur une seconde feuille) :
=NB.SI.ENS('Sheet 1'!B:B;Feuil1!A2;'Sheet 1'!E:E;Feuil1!D2;'Sheet 1'!H:H;Feuil1!G2) --> pour la colonne N dans "feuil1"
=NB.SI.ENS('Sheet 1'!$B:$B;feuil1!$A2;'Sheet 1'!$E:$E;feuil1!$D2;'Sheet 1'!$H:$H;feuil1!$G2;'Sheet 1'!$K:$K;feuil1!O$1) --> pour colonne O dans "feuil1".

Il est très facile d'appliquer cette formule sur toutes mes lignes mais mon jeu de donnée est trop conséquent et excel n'arrive pas à gérer une si grande base.

J'aimerais donc savoir s'il y a un moyen de contourner cela. En effet, excel crache très souvent après avoir attendu 3h+ pour que ma formule soit appliqué à 38000 lignes. Par exemple, est ce qu'en VBA les ressources utilisées sont moindres et donc le temps pour compter mes données serait plus faible ?

Je vous joins un fichier test.

Merci d'avance,
 

Loïc DUBOIS

XLDnaute Occasionnel
Re-,
Oublié de dire que pour obtenir ton tableau, tu cliques sur "Fichier/Fermer et Charger", et tu sélectionnes la destination... (nouvelle feuille....)
Merci pour ton commentaire.

Malheureusement, je n'ai pas l'option "A partir d'un tableau ou d'une plage". Pour y remédier j'ai chargé mon fichier avec power query.

1692724464583.png

Nous sommes d'accord, il faut que je charge les deux feuilles ?

Mes deux feuilles sont transformé en tableau.

Ensuite, j'ai ouvert l'éditeur power query. (Je n'ai pas de requête qui se nomme "tableau1").

1692724571663.png






Donc pour faire ce process faut-il que j'utilise les données brute ou mon tableau résultats ?

J'ai ensuite pivoter la colonne (dans le tableau avec toutes les données brutes ("Sheet 1") :

1692724685826.png



Puis j'ai sélectionné les colonnes qui se sont créées. Malheureusement, l'option "standard" n'est pas disponible...
1692724773098.png

As-tu des idées ?

merci d'avance.

Loïc
 

Loïc DUBOIS

XLDnaute Occasionnel
Re-,
Non, ne sélectionnes que l'onglet principal (pas celui avec les formules)
Peux-tu ouvrir l'éditeur PQ, et dans le ruban "Accueil", cliquer sur "Editeur avancé", et copier/coller le code ici?
Re-

let
Source = Excel.Workbook(File.Contents("/Users/loicdubois/Desktop/test exccel trop lourd.xlsx"), null, true),
Navigation = Source{[Item = "Sheet 1", Kind = "Sheet"]}[Data],
#"En-têtes promus" = Table.PromoteHeaders(Navigation, [PromoteAllScalars = true]),
#"Type de colonne changé" = Table.TransformColumnTypes(#"En-têtes promus", {{"fund", type text}, {"company", type text}, {"industry", type text}, {"meetingID", Int64.Type}, {"meetingDate", type date}, {"meetingType", type text}, {"item", type text}, {"proposal", type text}, {"managementRecommendation", type text}, {"proponent", type text}, {"voteDecision", type text}, {"financiallyMaterial", type logical}, {"subject", type text}, {"parent", type text}}, "fr")
in
#"Type de colonne changé"
 

laurent950

XLDnaute Accro
Bonsoir,

la version avec les Collections : Compatible Mac et Windows

VB:
Option Explicit
Sub CorrigeErrRefCompactTableauMac()
Application.ScreenUpdating = False
Dim t As Single
t = Timer
' Feuil 1 Résultat : Colonne N, O, P, Q, R, S, T
Dim FRes As Worksheet
    Set FRes = Worksheets("feuil1")
Dim ResPlage As Range
    Set ResPlage = FRes.Range(FRes.Cells(2, 1), FRes.Cells(FRes.Cells(1048576, 1).End(xlUp).Row, FRes.Cells(1, 16384).End(xlToLeft).Column))
Dim Tres()
    ReDim Tres(1 To ResPlage.Rows.Count, 1 To 7)
Dim coll() As Collection
ReDim coll(0 To 6)
Set coll(0) = New Collection ' Colonne N
Set coll(1) = New Collection ' Colonne 0
Set coll(2) = New Collection ' Colonne P
Set coll(3) = New Collection ' Colonne Q
Set coll(4) = New Collection ' Colonne R
Set coll(5) = New Collection ' Colonne S
Set coll(6) = New Collection ' Colonne T
Dim Val As Range
For Each Val In ResPlage.Resize(ResPlage.Rows.Count, 1)
    coll(0).Add Item:=0, key:=Val.Text & "-" & Val.Offset(, 3).Text & "-" & Val.Offset(, 6).Text ' ......................... N
    coll(1).Add Item:=0, key:=Val.Text & "-" & Val.Offset(, 3).Text & "-" & Val.Offset(, 6).Text & "-" & FRes.Cells(1, 15) ' O
    coll(2).Add Item:=0, key:=Val.Text & "-" & Val.Offset(, 3).Text & "-" & Val.Offset(, 6).Text & "-" & FRes.Cells(1, 16) ' P
    coll(3).Add Item:=0, key:=Val.Text & "-" & Val.Offset(, 3).Text & "-" & Val.Offset(, 6).Text & "-" & FRes.Cells(1, 17) ' Q
    coll(4).Add Item:=0, key:=Val.Text & "-" & Val.Offset(, 3).Text & "-" & Val.Offset(, 6).Text & "-" & FRes.Cells(1, 18) ' R
    coll(5).Add Item:=0, key:=Val.Text & "-" & Val.Offset(, 3).Text & "-" & Val.Offset(, 6).Text & "-" & FRes.Cells(1, 19) ' S
    coll(6).Add Item:=0, key:=Val.Text & "-" & Val.Offset(, 3).Text & "-" & Val.Offset(, 6).Text & "-" & FRes.Cells(1, 20) ' T
Next
'
' -----------------------------------------------------------------------------------------------------------------------------------------------
' Feuil base : Sheet 1
Dim FBase As Worksheet
    Set FBase = Worksheets("Sheet 1")
Dim Tbase() As Variant
    Tbase = FBase.Range(FBase.Cells(2, 1), FBase.Cells(FBase.Cells(1048576, 1).End(xlUp).Row, FBase.Cells(1, 16384).End(xlToLeft).Column))
'
' -----------------------------------------------------------------------------------------------------------------------------------------------
' Resultat ' Colonne N
Dim Cle As Variant
Dim j As Byte
Dim i As Long
Dim key As String
Dim cpt As Long
For i = LBound(Tbase, 1) To UBound(Tbase, 1)
    For j = LBound(coll) To UBound(coll)
      ' Test si la clé existe
        key = Tbase(i, 2) & "-" & Tbase(i, 5) & "-" & Tbase(i, 8)
        'Debug.Print Exists(coll, j, key)
        'Debug.Print coll(j).Item(Tbase(i, 2) & "-" & Tbase(i, 5) & "-" & Tbase(i, 8))
        If Exists(coll, j, key) = True Then
            If Tbase(i, 2) & "-" & Tbase(i, 5) & "-" & Tbase(i, 8) = key Then
                cpt = coll(j).Item(key) + 1
                coll(j).Remove key
                coll(j).Add Item:=cpt, key:=key
                cpt = Empty: key = Empty
            End If
        End If
        key = Tbase(i, 2) & "-" & Tbase(i, 5) & "-" & Tbase(i, 8) & "-" & Tbase(i, 11)
        If Exists(coll, j, key) = True Then
            If Tbase(i, 2) & "-" & Tbase(i, 5) & "-" & Tbase(i, 8) & "-" & Tbase(i, 11) = key Then ' Tbase(i, 11) = Colonne K:K
                cpt = coll(j).Item(key) + 1
                coll(j).Remove key
                coll(j).Add Item:=cpt, key:=key
                cpt = Empty: key = Empty
            End If
        End If
    Next j
Next i
j = Empty: i = Empty
    For Each Val In ResPlage.Resize(ResPlage.Rows.Count, 1)
        Tres(Val.Row - 1, 1) = coll(0).Item(Val.Text & "-" & Val.Offset(, 3).Text & "-" & Val.Offset(, 6).Text)
        Tres(Val.Row - 1, 2) = coll(1).Item(Val.Text & "-" & Val.Offset(, 3).Text & "-" & Val.Offset(, 6).Text & "-" & FRes.Cells(1, 15))
        Tres(Val.Row - 1, 3) = coll(2).Item(Val.Text & "-" & Val.Offset(, 3).Text & "-" & Val.Offset(, 6).Text & "-" & FRes.Cells(1, 16))
        Tres(Val.Row - 1, 4) = coll(3).Item(Val.Text & "-" & Val.Offset(, 3).Text & "-" & Val.Offset(, 6).Text & "-" & FRes.Cells(1, 17))
        Tres(Val.Row - 1, 5) = coll(4).Item(Val.Text & "-" & Val.Offset(, 3).Text & "-" & Val.Offset(, 6).Text & "-" & FRes.Cells(1, 18))
        Tres(Val.Row - 1, 6) = coll(5).Item(Val.Text & "-" & Val.Offset(, 3).Text & "-" & Val.Offset(, 6).Text & "-" & FRes.Cells(1, 19))
        Tres(Val.Row - 1, 7) = coll(6).Item(Val.Text & "-" & Val.Offset(, 3).Text & "-" & Val.Offset(, 6).Text & "-" & FRes.Cells(1, 20))
    Next
' resultat
    FRes.Cells(2, 14).Resize(UBound(Tres, 1), UBound(Tres, 2)).ClearContents
    FRes.Cells(2, 14).Resize(UBound(Tres, 1), UBound(Tres, 2)) = Tres
MsgBox Timer - t
Application.ScreenUpdating = True
End Sub
Function Exists(ByRef coll() As Collection, ByVal j As Byte, ByVal key As String) As Boolean
' Le code suivant vérifie si une clé existe
    On Error GoTo EH
    IsObject (coll(j).Item(key))
    Exists = True
EH:
End Function
 
Dernière édition:

laurent950

XLDnaute Accro
Bonsoir,

la version avec les Dictionary : Compatible Windows mais Incompatible Mac

Code:
Option Explicit
Sub CorrigeErrRefCompactTableauWin()
Application.ScreenUpdating = False
Dim t As Single
t = Timer
' Feuil 1 Résultat : Colonne N, O, P, Q, R, S, T
Dim FRes As Worksheet
    Set FRes = Worksheets("feuil1")
Dim ResPlage As Range
    Set ResPlage = FRes.Range(FRes.Cells(2, 1), FRes.Cells(FRes.Cells(1048576, 1).End(xlUp).Row, FRes.Cells(1, 16384).End(xlToLeft).Column))
Dim Tres()
    ReDim Tres(1 To ResPlage.Rows.Count, 1 To 7)
Dim Dic() As Object
ReDim Dic(0 To 6)
Set Dic(0) = CreateObject("scripting.dictionary") ' Colonne N
Set Dic(1) = CreateObject("scripting.dictionary") ' Colonne 0
Set Dic(2) = CreateObject("scripting.dictionary") ' Colonne P
Set Dic(3) = CreateObject("scripting.dictionary") ' Colonne Q
Set Dic(4) = CreateObject("scripting.dictionary") ' Colonne R
Set Dic(5) = CreateObject("scripting.dictionary") ' Colonne S
Set Dic(6) = CreateObject("scripting.dictionary") ' Colonne T
Dim Val As Range
For Each Val In ResPlage.Resize(ResPlage.Rows.Count, 1)
    Dic(0).Add Val.Text & "-" & Val.Offset(, 3).Text & "-" & Val.Offset(, 6).Text, 0 ' ......................... N
    Dic(1).Add Val.Text & "-" & Val.Offset(, 3).Text & "-" & Val.Offset(, 6).Text & "-" & FRes.Cells(1, 15), 0 ' O
    Dic(2).Add Val.Text & "-" & Val.Offset(, 3).Text & "-" & Val.Offset(, 6).Text & "-" & FRes.Cells(1, 16), 0 ' P
    Dic(3).Add Val.Text & "-" & Val.Offset(, 3).Text & "-" & Val.Offset(, 6).Text & "-" & FRes.Cells(1, 17), 0 ' Q
    Dic(4).Add Val.Text & "-" & Val.Offset(, 3).Text & "-" & Val.Offset(, 6).Text & "-" & FRes.Cells(1, 18), 0 ' R
    Dic(5).Add Val.Text & "-" & Val.Offset(, 3).Text & "-" & Val.Offset(, 6).Text & "-" & FRes.Cells(1, 19), 0 ' S
    Dic(6).Add Val.Text & "-" & Val.Offset(, 3).Text & "-" & Val.Offset(, 6).Text & "-" & FRes.Cells(1, 20), 0 ' T
Next
'
' -----------------------------------------------------------------------------------------------------------------------------------------------
' Feuil base : Sheet 1
Dim FBase As Worksheet
    Set FBase = Worksheets("Sheet 1")
Dim Tbase() As Variant
    Tbase = FBase.Range(FBase.Cells(2, 1), FBase.Cells(FBase.Cells(1048576, 1).End(xlUp).Row, FBase.Cells(1, 16384).End(xlToLeft).Column))
'
' -----------------------------------------------------------------------------------------------------------------------------------------------
' Resultat ' Colonne N
Dim Cle As Variant
Dim j As Byte
Dim i As Long
For i = LBound(Tbase, 1) To UBound(Tbase, 1)
    For j = LBound(Dic) To UBound(Dic)
        For Each Cle In Dic(j).keys
            If Dic(j).Exists(Cle) Then
                If Tbase(i, 2) & "-" & Tbase(i, 5) & "-" & Tbase(i, 8) = Cle Then
                    Dic(j).Item(Cle) = Dic(j).Item(Cle) + 1
                End If
                If Tbase(i, 2) & "-" & Tbase(i, 5) & "-" & Tbase(i, 8) & "-" & Tbase(i, 11) = Cle Then ' Tbase(i, 11) = Colonne K:K
                    Dic(j).Item(Cle) = Dic(j).Item(Cle) + 1
                End If
            End If
        Next Cle
    Next j
Next i
j = Empty: i = Empty
    For Each Val In ResPlage.Resize(ResPlage.Rows.Count, 1)
        Tres(Val.Row - 1, 1) = Dic(0).Item(Val.Text & "-" & Val.Offset(, 3).Text & "-" & Val.Offset(, 6).Text)
        Tres(Val.Row - 1, 2) = Dic(1).Item(Val.Text & "-" & Val.Offset(, 3).Text & "-" & Val.Offset(, 6).Text & "-" & FRes.Cells(1, 15))
        Tres(Val.Row - 1, 3) = Dic(2).Item(Val.Text & "-" & Val.Offset(, 3).Text & "-" & Val.Offset(, 6).Text & "-" & FRes.Cells(1, 16))
        Tres(Val.Row - 1, 4) = Dic(3).Item(Val.Text & "-" & Val.Offset(, 3).Text & "-" & Val.Offset(, 6).Text & "-" & FRes.Cells(1, 17))
        Tres(Val.Row - 1, 5) = Dic(4).Item(Val.Text & "-" & Val.Offset(, 3).Text & "-" & Val.Offset(, 6).Text & "-" & FRes.Cells(1, 18))
        Tres(Val.Row - 1, 6) = Dic(5).Item(Val.Text & "-" & Val.Offset(, 3).Text & "-" & Val.Offset(, 6).Text & "-" & FRes.Cells(1, 19))
        Tres(Val.Row - 1, 7) = Dic(6).Item(Val.Text & "-" & Val.Offset(, 3).Text & "-" & Val.Offset(, 6).Text & "-" & FRes.Cells(1, 20))
    Next
' resultat
    FRes.Cells(2, 14).Resize(UBound(Tres, 1), UBound(Tres, 2)).ClearContents
    FRes.Cells(2, 14).Resize(UBound(Tres, 1), UBound(Tres, 2)) = Tres
MsgBox Timer - t
Application.ScreenUpdating = True
End Sub
 
Dernière édition:

Cousinhub

XLDnaute Barbatruc
Re,
Sélectionnes tout ce code, et mets-le à la place du tien...
PowerQuery:
let
 Source = Excel.Workbook(File.Contents("/Users/loicdubois/Desktop/test exccel trop lourd.xlsx"), null, true),
 Navigation = Source{[Item = "Sheet 1", Kind = "Sheet"]}[Data],
 #"En-têtes promus" = Table.PromoteHeaders(Navigation, [PromoteAllScalars = true]),
 ModType = Table.TransformColumnTypes(#"En-têtes promus", {{"fund", type text}, {"company", type text}, {"industry", type text}, {"meetingID", Int64.Type}, {"meetingDate", type date}, {"meetingType", type text}, {"item", type text}, {"proposal", type text}, {"managementRecommendation", type text}, {"proponent", type text}, {"voteDecision", type text}, {"financiallyMaterial", type logical}, {"subject", type text}, {"parent", type text}}, "fr"),
    Pivot = Table.Pivot(ModType, List.Distinct(ModType[voteDecision]), "voteDecision", "fund", List.Count),
    Total_Nb_Votes = Table.AddColumn(Pivot, "Nb Votes", each List.Sum({[for], [abstain], [n], [against]}), type number)
in
    Total_Nb_Votes
ça, c'est juste pour les essais
Ensuite, on fera du plus propre...
 

Loïc DUBOIS

XLDnaute Occasionnel
Bonsoir,

la version avec les Dictionary : Compatible Windows mais Incompatible Mac

Code:
Option Explicit
Sub CorrigeErrRefCompactTableauWin()
Application.ScreenUpdating = False
Dim t As Single
t = Timer
' Feuil 1 Résultat : Colonne N, O, P, Q, R, S, T
Dim FRes As Worksheet
    Set FRes = Worksheets("feuil1")
Dim ResPlage As Range
    Set ResPlage = FRes.Range(FRes.Cells(2, 1), FRes.Cells(FRes.Cells(1048576, 1).End(xlUp).Row, FRes.Cells(1, 16384).End(xlToLeft).Column))
Dim Tres()
    ReDim Tres(1 To ResPlage.Rows.Count, 1 To 7)
Dim Dic() As Object
ReDim Dic(0 To 6)
Set Dic(0) = CreateObject("scripting.dictionary") ' Colonne N
Set Dic(1) = CreateObject("scripting.dictionary") ' Colonne 0
Set Dic(2) = CreateObject("scripting.dictionary") ' Colonne P
Set Dic(3) = CreateObject("scripting.dictionary") ' Colonne Q
Set Dic(4) = CreateObject("scripting.dictionary") ' Colonne R
Set Dic(5) = CreateObject("scripting.dictionary") ' Colonne S
Set Dic(6) = CreateObject("scripting.dictionary") ' Colonne T
Dim Val As Range
For Each Val In ResPlage.Resize(ResPlage.Rows.Count, 1)
    Dic(0).Add Val.Text & "-" & Val.Offset(, 3).Text & "-" & Val.Offset(, 6).Text, 0 ' ......................... N
    Dic(1).Add Val.Text & "-" & Val.Offset(, 3).Text & "-" & Val.Offset(, 6).Text & "-" & FRes.Cells(1, 15), 0 ' O
    Dic(2).Add Val.Text & "-" & Val.Offset(, 3).Text & "-" & Val.Offset(, 6).Text & "-" & FRes.Cells(1, 16), 0 ' P
    Dic(3).Add Val.Text & "-" & Val.Offset(, 3).Text & "-" & Val.Offset(, 6).Text & "-" & FRes.Cells(1, 17), 0 ' Q
    Dic(4).Add Val.Text & "-" & Val.Offset(, 3).Text & "-" & Val.Offset(, 6).Text & "-" & FRes.Cells(1, 18), 0 ' R
    Dic(5).Add Val.Text & "-" & Val.Offset(, 3).Text & "-" & Val.Offset(, 6).Text & "-" & FRes.Cells(1, 19), 0 ' S
    Dic(6).Add Val.Text & "-" & Val.Offset(, 3).Text & "-" & Val.Offset(, 6).Text & "-" & FRes.Cells(1, 20), 0 ' T
Next
'
' -----------------------------------------------------------------------------------------------------------------------------------------------
' Feuil base : Sheet 1
Dim FBase As Worksheet
    Set FBase = Worksheets("Sheet 1")
Dim Tbase() As Variant
    Tbase = FBase.Range(FBase.Cells(2, 1), FBase.Cells(FBase.Cells(1048576, 1).End(xlUp).Row, FBase.Cells(1, 16384).End(xlToLeft).Column))
'
' -----------------------------------------------------------------------------------------------------------------------------------------------
' Resultat ' Colonne N
Dim Cle As Variant
Dim j As Byte
Dim i As Long
For i = LBound(Tbase, 1) To UBound(Tbase, 1)
    For j = LBound(Dic) To UBound(Dic)
        For Each Cle In Dic(j).keys
            If Dic(j).Exists(Cle) Then
                If Tbase(i, 2) & "-" & Tbase(i, 5) & "-" & Tbase(i, 8) = Cle Then
                    Dic(j).Item(Cle) = Dic(j).Item(Cle) + 1
                End If
                If Tbase(i, 2) & "-" & Tbase(i, 5) & "-" & Tbase(i, 8) & "-" & Tbase(i, 11) = Cle Then ' Tbase(i, 11) = Colonne K:K
                    Dic(j).Item(Cle) = Dic(j).Item(Cle) + 1
                End If
            End If
        Next Cle
    Next j
Next i
j = Empty: i = Empty
    For Each Val In ResPlage.Resize(ResPlage.Rows.Count, 1)
        Tres(Val.Row - 1, 1) = Dic(0).Item(Val.Text & "-" & Val.Offset(, 3).Text & "-" & Val.Offset(, 6).Text)
        Tres(Val.Row - 1, 2) = Dic(1).Item(Val.Text & "-" & Val.Offset(, 3).Text & "-" & Val.Offset(, 6).Text & "-" & FRes.Cells(1, 15))
        Tres(Val.Row - 1, 3) = Dic(2).Item(Val.Text & "-" & Val.Offset(, 3).Text & "-" & Val.Offset(, 6).Text & "-" & FRes.Cells(1, 16))
        Tres(Val.Row - 1, 4) = Dic(3).Item(Val.Text & "-" & Val.Offset(, 3).Text & "-" & Val.Offset(, 6).Text & "-" & FRes.Cells(1, 17))
        Tres(Val.Row - 1, 5) = Dic(4).Item(Val.Text & "-" & Val.Offset(, 3).Text & "-" & Val.Offset(, 6).Text & "-" & FRes.Cells(1, 18))
        Tres(Val.Row - 1, 6) = Dic(5).Item(Val.Text & "-" & Val.Offset(, 3).Text & "-" & Val.Offset(, 6).Text & "-" & FRes.Cells(1, 19))
        Tres(Val.Row - 1, 7) = Dic(6).Item(Val.Text & "-" & Val.Offset(, 3).Text & "-" & Val.Offset(, 6).Text & "-" & FRes.Cells(1, 20))
    Next
' resultat
    FRes.Cells(2, 14).Resize(UBound(Tres, 1), UBound(Tres, 2)).ClearContents
    FRes.Cells(2, 14).Resize(UBound(Tres, 1), UBound(Tres, 2)) = Tres
MsgBox Timer - t
Application.ScreenUpdating = True
End Sub
Merci beaucoup pour ce code. Cela marche parfaitement !

Je comprend bien le code pour l'adapter lorsque j'ai des colonnes supplémentaires donc c'est parfait !

A bientôt

Loïc
 

Loïc DUBOIS

XLDnaute Occasionnel
Re,
Sélectionnes tout ce code, et mets-le à la place du tien...
PowerQuery:
let
 Source = Excel.Workbook(File.Contents("/Users/loicdubois/Desktop/test exccel trop lourd.xlsx"), null, true),
 Navigation = Source{[Item = "Sheet 1", Kind = "Sheet"]}[Data],
 #"En-têtes promus" = Table.PromoteHeaders(Navigation, [PromoteAllScalars = true]),
 ModType = Table.TransformColumnTypes(#"En-têtes promus", {{"fund", type text}, {"company", type text}, {"industry", type text}, {"meetingID", Int64.Type}, {"meetingDate", type date}, {"meetingType", type text}, {"item", type text}, {"proposal", type text}, {"managementRecommendation", type text}, {"proponent", type text}, {"voteDecision", type text}, {"financiallyMaterial", type logical}, {"subject", type text}, {"parent", type text}}, "fr"),
    Pivot = Table.Pivot(ModType, List.Distinct(ModType[voteDecision]), "voteDecision", "fund", List.Count),
    Total_Nb_Votes = Table.AddColumn(Pivot, "Nb Votes", each List.Sum({[for], [abstain], [n], [against]}), type number)
in
    Total_Nb_Votes
ça, c'est juste pour les essais
Ensuite, on fera du plus propre...
Cela marche parfaitement sur le fichier test. Merci beaucoup, pour ton temps et de m'avoir montré power query !

Loïc
 

laurent950

XLDnaute Accro
Bonsoir @Loïc DUBOIS ,

vous avez noté cela : excel crache très souvent après avoir attendu 3h+ pour que ma formule soit appliqué à 38000 lignes

Vos fichiers pour vos les bases de données brutes comprennent entre 400k et 950k lignes

Qu'elle est le temps de traitement avec mon code en Poste #19 pour Info ?
 

Loïc DUBOIS

XLDnaute Occasionnel
Bonsoir @Loïc DUBOIS ,

vous avez noté cela : excel crache très souvent après avoir attendu 3h+ pour que ma formule soit appliqué à 38000 lignes

Vos fichiers pour vos les bases de données brutes comprennent entre 400k et 950k lignes

Qu'elle est le temps de traitement avec mon code en Poste #19 pour Info ?
J'ai testé sur un fichier contenant 370k lignes. Pour 8 colonnes, cela prend moins de 5 minutes. La je viens de tester avec 42 colonnes et cela prend autant de temps.

Encore merci.

Loïc
 

Cousinhub

XLDnaute Barbatruc
Re-,
Serait-il possible d'avoir un retour sur ma proposition?
Si cela a juste pris un peu de mon temps pour rien, (de ton côté), de mon côté, ce qui m'intéresse, c'est d'essayer de comprendre PQ dans l'univers "MAC"
Si tu as obtenu le résultat désiré, et que tu ne veux pas essayer plus avant, bah, ce sera ainsi.. :)
 

Discussions similaires

Réponses
9
Affichages
445
Réponses
1
Affichages
1 K

Statistiques des forums

Discussions
312 209
Messages
2 086 273
Membres
103 168
dernier inscrit
isidore33