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

  • Initiateur de la discussion Initiateur de la discussion Calvus
  • Date de début Date de début

Boostez vos compétences Excel avec notre communauté !

Rejoignez Excel Downloads, le rendez-vous des passionnés où l'entraide fait la force. Apprenez, échangez, progressez – et tout ça gratuitement ! 👉 Inscrivez-vous maintenant !

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

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.
 
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:
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ù ?
 
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.
 
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:
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 ! 🙄
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

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

Ce code, par exemple affiche en O😛 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:
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

- Navigue sans publicité
- Accède à Cléa, notre assistante IA experte Excel... et pas que...
- Profite de fonctionnalités exclusives
Ton soutien permet à Excel Downloads de rester 100% gratuit et de continuer à rassembler les passionnés d'Excel.
Je deviens Supporter XLD

Discussions similaires

E
Réponses
0
Affichages
1 K
edelweiss95
E
N
Réponses
10
Affichages
1 K
N
C
Réponses
7
Affichages
1 K
Chalafraiz
C
S
Réponses
2
Affichages
17 K
G
Retour