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

  • Initiateur de la discussion Initiateur de la discussion g.milano
  • Date de début Date de début

Boostez vos compétences Excel avec notre communauté !

Rejoignez Excel Downloads, le rendez-vous des passionnés où l'entraide fait la force. Apprenez, échangez, progressez – et tout ça gratuitement ! 👉 Inscrivez-vous maintenant !

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
 
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)
 
Oui, effectivement, comme ca, c'est possible (j'y avais pensé mais c'est pénible a programmer) 😀
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...
 
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.
 
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).
 
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:
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.
 
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:
- Navigue sans publicité
- Accède à Cléa, notre assistante IA experte Excel... et pas que...
- Profite de fonctionnalités exclusives
Ton soutien permet à Excel Downloads de rester 100% gratuit et de continuer à rassembler les passionnés d'Excel.
Je deviens Supporter XLD
Retour