Selection d'une plage dans une variable Tableau

Bonjour à Tous,

Est il possible de sélectionner une plage dans une variable tableau? si oui, quel est la syntaxe?

Bonjour,

Si c'est fonction de numéros de lignes et de colonnes, voir : Application.Index

Sinon fournir plus d'explications...

Merci AgloPlus pour ta réponse. Je vais voir avec Application.Index. Pour être plus claire, disons que j'ai une variable tableau Tab(50,10) et que dans ce tableau, je souhaite sélectionner la plage Tab(Tab(1,1),Tab(1,10)). Je voulais savoir la syntaxe.

Bonjour,

Je vais essayer de te répondre en l'état de mes connaissances. Si je me trompe, qu'on me corrige.

Par définition, tu ne peux sélectionner que des choses qui sont présentes physiquement...

Le tableau en mémoire, comme son nom l'indique, reste "virtuel" et en mémoire. On ne peut donc pas sélectionner à l'intérieur. Quel en serait l'intérêt par ailleurs ? On sélectionne quelque chose en vue de faire une action ensuite.

Pour le tableau en mémoire, tu peux boucler sur toutes les lignes concernées pour appliquer cette action. Mais comme tu ne dis pas de quoi il s'agit, c'est difficile de te répondre.

Merci JoyeuxNoel pour ta réponse.

Même si ton tableau est "virtuelle", il est bien composé de valeur que tu peux récupérer comme bon te semble. Si j’écris Tab(1,10).Value, il va me donner la valeur qui se trouve a cette emplacement. d'autre part, il y a un grand intérêt, à mon humble avis, à travailler dans une variable tableau pour des raison de rapidité dans l’exécution de ton code.

Je te joint un tableau qui je l'espère sera un peu plus claire

Zut le tableau...

5classeur2.xlsx (10.93 Ko)

Re,

Je t'invite à relire mon message précédent. Si tu y trouves une remise en cause de l'intérêt des tableaux en mémoire, n'hésite pas à me le signaler.

Ce que je remets en cause, c'est la possibilité de "sélectionner" des plages à l'intérieur de ce tableau. (sans toutefois dire que c'est réellement impossible, même si je pense pense que c'est le cas ...)

Tu ne devrais donc pas sélectionner toutes les valeurs que tu souhaites, mais boucler sur toutes les valeurs (avec un for ... each par exemple) et vérifier si la valeur testée à l'instant T répond à la condition qui t'intéresse (if ... then).

Mais encore une fois, je peux me tromper.

Merci JoyeuxNoel, je crois que je viens de comprendre ce que tu voulais dire. Je vais essayer avec une boucle mais je ne pense pas que cela répondra à mes attentes. Sinon je vais l'afficher sur une feuille, faire mes sélections et déplacer , et refaire une nouvelle variable tableau. En tous cas, un grand merci pour le temps que tu m'a accordé.

Pas de souci, avec plaisir.

Attendons de voir ce qu'en dit AlgoPlus, ou ce qu'en disent d'autres.

J'ai toujours du mal à visualiser ce que tu souhaites faire pour de vrai dans ton tableau donc j'ai du mal à savoir si c'est réalisable ou non.

Pour être plus claire, disons que j'ai une variable tableau Tab(50,10) et que dans ce tableau, je souhaite sélectionner la plage Tab(Tab(1,1),Tab(1,10)). Je voulais savoir la syntaxe.

Est ce que le souhait est d'obtenir une variable qui contiendra de TAb(1,1) à Tab(1,10) soit la première ligne du tableau Tab, ou bien d'obtenir la valeur de Tab(TAb(1,1), Tab(1,10)) ( par exemple si TAb(1,1) =10 et Tab(1,10)=3 , récupérer Tab(10,3) ) ?

S'il s'agit de récupérer une plage (c'est le titre du post....) :

Pour une ligne complète (ici ligne 3) dans la variable(tableau) Recup :

Recup= Ligne = Application.Index(Tab, 3, 0)
       'ou bien
Lig = 3
Recup = Application.Index(Tab, Lig, 0)

Pour un "paquet" de ligne consécutives, par exemple lignes 3 à 7, pour toutes les colonnes :

Lig = Evaluate("row(3:7)")
Recup = Application.Index(Tab, Lig, 0)

Pour des lignes pas forcément consécutives , pour toutes les colonnes :

Lig = Application.Transpose(Array(1, 2, 5, 8, 9))
Recup = Application.Index(Tab, Lig, 0)

Je peaufine pour les colonnes et je reviendra...

Pour les colonnes

Lig = Application.Transpose(Array(1, 4, 2, 3))
Col = Array(2, 3, 4) 'énumération des colonnes souhaitées
Recup = Application.Index(Tab, Lig, Col)

Avec l'utilisation de Array (pour les lignes et les colonnes) , l'ordre d'écriture des numéros(lignes ou colonnes) dans l'array détermine l'ordre dans lequel seront récupérées les données...

Selon la taille du tableau initial, la récupération d'une plage peut être gourmande (en temps).

Si c'est la cas, envisager de passer par des boucles

Par ailleurs, il vaut mieux éviter les noms réservés VBA comme noms de variable (ex: Tab)

Voila ce que ça pourrait donner pour l'exemple du classeur fourni, même si je n'ai pas saisi "... et selectionner la ligne pour pouvoir les bouger dans mon tableau" :

Dim T1, Recup, Lig As Integer, Col As Integer
T1 = Range("A5:AW9") 'en supposant que c'est la tableau initial ?
Lig = Application.Transpose(Array(3, 4, 5))
Col = Array(5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20)
Recup = Application.Index(T1, Lig, Col)

'pour "coller" la sélection
Range("E12").Resize(UBound(Recup, 1), UBound(Recup, 2)) = Recup

Merci AlgoPlus. J'ai bien compris que je n'avais été claire du tous. Pour essayer de faire simple, je te fourni le classeur avec les macro dedans. Elle à été exécuter car je ne peux pas mettre en ligne le classeur qui est associé(mais toute les variable tableau existent). Jusqu'au Module " D01_Ass_Devis_HTS " et la Macro " Affichage_Tab_HTS " , j'arrive a faire tous ce que je veux dans ma variable tableau. A Partir de la Macro " Affichage_Tab_HTS " je suis obliger d'afficher mon tableau dans une feuille pour faire les macros qui suivent. Pour la suite, je suis obligé de sélectionner une plage que je fais bouger.... d’où ma question.

Encore une fois, merci à tous pour le temps que vous m'accorder.

4classeur2.xlsm (132.44 Ko)

ben.... ça ne m'éclaire pas du tout ...

Si le but n'est pas de sélectionner une "partie" d'une variable tableau je n'ai rien compris depuis le début, et donc j'abandonne.

Bonne suite

Merci quand même. Je vais écrire sur une feuille, ce sera plus simple.

Rechercher des sujets similaires à "selection plage variable tableau"