Sous liste

Bonjour à tous,

Je m'exerce en VBA et j'aimerais savoir si, comme en Python, il est possible de sélectionner une sous-liste à partir d'une liste initiale.

Par exemple dans mon code, je prends en argument ma liste (une serie de donnée type ligne ou colonne), et un entier nmax (inférieur ou égal à la taille de ma plage de données) qui correspond à la longueur de la liste que je veux.

Auriez-vous des pistes ?

Mon idée est de définir une liste vide et de l'implementer nmax fois avec les valeurs de ma liste initiale.

Function Raccourci(Liste,nmax)

Dim ListeRacc As Range

For i = 1 To nmax

ListeRacc = ListeRacc +Liste(1,i)

Next i

Raccourci = ListeRacc

End Function

Merci beaucoup !

Bonjour,

Là je ne vois pas bien où tu veux en venir !

Tu passes des arguments à ta fonction, non typés, on ne ovit donc pas bien le type de données reçues par la fonction.

Liste est censé être un tableau, peut logique de laisser une variable Variant pour l'accueillir, mais il faudrait ce qui est envoyé à l'appel de la fonction... Par contre, pas de raison (apparente) de ne pas typer nmax.

ListeRacc : variable déclarée en Range, mais non initialisée, donc référencée Nothing ! Elle n'est rien si on ne lui affecte pas une référence d'objet Range...

Et je suis curieux de savoir ce que ça peut faire si on lui additionne en boucle les éléments de Liste ! On ajoute des valeurs (supposées numériques puisqu'on utilise +) à son contenu, contenu d'un objet qui n'a pas d'existence...

Et c'est le contenu de cette "plage" que renvoie la fonction...

Pour mémoire, les tableaux en VBA sont constitués dans des variables Tableaux (déclarés, de taille fixe ou dynamique) ou bien par affectation d'un tableau à une variable de type Variant. Seuls les tableaux dynamiques peuvent être modifiés en taille en cours d'exécution (et uniquement la dernière dimension du tableau, si plusieurs).

Cordialement.

Bonjour,

Merci de ta réponse.

J'ai écrit comme si c'était en python, donc je ne suis pas étonné que ce soit bourré d'erreurs...

En effet faire + additionne le contenu, ce qui n'est pas ce que je veux, puisque je veux recomposer un tableau.

Après pour résoudre mon problème, je ne suis pas obligé de devoir recomposer un tableau, mais je n'ai pas d'autre idée ! Comment ferais-tu ?

Bonjour,

pas sûr d'avoir bien compris non plus.

Dim ListeRacc
ListeRacc = [A2].Resize(5).Value

te crée un tableau de 5 valeurs à partir de A2:A6

Le premier étant ListeRacc(1,1)

puis ListeRacc(2,1)

1er index = ligne du tableau, 2eme index = colonne du tableau (ici une seule, comme la source que j'ai prise)

Et si c'est vraiment une fonction à qui tu passes un tableau pour le raccourcir on verra si tu mets plus de détails, dont les types exacts comme dit MFerrand.

Au passage tu as Redim Preserve qui te permet de changer la dernière dimension qui aura été déclaré sans dimension :

Dim tableau()

ReDim tableau(1 To 2, 1 To 10)

tableau(1, 1) = "toto"

ReDim Preserve tableau(1 To 2, 1 To 5)

eric

Bonjour,

Les solutions sont nombreuses... mais il faut savoir avec quoi tu pars, et à quoi tu veux aboutir, pour pouvoir te donner un éventail de propositions adaptées...

Cordialement.

En gros je cherchait la fonction resize... Merci à tous les 2 !

Cordialement

Bonjour,

Resize n'est pas une fonction, mais une méthode de l'objet Range (quelques autres aussi, mais son utilisation principale est Range.Resize).

C'est notablement important dans ton cas, car une telle fonction, si elle existait, pourrait par exemple renvoyer un tableau redimensionné, mais ce n'est pas le cas...

Cordialement.

Rechercher des sujets similaires à "liste"