Affichage Matriciel - Style Croisé Dynamique sans calcul

Bonjour,

Je suis nouveau par ici, et forcément novice en VBA. Je souhaite passer de l'affichage du tableau "d'en haut" vers le tableau "d'en bas" du fichier excel ci- joint.

J'ai créé une dernière colonne de concaténation. Le but, recopier la colonne B du tableau "d'en haut" selon le modèle du tableau "en bas" sans doublons, naturellement.

L'idée est d'avoir sur ce modèle, un code dynamique (qui fonctionne quel que soit la taille de la table initiale, où les champs lignes et colonnes sont à choisir par l'utilisateur. Je construis donc petit à petit le projet (qui ressemble à un croisé dynamique, mais sans les opérations de synthèse, car juste l'affichage est voulu).

Vous trouverez mon code par la combinaison Alt+F11. Son problème:

  • Il y a un décalage que je n'arrive pas à explique dans le recopiage de la première colonne
  • La fonction RechercheV est inopérante à cause d'un problème de Plage qui donne une erreur code 13.
  • A dire vrai, je souhaite parcourir la matrice en comparant la concaténation du couple (champs Ligne; Champs Colonne) de la matrice pour faire une RechercheV de cette concaténation dans la plage initiale et remplir par les valeurs correspondantes.

Je veux utiliser "cells" mais problème, je ne pars pas de la première cellule(1,1). La cellule de départ étant dynamique, je ne sais comment me repérer dans la grille. J'ai pensé à me débrouiller avec des "range" successifs... idée de contournement que je creuse encore. Je m'emmêle un peu les pinceaux avec les imbrications de boucles.

J'ai été trop long. Je remercie votre courage, votre compréhension et votre patience. Je sais que je demande beaucoup de choses à la fois, mais je bloque et peine à avance depuis un moment.

Auriez-vous quelques suggestions pertinentes svp?

Vous remerciant d'avance,

Bien à vous,

29test-vba.xlsm (31.46 Ko)

Bonjour,

une manière de faire

voir l'usage des dictionnaire sur le très bon site de JB (dans le code)

P.

Re-Bonjour,

Merci beaucoup de votre retour rapide. C'est just..GENIAL, Waouh !!!! Votre proposition est très concise, très économique en lignes de code. C'est parfait. Je vais m'en inspirer pour voir comment le rendre dynamique (En fait, je ne sais pas s'il l'est déjà, je vais scruter minucieusement pour en comprendre mieux le fonctionnement).

Un grand merci encore!

Yeshua a écrit :

Re-Bonjour,

Merci beaucoup de votre retour rapide. C'est just..GENIAL, Waouh !!!! Votre proposition est très concise, très économique en lignes de code. C'est parfait. Je vais m'en inspirer pour voir comment le rendre dynamique (En fait, je ne sais pas s'il l'est déjà, je vais scruter minucieusement pour en comprendre mieux le fonctionnement).

Un grand merci encore!

Merci du retour

Je ne maîtrise pas la chose (c'est un code inspiré de JB , je le site dans le code) mais d'autres ici oui

ps: le site de JB est une référence

patrick1957 a écrit :
Yeshua a écrit :

Re-Bonjour,

Merci beaucoup de votre retour rapide. C'est just..GENIAL, Waouh !!!! Votre proposition est très concise, très économique en lignes de code. C'est parfait. Je vais m'en inspirer pour voir comment le rendre dynamique (En fait, je ne sais pas s'il l'est déjà, je vais scruter minucieusement pour en comprendre mieux le fonctionnement).

Un grand merci encore!

Merci du retour

Je ne maîtrise pas la chose (c'est un code inspiré de JB , je le site dans le code) mais d'autres ici oui

ps: le site de JB est une référence

Je ne connaissais pas. Merci pour l'information, j'irai de ce pas jeter un oeil. C'est tellement formidable quand ça marche, on se sent tellement heureux

Mais petit précision sur le dimensionnement du tableau, pourquoi avoir le commentaire 'ReDim A(1 To 10, 1 To NbLignes) ?

re,

parce que c'est encore une chose que je ne maîtrise toujours pas...

P.

patrick1957 a écrit :

re,

parce que c'est encore une chose que je ne maîtrise toujours pas...

P.

Anwh... je comprends. Pour n'y connaître pas grand chose sur la quesiton, vous m'avez beaucoup avancé. Un grand bravo à Vous, MES RESPECTS!

Bonjour,

J'ai été sur le site de JB. Je n'ai hélas pas pu retrouver le cours sur le sujet. Sauriez-vous si le sujet est traité pour les affichage 3D? Par 3D, j'entends le nombre de champs pris en compte.

Merci beaucoup.

Bonjour à tous,

J'ai tenté une proposition en feuille 2. Je veux passer tu tableau 2 au tableau 3. Le tableau 1 affiche ce que me donne ma macro.

On avance à petit bout.

Je suis ouvert à vos éventuelles propositions si vous en avez.

Très cordialement,

Y.

Bonjour,

essaye ceci

Option Explicit

Sub InverserData()      ' Inspiré par le code de Boisgontier
                        ' http://boisgontierjacques.free.fr/
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

P.

Bonjour Patrick,

Je ne sais comment remercier votre investissement. C'est encore une fois de plus, vraiment formidable comme proposition. J'aime beaucoup. C'est tout à fait ce que je recherchais au seul détail près: pour chaque élément du champ 1, le résumé des valeurs du champs 2 (même quand ceux-ci n'ont pas de valeur associée).

Ce sera ma part de recherche, vous avez beaucoup fait jusque là. Je vais chercher une proposition à vous présenter, et vous me dirai ce que vous en pensez.

Merci encore. Merci beaucoup pour votre bonne volonté, votre disposition, votre temps etc bien d'autres....merci pour tout!

Bien à vous,

Y.

Bonjour Patrick,

Ton programme fonctionne super bien. J'ai tenté de l'adapter à la suite de mon projet, voulant y arriver "seul" cette fois. Rêve du débutant, tu vois lol mais bon je n'ai pas trouver de solution.

J'ai créé une nouvelle demande du coup avec la nouvelle problématique: Modifer affichage tableau 4 champs - style TCD.

Peux tu y jeter un coup d'oeil stp?

Bonjour Patrick,

Je voulais y arriver seul, j'ai tout fait ou presque jusque là. Je n'obtient pas l'affichage voulu. J'ai proposé la question sous un autre titre: modifier affichage d'un tableau 4 champs - style TCD qui montre l'affichage finale recherché.

Comme nous avons commencé ensemble, peut être m'aideras tu à arriver à la finalité recherchée.

Bien à toi,


Navré pour les fautes grammaticales, je viens de me relire et ne peux plus modifier du coup

Rechercher des sujets similaires à "affichage matriciel style croise dynamique calcul"