Inversion d'un tableau via dictionnaire VBA (pas de PQuery ou tcd)

Hello,

Merci mafraise mais pardon... je ne croque pas la pomme

BsAlv ton lien est très bon, ainsi que la référence à feu JB ... en revanche je suis inquiet d'apprendre une obsolescence programmée concernant cet objet dictionary. C'est un peu la base quand ton traite de gros volumes de données. As tu des sources ?

LouReeD je n'utilise quasi jamais les types personnalisés, sorry. Essaye de contourner en passant ton arr dans un variant ?

arr(2).T = 200
tmp = arr
d.Add "Formes", tmp
Debug.Print d("Formes")(2).T

ou peut-être aussi à la lecture ... ?

arr(2).T = 200
tmp = arr
d.Add "Formes", tmp

r = d("Formes")
Debug.Print r(2).T

ca fait un peu usine à gaz. Sinon en utilisant une classe ?

A tous...

Alors tout d'abord un énorme merci à tous !

Content de voir que ça a amené une belle discution positive et dans un bon esprit :)

Je regarderai chacun des posts et répondrai dans la semaine mais déjà je suis satisfait que ma demande "par dico" soit parmi les réponses mais néanmoins qu'une très belle explication de PQ a été donnée, j'essaierai donc de la mettre en route et de comprendre comment ça fonctionne.

L'esprit de ce forum ( où je suis depuis 10 ans tout de même ) m'a toujours plu et aidé, tout comme j'essaye d'aider à mon humble niveau, mais vous l'aurez compris, je suis fan des "dico" pour la vitesse ( surtout combinés avec une table en mémoire) sans toutefois tout comprendre. Je préfère ça mais je dois faire des efforts pour comprendre n'étant pas informaticien, juste passionné :)
A bientôt tous, je donnerai mon commentaire à chacun car ça a été un plaisir de vous lire mais je ne peux être libre avant mardi je pense.

Patrick

Bonsoir,

avec l'aide de Klin89, après différents essais en suivant le site (celui-ci), j'obtiens ceci :

en module standard :

Public Dico As Object
Sub TestLouReeD()
    Set Dico = CreateObject("Scripting.Dictionary")
    Dim Formes As CFormes
    ' on boucle sur 5 éléments
    For i = 1 To 5
        ' Crée et initialise l'objet Formes
        Set Formes = New CFormes
        Formes.T = 20 * i
        Formes.L = 13 * i
        ' Ajoute la Formes à la collection
        Dico.Add i, Formes
    Next i
    For Each v In Dico.keys
        Debug.Print "Les valeurs de l'item " & v & " : " & Dico.Item(v).T, Dico.Item(v).L
    Next v
    Debug.Print "Nombre d'item : " & Dico.Count
    Debug.Print "Les valeurs de l'item 2 : " & Dico.Item(2).T, Dico.Item(2).L
    Debug.Print "Suppression de l'item 2..."
    Dico.Remove 2
    Debug.Print "Nombre d'item : " & Dico.Count
    For Each v In Dico.keys
        Debug.Print "Les valeurs de l'item " & v & " : " & Dico.Item(v).T, Dico.Item(v).L
    Next v
End Sub

en module de classe "CFormes":

Public T As Double
Public L As Double

J'ai donc dans un Dico VBA, une suite d'objets de type "personnalisé" avec différent paramètres !

Il me faut encore bien comprendre le "truc" pour l'adapter à mon besoin...

Le fichier :

@ bientôt

LouReeD

Re,

Pour le fun, une dernière version non pas avec des 'dictionary' mais avec des 'collections'. La structure collection est présente dans les deux environnements Windows et Mac (contrairement au dictionary qui n'existe pas sous Mac).

Le code est dans Module2 et il est un peu commenté. Dans le classeur joint, la base comporte 20 000 lignes.

...

re,

on est commencéà improviser hors le sujet ... .

LouReeD, c'est quoi exactement ton problème/besoin ? On peut sauvegarder plusieurs choses différentes en même temps dans un dictionaire, (voir PJ) par exemple une plage, des valeurs, une forme, une matrice, ... et puis les récupérer

@mafraise, avec ces removeduplicates et ce currentregion espérons qu'il n'y a pas des cellules vides dans cette plage.

Salut l'équipe,

pour la blague, évidemment, le "baiseur de millisecondes", notre ami BsAlv , sera certainement content de savoir que de simples tableaux (dans l'exemple de Mafraise de 20.000 lignes), même s'ils ne répondent pas, hélàs, à l'attente de Patrick, sont plus rapides, en tout cas sur ma machine, que tous les Dico du monde!
Vive VBA paléontologique!

A+

re, le "challenge" de Curulis ...

Avec un dictionaire (!), le tableau de mafraise en 0.125 sec (part1 = sans coller sur la feuille ) sur ma machine

Bonjour/soir,

Alors encore merci à tous !!!

Ensuite j'aime bien les dico ou collection et la vitesse avec laquelle ça travaille vous l'aurez compris.

Je suis suis pas à 2/1000 de secondes près, il faut que le compte soit bon, les solutions le proposent rapidement.

Les solutions de autres intervenants que je dois lire et relire également sont top bien sûr.

Demain, je regarde la solution et le tuto de @tomato que je remercie vivement pour ses explications données.

Je dois aussi remercier et tester ce qu'a montré @cousinhub qui a tout détaillé pour les ignares comme moi, je n'utilise jamais PQ ( à tort ?) parce que c'est pour le plaisir de la masturbation intellectuelle que je voulais faire ça avec dico/collection/tableau...Mais seuls les imbéciles ne changent jamais d'avis.

@Curulis a fait un code très court mais efficace.

Les commentaires de chacun sur les différents posts et dans le code sont très utiles !

Bien sûr le nombre de lignes n'est pas connu à l'avance et le nombre de colonnes est évolutif également, je n'ai pas testé tout mais à la première lecture ça le fait.

Je remercie donc tout le monde qui a participé à ce post en espérant que ça profitera à d'autres dans le futur... :) C'est ça un forum.

Les solutions que je retiendrai à ce jour sont celles de @mafraise et de @Curulis mais je vais regarder à PQ avec le tuto de @cousinhub bien sûr parce que j'ai vu pas mal de solutions dans d'autres posts avec ce système.

J'essaye demain si j'arrive à assimiler les codes retenus :)

Ouf, je ne travaille avec un Mac :)

