Modifier affichage tableau 4 champs- Style TCD
Bonjour,
Jen souhaite passe du tableau 1 au 2 du fichier joint. Colonne champs1 triée décroissant, colonne champs2 triée croissant, matrice de valeurs associée.
J'ai pompé un code de Patrick du forum que j'essaie d'adapter..... sans réel succès à cause d'une contrainte de taille: afficher pour chaque élément trié décroissant du champs 1, un nombre constant des éléments trié croissant du champs2 ( Le tout avec l'affichage matricel du champs4 en fonction du champs3 du tableau 1).
Ci-joint le bout de code de Patrick du forum. Il fonctionne très bien, seulement il ne garde pas un nombre constant par élément de champs1. (Je voulais relever le défi seul, et voilà c'est tellement réussi. I need help please
Merci d'avance.
Option Explicit
Sub InverserData() ' Inspiré par le code de Boisgontier
' <!-- m --><a class="postlink" href="http://boisgontierjacques.free.fr/">http://boisgontierjacques.free.fr/</a><!-- m -->
Dim d1, d2
Dim Lig&, Col&, Mlig&, Mcol, NbLignes&, I&
Dim F1, F2 As Worksheet
Dim c, Tmp1, Tmp2
Dim AA, BB
Set d1 = CreateObject("Scripting.Dictionary")
Set d2 = CreateObject("Scripting.Dictionary")
Set F1 = Sheets("feuil1"): Set F2 = Sheets("Feuil2")
NbLignes = F1.Range("A1").End(xlDown).Row
F2.[A1].CurrentRegion.ClearContents
Dim A(1 To 30, 1 To 30)
'ReDim A(1 To 10, 1 To NbLignes)
Lig = 1
Col = 1
Mlig = Lig
Mcol = Col
For Each c In F1.Range("a1:a" & F1.[A65000].End(xlUp).Row)
Tmp1 = c & "µ" & c.Offset(, 1) ' concaténation des 2 premières colonnes pour faire une clé
If d1.exists(Tmp1) Then Lig = d1(Tmp1) Else d1(Tmp1) = Mlig: Lig = Mlig: Mlig = Mlig + 1
Tmp2 = c.Offset(, 2) ' zone de titres avec des occurences uniques
If d2.exists(Tmp2) Then Col = d2(Tmp2) Else d2(Tmp2) = Mcol: Col = Mcol: Mcol = Mcol + 1
A(Lig, Col) = c.Offset(, 3) ' tableau totalisanr la croisées des lignes/colonnes
Next c
AA = d1.keys: BB = d1.items
For I = 0 To UBound(AA)
s = Split(AA(I), "µ")
F2.Cells(I + 2, 1) = s(0) ' séparation de la clé en 2 colonnes
F2.Cells(I + 2, 2) = s(1)
Next I
'F2.[A2].Resize(d1.Count, 1) = Application.Transpose(d1.keys)
F2.[c1].Resize(1, d2.Count) = d2.keys
F2.[c2].Resize(d1.Count, d2.Count) = A
[F2].[A1] = "Champs1": [F2].[B1] = "Champs2"
F2.Activate
End Sub
Rebonjour,
En pièce jointe le fichier pour une meilleure compréhension de la problématique.
Bien à vous,
Re Bonjour Forum,
Je souhaite présenter un peu l'idée. On imagine qu'on est un professeur principal d'une classe qui a un nombre constant d'élèves inscritss sur plusieurs dates.
Chaque jour, les profs font des contrôles, les élèves présents ont leur note affectée par matière et par jour. Les jours sont ordonnés du plus récent au plus ancien. Les élèves absents ont zéro dans toutes les matières. ( Un peu sévères dans ce lycée, les profs)
Le bout de code plus haut, donne exactement la note par élève par jour (non trié) sans compter les absents. Les absents disparaissent de la classe lorsqu'ils n'ont pas de note.
Un exemple TRES FICTIF pour présenter un peu l'idée du projet. Les élèves de la classe sont:
MOMO
MOTI
PIPI
POPO
TITI
TOTO
ZIZI
ZOZO
Bonjour,
Je ne suis pas dans la possibilité de répondre pour un moment, je suis à l'étranger et je ne peux que lire sur une tablette ou pc mais sans mon excel...
J'espère qu'un autre participant pourra t'aider
P.
Bonjour Patrick,
Je te remercie de ton retour rapide. C'est vraiment très sympathique.
De bonnes choses à toi,
Yeshua.