Problème de tableau, indice n'appartient pas à la sélection

Calvus

XLDnaute Barbatruc
Bonsoir le Forum,

Des heures que je me prends la tête avec un @#{#::^@ de tableau !
Mais quelque chose m'échappe.

Dans le fichier joint, ce que je souhaite obtenir, c'est la valeur Max d'un tableau après avoir calculé un CA avec Sumif :
Code:
ca = Format(Application.SumIfs([P:P], [B:B], nom, [N:N], ">=" & date1), "# ##0.00")     'CA année N

C'est après que les problèmes commencent, lorsque je veux créer un tableau pour comparer ces valeurs.
Sachant que je n'ai pas eu plus de succès avec un dictionnaire...

Et après, je voudrais extraire les seconde, troisième et quatrième valeurs.

Merci de votre aide.
 

Pièces jointes

  • Macro Max.xlsm
    17.6 KB · Affichages: 39

Calvus

XLDnaute Barbatruc
Re,

Bon ben je m'aide tout seul puisque personne pour m'aider.
J'ai donc avancé un peu, puisque j'ai résolu mon problème de tableau, et que j'arrive à trouver la valeur Max de la plage, ainsi :
VB:
Dim t
derlig = Range("A" & Rows.Count).End(xlUp).Row
t = Range("B2:B" & derlig).Rows
For i = 2 To derlig
ca = Format(Application.SumIfs([P:P], [B:B], Cells(i, 2), [N:N], "<" & date1), "# ##0.00")
t(i, 1) = ca
Next
[e140] = Application.Max(t)

Ne reste plus qu'à trouver comment faire la correspondance avec le nom cherché, et les 3 valeurs suivantes.
 

Dranreb

XLDnaute Barbatruc
Bonsoir.
Et avec le SumIfs de votre 1er code ?
Êtes vous sûr du For i = 2 To derlig ? Moi je ferais for L (j'utilise toujours une variable commençant par L pour un indice de ligne) For L = 1 To UBound(T, 1). Il est vrai que je ferais sans doute tout par exploration du tableau seulement, et plus en travaillant avec les cellules.
L'utilisation de Format, qui transforme une expression numérique en String, ne semble aberrante.

Et puis non, tout compte fait je ferais sans doute tout en explorant une collection construite par ma fonction Gigogne. C'est bien plus facile.
 
Dernière édition:

Dranreb

XLDnaute Barbatruc
Je prendrais Int(LExpression * 100 + 0.5) /100
Voyons voir. Vous voulez établir un classement des noms en ordre décroissant des sommes des seuls montants colonne P ou la colonne N est <= à une certaine date, c'est ça ?
Je le ferais avec une collection Gigogne par noms d'abord. Et Je reverserais tans un tableau définitif par montants décroissants à l'aide d'une indexation. (Mon module MGigogne comporte justement une procédure d'indexation, ça tombe bien)

Et le résultat, vous le voudriez où ?
 

Calvus

XLDnaute Barbatruc
Re,

Merci pour la formule.

Oui c'est ça. Les 4 chiffres d'affaire les plus importants, d'où le Sumifs, pour avoir le total du CA par client, et les 3 suivants.
Une collection Gigogne ? C'est quoi ça ?

Les résultats seront affichés dans 4 labels différents, donc dans une variable probablement.
 

Dranreb

XLDnaute Barbatruc
C'est une collection d'objets de type SsGr. C'est un type de donnée tout simple avec une propriété Id et une autre Co. Cette dernière est elle même une collection, ce qui permet à la fonction Gigogne d'en imbriquer autant qu'on veut comme des poupées russes.
Et pour l'explorer il suffit d'imbriquer autant de For Each SsGrNPlus1 In SsGrN.Co
La collection correspondant à la dernière colonne de regroupement spécifiée à la fonction Gigogne reçoit comme membres des tableaux à une dimension reprenant les valeurs de toute les lignes de détail se rappartant aux valeurs de Id de tous les SsGr en cours d'exploration. Mai la il n'y aura à priori qu'un seul niveau de regroupement: 2, la colonne des noms, et on aura donc tout de suite l'ensemble des lignes qui s'y rapportent.
 
Dernière édition:

Calvus

XLDnaute Barbatruc
Ok, je vois.... ou du moins je ne vois pas trop ;)
Dans tous ces termes, les poupées ne sont pas les seules à être russes, les termes également ! :rolleyes:
SSGrN ? SSGrN+1 ?? Ce sont vos abréviations ou des termes vba ?

J'ai redimensionné mon tableau, je renvoie donc le fichier avec les nouvelles dimensions.
Merci
 

Pièces jointes

  • Macro Max.xlsm
    17.3 KB · Affichages: 29

Dranreb

XLDnaute Barbatruc
Je ne vois guère de différence avec le précédent, et toujour pas de modèle du résultat souhaité.
Bon. Je le renvoie pour le moment simplement équipé du module MGigogne et du module de classe SsGr.
 

Pièces jointes

  • GigogneCalvus.xlsm
    40.3 KB · Affichages: 29

Calvus

XLDnaute Barbatruc
Merci Dranreb, mais que dois-je faire de ce fichier ? C'est parfaitement incompréhensible.
Je ne sais ni par où commencer, ni quoi modifier.

Concernant mon tableau, j'ai seulement modifié le nombre de colonnes. J'ai oublié de mettre le nouveau code. Le voici dans ce fichier. Et incroyable ! Ici la valeur Max est la bonne, contrairement à mon fichier original. C'est à y perdre son latin !
 

Pièces jointes

  • Macro Max.xlsm
    17.3 KB · Affichages: 28

Dranreb

XLDnaute Barbatruc
Ce code, par exemple affiche en O:p les totaux classés par noms des sommes en J où la date en H est inférieure ou égale à aujourd'hui, et en R3:S6 le top 4 :
VB:
Option Explicit

Sub Max()
Dim DateRéf As Date, Nom As SsGr, Détail, T(), L&, TX() As Long, N&, TR(), LR&
DateRéf = Date
ReDim T(1 To 50, 1 To 2)
For Each Nom In Gigogne(Feuil1, 2)
   L = L + 1: T(L, 1) = Nom.Id
   For Each Détail In Nom.Co
      If Détail(8) <= DateRéf Then T(L, 2) = T(L, 2) + Int(Détail(10) * 100 + 0.5) / 100
      Next Détail, Nom
Feuil1.[O3].Resize(50, 2).Value = T
IndexerParFusions TX, T, -2
ReDim TR(1 To 4, 1 To 2)
For N = 1 To 4
   LR = LR + 1: L = TX(LR)
   TR(LR, 1) = T(L, 2): TR(LR, 2) = T(L, 1): Next N
Feuil1.[R3:S6].Value = TR
End Sub
 
Dernière édition:

Dranreb

XLDnaute Barbatruc
Bonjour.
C'est parfaitement incompréhensible.
Je ne sais ni par où commencer, ni quoi modifier.
Personne ne me suggère jamais un mode d'emploi plus facile à comprendre, et je commence à croire qu'il fini par y avoir trop de commentaires guides d'utilisation.
Il n'y a jamais rien à modifier dans mes modules de service, ils sont à considérer comme des fournitures toutes faites au même titre qu'une DLL désignée par une ligne cochée dans les références disponibles, menu Outils, Références…
 

Pièces jointes

  • GigogneCalvus.xlsm
    52.7 KB · Affichages: 31

Discussions similaires

Membres actuellement en ligne

Statistiques des forums

Discussions
312 206
Messages
2 086 207
Membres
103 157
dernier inscrit
youma