P.

Salut Patrick,
Salut les as,

ah, je n'avais pas compris que le nombre de colonnes pouvait évoluer, seulement le nombre de lignes.
Ça ne change rien au coeur de la macro mais bien pour l'affichage lequel ne tient pas compte pour l'heure de cette variable, auquel cas je devrai apporter une légère modif'.
Le tout est de savoir si tu veux l'affichage à côté du tableau initial ou sur une autre page!

A+

Salut Patrick,
Salut les as,

ah, je n'avais pas compris que le nombre de colonnes pouvait évoluer, seulement le nombre de lignes.
Ça ne change rien au coeur de la macro mais bien pour l'affichage lequel ne tient pas compte pour l'heure de cette variable, auquel cas je devrai apporter une légère modif'.
Le tout est de savoir si tu veux l'affichage à côté du tableau initial ou sur une autre page!

A+

Je ne l'avais pas précisé, tu as raison les 2 peuvent varier en effet.

Il serait préférable de placer le résultat dans une autre feuille car les tâches qui sont en fait du temps de travail ( en minutes ) peuvent être plus ou moins longues et nombreuses.

Je pense avoir oublié un "détail"

J'ai un total (en haut pour chaque participant) mais peux-tu ajouter à la droite le total par tâche ?

Si pas je le ferai "à la main'

P.

Sans souci!

Salut Patrick,
Salut les as,

ton fichier avec les changements demandés :
- ton tableau converti en feuille 'RECAP'
- à droite, la colonne des totaux par tâche
- et tant qu'on y est, en haut de cette colonne, le total général!

À vérifier : le positionnement strict de ton tableau initial en [A5], évidemment! Sinon...
Toujours un double-clic sur la feuille 'Base' pour démarrer la macro. Toute forme d'activation est possible : à toi de nous dire ta façon de travailler!

11patrick-v2.xlsm (940.56 Ko)

A+

Bonjour à tous,

Super ! Le code est difficile à comprendre pour moi à la première lecture mais je vais lire et relire.

Pour lancer la macro, oui je sais la lancer depuis un bouton ou une forme , pas de soucis, et pareil je sais que la première cellule du tableau peut ne pas être "A5", no soucy.

Un grand merci à tout encore une fois, je me replonge dedans ainsi que la solution PQ .

Patrick

ps: je reste toujours sur le c.. pour la rapidité de vos codages et aussi ( mais ça je le savais) par l'exécution de ce code pour autant de lignes !

ps2: si on me demande ce genre de manipulations je ne manquerai pas de noter que ça vient de vous !

'soir

Mes yeux me jouent des tours ou on se rapproche dangereusement de l'algorithme par dico que j'avais codé ? Me trompe-je ou le besoin utilisateur évolue ? (changement qte de colonne = ne pas coder en dur le range des taches)

Vu le nombre de fois où ma V1 à été ouverte, j'ai décider de me refaire du mal avec une V2 !

6ton-bonheur-v2.zip (442.31 Ko)

Elle est plus rapide et intègre un magnifique BOUTON !

Ah, vous ai-je dis que la procédure est entièrement paramétrable ?

parametres

'soir

Hello,

....

Un grand merci à tout encore une fois, je me replonge dedans ainsi que la solution PQ .

...

Tu as fini ton grand bain?

Bonne journée

Tu as fini ton grand bain?

Bonne journée

Oui mais je nage comme un fer à repasser.
Il y a matière à brûler mes quelques neurones à la relecture des différents codes :)
La vitesse de vos réactions et aussi de l'exécution des codes présentés sur un grand nombre de datas m'impressionne :)

Merci encore

Patrick

Rechercher des sujets similaires à "inversion tableau via dictionnaire vba pas pquery tcd"