XL 2010 [RESOLU] Sélection de colonnes multiples et séparées dans une range

g.milano

XLDnaute Junior
Bonjour,

Je me trouve confronté a un soucis avec une sélection de colonnes multiples.

Tout d'abord mon environnement :

VB:
    Set TSV = Workbooks.Open("C:\#\Database\amazon.TSV")
    Set amazon = TSV.Sheets(1)
    Set deetaa = amazon.UsedRange
    retsu = deetaa.Rows.Count
    Set naiyou = deetaa.Range("A2:AU" & retsu)

Jusque la, rien de sorcier.

Mon objectif : sélectionner diverses colonnes (qui ne sont pas toujours contigües, évidemment) pour y faire diverses choses (couleurs, manipulation de chaines alphanumériques : remplacement/ajout/suppression) de mon tableau de données SANS la première ligne de titre (d’où ma dernière range "naiyou").
Et bien évidemment cette dernière me pose soucis.

Je vous liste ci-dessous les différentes combinaisons que j'ai essayé et leur résultat :
amazon.Columns("E:E,P: P").Interior.Color = RGB(100, 100, 100) ERR13
amazon.Range("E:E,P: P").Interior.Color = RGB(100, 100, 100) OK
deetaa.Columns("E:E,P: P").Interior.Color = RGB(100, 100, 100) ERR13
deetaa.Range("E:E,P: P").Interior.Color = RGB(100, 100, 100) OK/NOK : colorie la colonne MAIS sur toute la feuille (alors que deetaa est l'UsedRange)
naiyou.Columns("E:E,P: P").Interior.Color = RGB(100, 100, 100) ERR13
naiyou.Range("E:E,P: P").Interior.Color = RGB(100, 100, 100) ERR1004 !!

N'arrivant pas à trouver la bonne expression, je me tourne vers vous.
Merci pour votre aide m(_ _)m
 

youky(BJ)

XLDnaute Barbatruc
Bonjour,
Pas bien pigé le résultat attendu . . .
voici un exemple

Bruno
Code:
Set TSV = Workbooks.Open("C:\#\Database\amazon.TSV")
    Set amazon = TSV.Sheets(1)
    bas = amazon.Range("A" & Rows.Count).End(3).Row
    amazon.Range("E2:E" & bas & "," & "P2:P" & bas).Interior.Color = RGB(100, 100, 100)
 

g.milano

XLDnaute Junior
Oui, effectivement, comme ca, c'est possible (j'y avais pensé mais c'est pénible a programmer) :D
Je me demande pourquoi il n'est pas possible de faire une sélection multiple dans une range et avoir une formulation plus facile ou intuitive, respectant les ranges et leurs imbrications...
 

Dranreb

XLDnaute Barbatruc
Bonjour.
Comme ça qu'est ce que ça dit ? :
VB:
Intersect(amazon.[E:E,P:P], amazon.[2:1000000], amazon.UsedRange).Interior.Color = RGB(100, 100, 100)
Je suis quand même étonné que deetaa.Range("E:E,P: P").Interior.Color colore toute la feuille si deetaa n'est que l'UsedRange. Vous devriez mettre un espion sur deetaa.Address(External:=True) pour voir.
 

g.milano

XLDnaute Junior
Bonjour,

Bonjour.
Comme ça qu'est ce que ça dit ? :
VB:
Intersect(amazon.[E:E,P:P], amazon.[2:1000000], amazon.UsedRange).Interior.Color = RGB(100, 100, 100)
oui, ça marche bien ça. Je ne connais absolument pas cette fonction.
Par contre, a quoi correspond cet affreux 1000000 ?


Je suis quand même étonné que deetaa.Range("E:E,P: P").Interior.Color colore toute la feuille si deetaa n'est que l'UsedRange. Vous devriez mettre un espion sur deetaa.Address(External:=True) pour voir.
Je ne connais pas les espions non plus. Par contre, une précision : le "deetaa.Range("E:E,P: P").Interior.Color" colore seulement les 2 colonnes E et P, mais jusqu'en bas de la feuille (comme si j'avais écrit "amazon.Range("E:E,P: P").Interior.Color"). Alors qu'en faisant "deetaa.Columns("E:E").Interior.Color" ou bien "deetaa.Columns("E: P").Interior.Color", la coloration s’arrête bien a la limite de l'UserRange. Donc pourquoi "deetaa.Range("E:E,P: P")" ne se limite pas a l'UserRange et colore la colonne complète de la feuille ? Mystère.


Hello,
Les ''xlCellTypeLastCell'' ou ''UsedRange'' sont à déconseiller
Bruno
Et en quoi est-ce déconseillé ? Je travaille avec des CSV de données pondu par un logiciel indépendant, donc je n'ai aucun risque d'erreur (il n'y a pas de données séparées, j'ai toujours un bloc calé en A1).
 

Dranreb

XLDnaute Barbatruc
Alt+D affiche le menu Débogage,
Alt+U exécute la commande Ajouter un espion…
Pourquoi spécifier moins que le nombre de ligne maxi de la feuille, puisque c'est ramené de toute façon au numéro de la dernière ligne de UsedRange ?
Mais si vous préférez vous pouvez remplacer amazon.[2:1000000], amazon.UsedRange
par amazon.Rows(2).Resize(amazon.UsedRange.Rows.Count - 1) mais ce n'est pas plus simple !
 
Dernière édition:

g.milano

XLDnaute Junior
Ah ok, c’était une combinaison de touches, merci.

Je ne comprends pas un truc dans votre intersect. Vous mettez 3 ranges, alors que 2 seulement devraient suffire, non ? L'intersection des colonnes et de ma range "naiyou", c'est bien ce que je veux ; alors pourquoi mettre une range supplémentaire utilisant toutes les lignes ? J'avoue ne pas comprendre la logique.
 

Dranreb

XLDnaute Barbatruc
Intersect accepte plus de 2 Range: il en détermine un qui représente la plus grande plage intégralement contenue dans toutes celles spécifiées. Mais si vous préférez décomposer en plusieurs instructions libre à vous. Surtout si vous avez aussi besoin ailleurs de Intersect(.[2:1000000], .UsedRange)
 
Dernière édition:

Statistiques des forums

Discussions
311 725
Messages
2 081 941
Membres
101 846
dernier inscrit
Silhabib