Range dans un dictionnaire

Bonjour,

J'ai un petit problème et je ne sais pas quelle solution est la plus optimisée.

J'explique mon but : j'ai 5 onglets avec beaucoup de données, je les tries et organise sur un autre afin de faire une belle visualisation par catégorie tout ça. Jusque la j'utilisais des cellules nommées afin de savoir par exemple c'est un fruit donc on va dans le tableau des fruits. Sauf que petit problème je commence à avoir trop de cellule nommée, donc quand je veux fouiller dedans pour autre chose (non modifiable) ; ex : vérifier qu'une cellule nommée existe avant de s'y référer ; ça prend un temps monstre. Pour optimiser cela j'ai décidé de me passer de ces cellules nommées. J'avais l'idée de faire avec des find du coup sur des noms de table fixe, sauf que comme je fais beaucoup d'itération je pensais faire une fois des finds et stocker les ranges de mes tables dans un dictionnaire.

Après quelques tests tout marchait bien, sauf que je me suis rendu compte que si je stockais des ranges dans un dictionnaire, et qu'ensuite je supprimais ou ajoutais des lignes, je ne pouvais plus me référer à ce range.

Exemple pour que cela soit plus concret :

Sub test()
Dim dic As New Scripting.Dictionary
    dic.Add "Rng1", ActiveSheet.Range("B3")
    dic.Add "Rng2", ActiveSheet.Range("Z6")
    Debug.Print dic.Item("Rng1").Address & ":" & dic.Item("Rng2").Address
    ActiveSheet.Rows(4).Delete
    ActiveSheet.Rows(5).Delete
    'Erreur sur dic.Item("Rng2") comme on a supprimé les lignes
    Debug.Print dic.Item("Rng1").Address & ":" & dic.Item("Rng2").Address
End Sub

Donc ma question est-ce que quelqu'un a trouvé comment stocker des ranges dans une collection ou dictionnaire et que cela marche ?

Ou est-ce que quelqu'un à une idée de conception remplaçant cette solution pour éviter de faire 50 000 find dans mon programme final ?

Autre solution imaginé :

- J'avais pensé enregistrer l'adresse à la place du range et à chaque ajout modifier ce nombre de façon à toujours être la bonne (on ajout une ligne à la ligne 100 donc toutes les adresses supérieur à 100 font +1...), sauf que j'ai 80 tables et ça me fait perdre une éternité.

- J'avais pensé optimiser cela en faisant un find dans une colonne précise vers la table possédant un nom particulier et puis ensuite faire du case par case pour obtenir le début avec le find et la fin avec le case par case et au final ma table, sauf que dans une table je peux avoir beaucoup de données, et donc me fait perdre du temps.

Merci beaucoup d'avance. Vous allez me sauver !

Bonjour,

Je ne comprends rien à tes explications !

Mantenant pour ce qui me concerne, je ferai une base de données unique avec la notion de quategorie et ensuite je confirmerai la mise en page à un tableau dynamique croisé !

Bha au moins c'est clair mdrrr

Sauf que chaque catégories ne possède pas les mêmes informations et donc c'est impossible de comparer des fruits avec des conserves, donc impossible de faire une base de données unique et de faire un seul tableau croisé dynamique pour l'ensemble des tableaux. De plus ma source de données pour chaque produit provient de plusieurs fonction / range donc impossible d'utiliser les tableaux croisés dynamique pour moi.

Bien essayé quand même. Merci

Rechercher des sujets similaires à "range dictionnaire"