Ceci est une page optimisée pour les mobiles. Cliquez sur ce texte pour afficher la vraie page.

sélectionner simultanément la 1ère ligne de 2 tableaux contigus

Magic_Doctor

XLDnaute Barbatruc
Bonjour,

Dans ma feuille, j'ai 2 tableaux nommés : "Tableau1" & "Tableau2".
Ces 2 tableaux ont la même hauteur et sont séparés par une colonne.
Je voudrais sélectionner simultanément la 1ère ligne des 2 tableaux en excluant la cellule appartenant à la colonne qui les sépare.
J'ai tenté ainsi :

Set BigTableau = Union(Tableau1, Tableau2)
BigTableau.Rows(1).Select

Ça ne me sélectionne que la 1ère ligne du 1er tableau ("Tableau1").

Comment s'y prendre ?
 

Staple1600

XLDnaute Barbatruc
Bonjour le fil, le forum

@Magic_Doctor
Toujours cette réticente à joindre un petit fichier XL...
Pourtant ca facilite grandement la résolution des questions, non ?

Testé donc sans PJ
VB:
Sub a()
Dim aa As Range, bb As Range
Set aa = [toto].Item(1).Resize(, [toto].Columns.Count)
Set bb = [titi].Item(1).Resize(, [titi].Columns.Count)
Range(aa.Address & "," & bb.Address).Select
End Sub
 
Dernière édition:

Staple1600

XLDnaute Barbatruc
Bonjour mapomme

Je connais quelq'un qui m'a dit qu'il fallait éviter d'écrire son code sur une seule ligne
Question lisibilité

Ah ce sacré rhume!
Union([toto].Rows(1), [titi].Rows(1)).Select

PS: Je me demande bien pourquoi il faut passer par un Select ?
 

Magic_Doctor

XLDnaute Barbatruc
Bonjour Staple1600,

Pour commencer, j'ai écrit n'importe quoi, j'aurais dû mettre :
Set BigTableau = Union([Tableau1], [Tableau2])
BigTableau.Rows(1).Select

Mais ça ne marche quand même pas (toujours la 1ère ligne du 1er tableau qui est sélectionnée).

Alors, j'ai bidouillé le truc suivant qui marche (pour la 1ère ligne, facile pour les autres, modifier l'Offset) :
Set BigTableau = Union([Tableau1], [Tableau2])
Set BigTableau = Union([Tableau1].Offset(0, 0).Resize(1, col1), [Tableau2].Offset(0, 0).Resize(1, col2))

"col1" étant le nombre de colonnes du tableau "Tableau1"
"col2" étant le nombre de colonnes du tableau "Tableau2"

C'est un peu lourd tout ça...

Puisque tu veux une PJ, je la mets donc.
Voir la macro "SelectTableaux" dans le module standard "Módulo1".
 

Pièces jointes

  • Forum.xlsm
    155.5 KB · Affichages: 39

Staple1600

XLDnaute Barbatruc
Re

Chez moi, mon code et celui de mapomme fonctionne.
Et j'ai testé en suivant la contrainte de ta question
Deux tableaux toto et titi, séparés par une colonne.
Dernier code testé et qui fonctionne
Union([toto].Rows(1), [titi].Rows(1)).Select
 

laurent950

XLDnaute Barbatruc
Bonjour,

Pour faire simple :

VB:
' Solution
Dim BigTableau As Range
Set BigTableau = Union([Tableau1], [Tableau2])
Union(BigTableau.Areas.Item(1).Rows(1), BigTableau.Areas.Item(2).Rows(1)).Select

La variable BigTableau contient deux tableaux soit :
- La première plage dans le range Areas(1)
- La deuxième plage dans le range Areas(2)
donc la sélection ci-dessus de la première ligne des deux plages.

Ps : Pour connaitre le nombre de plage avec l'union : MsgBox BigTableau.Areas.Count

Laurent
 

Magic_Doctor

XLDnaute Barbatruc
Bonsoir tout le monde et merci pour vos réponses.

J'ai retenu celle de Staple1600, la plus concise à mon sens.
Celle de laurent950 est intéressante aussi, bien que plus longue.
Je ne connaissais pas "Areas.Item(x)". J'imagine qu'il y a autant de x que de fragments du tableau (en fait la plage) qui résulte de l'union de plusieurs tableaux (plages) non contigus.
Quel serait l'intérêt de cette solution par rapport à celle de Staple1600 ?
 

laurent950

XLDnaute Barbatruc
Vous avez choisie qu'elle code pour celui de Staple1600 ?
- il y a deux tableaux distinct avant l'union pour eux

Pour mon code il est court ? et puis une fois l'union faite la sélection se fait via le seul tableau crée si j'ai bien compris votre demande
 

laurent950

XLDnaute Barbatruc
Quel serait l'intérêt de cette solution par rapport à celle de Staple1600 ?
Je propose de faire l'union des deux plages et de faire la sélection directement depuis
cette union ?

Dim BigTableau As Range
' Mise en mémoire des deux plages dans la globalité.
Set BigTableau = Union([Tableau1], [Tableau2])
' Résultat depuis l'union des deux plages.
Union(BigTableau.Areas.Item(1).Rows(1), BigTableau.Areas.Item(2).Rows(1)).Select
 
Dernière édition:

mapomme

XLDnaute Barbatruc
Supporter XLD
Bonjour laurent950,

Union(BigTableau.Areas.Item(1).Rows(1), BigTableau.Areas.Item(2).Rows(1)).Select

Ta proposition fonctionne. Cependant imaginons que tableau1 et tableau 2 soient alignés mais sans colonne séparatrice, alors ta syntaxe aboutit à une erreur car BigTableau.Areas.Item(2) n'existe pas. Les autres syntaxes fonctionnent dans les deux cas. Mais dans le cas précis de la question de Magic_Doctor, ta solution est bonne.
 
Dernière édition:

Discussions similaires

Les cookies sont requis pour utiliser ce site. Vous devez les accepter pour continuer à utiliser le site. En savoir plus…