XL 2013 Fonction matricielle trop lourde

almourasel

XLDnaute Occasionnel
Salut a tous


je suis nul avec VBA, je cherche vos supports svp , j'ai une fonction matricielle trop lourde pour me donner une résultant ( elle dure de 2 heures meme plus sans toucher aucune bouton ), celle la fonction utilisé

=+LARGE(IF($B$2:$B$194634=B2;IF($A$2:$A$194634=A2;IF($I$2:$I$194634=I2;$C$2:$C$194634)));1)

comme montre en haut j ai des infinité des lignes , comment faire pour rendre cette formule en VBA svp.
chaque fois je dois nettoyer les lignes de A1:G1 et mettres de nouveaux les données mais sa aussi prends beaucoup de temps aussi que le copier coller de data dans cette zone que la fonction utilisé matricielle et les lignes dépasse 100000 lignes.

merci pour votre support d'avance.
 

Pièces jointes

  • test.xlsx
    30.7 KB · Affichages: 14
  • test.xlsx
    30.7 KB · Affichages: 4

chris

XLDnaute Barbatruc
Bonjour à tous

C'est un non sens de créer un tableau structuré sur 1 millions de lignes, alors qu'il s'agrandit naturellement, et plus encore une matricielle sur autant de lignes.

Une fois le tableau ramené à sa taille logique (pas de ligne vide) :
VB:
=GRANDE.VALEUR(SI([Material]=[@Material];SI([Customer]=[@Customer];SI([Week Order]=[@[Week Order]];[Dlv.schedule])));1)
ou
VB:
=MAX(SI(([Material]=[@Material])*([Customer]=[@Customer])*([Week Order]=[@[Week Order]]);[Dlv.schedule];0))

Mais ne serait-il pas mieux de déplacer ce calcul de synthèse dans un TCD ?
 

Pièces jointes

  • MaxTableau.xlsx
    18.6 KB · Affichages: 5
Dernière édition:

almourasel

XLDnaute Occasionnel
Merci pour la manière le gérer avec TCD mais comment faire apparaitre seulement les valeurs " order quantity " pour les valeurs max seulement .

j'ai fais un example celle l image ci dessous. ce que je cherche que le TCD m 'affiche seulement le max dlc schedule par rapport Customer / Material / Order Week.
par example pour le produit F000134174 je veux voire seulement lignes en jaune puisque le max Dlv Schedule W08 c est numéro 5 et max Dlv Schedule 8 pour la semaine W09.
même chose pour les autres produits , comment faire ??

Merci.
 

Pièces jointes

  • Result.PNG
    Result.PNG
    18.9 KB · Affichages: 15

job75

XLDnaute Barbatruc
Bonjour almourasel, djidji59430, chris,
C'est un non sens de créer un tableau structuré sur 1 millions de lignes, alors qu'il s'agrandit naturellement, et plus encore une matricielle sur autant de lignes.
Tout à fait d'accord chris.

J'ai testé le fichier du post #1 sur 30 000 lignes, les formules se calculent chez moi en 60 secondes.

Sur le fichier .xlsm de même taille joint cette macro s'exécute chez moi en 0,18 seconde :
VB:
Private Sub Worksheet_Change(ByVal Target As Range)
Dim d As Object, tablo, i&, x$, y#, a()
Set d = CreateObject("Scripting.Dictionary")
With [Table1] 'tableau structuré
    '--- calcul des maxima---
    tablo = .Resize(, 9) 'matrice, plus rapide
    For i = 1 To UBound(tablo)
        x = tablo(i, 1) & Chr(1) & tablo(i, 2) & Chr(1) & tablo(i, 9)
        tablo(i, 1) = x 'mémorise la concaténation
        If Not d.exists(x) Then d(x) = 0
        y = Val(Replace(tablo(i, 3), ",", "."))
        If y > d(x) Then d(x) = y
    Next i
    '---restitution en colonne M---
    ReDim a(1 To UBound(tablo), 1 To 1)
    For i = 1 To UBound(tablo)
        a(i, 1) = d(tablo(i, 1))
    Next i
    Application.EnableEvents = False 'désactive les évènements
    .Columns(13) = a
    Application.EnableEvents = True 'réactive les évènements
End With
End Sub
Elle s'exécute automatiquement quand on modifie ou valide une cellule quelconque.

A+
 

Pièces jointes

  • test(1).xlsm
    797.3 KB · Affichages: 7
Dernière édition:

job75

XLDnaute Barbatruc
Re, salut CISCO,

En fait la solution que j'envisageais ne va pas, il faut toujours recalculer toute la colonne M.

Sur 600 000 lignes l'exécution se fait chez moi en 4,2 secondes.

Si la macro Worksheet_Change ne vous convient pas modifiez son nom et affectez-la à un bouton.

A+
 

Statistiques des forums

Discussions
312 294
Messages
2 086 896
Membres
103 404
dernier inscrit
sultan87