Problème de sélection multiple de colonnes

Magic_Doctor

XLDnaute Barbatruc
Bonjour,

Je veux, par macro, sélectionner dans un tableau une colonne sur deux depuis la 1ère colonne du tableau jusqu'à l'antépénultième.
L'explication paraît tordue, mais sur la feuille c'est nettement plus clair.
J'ai suivi un raisonnement, expliqué dans la macro, mais ça ne marche pas...

Merci pour l'aide.
 

Pièces jointes

  • Sélection colonnes.xls
    33 KB · Affichages: 53

Staple1600

XLDnaute Barbatruc
Re : Problème de sélection multiple de colonnes

Bonsoir

Voir si cela peut te mener quelquepart
Code:
Private Sub Worksheet_Change(ByVal target As Range)
Dim t, tt
tt = Array(2, 3, 4, 7)
t = Array("C:C", "C:C,E:E", "C:C,E:E,G:G", "C:C,E:E,G:G,I:I,K:K,M:M")
MsgBox Range(t(Application.Match([ChxCol], tt, 0) - 1)).Address ' juste pour test
Range(t(Application.Match([ChxCol], tt, 0) - 1)).Select
End Sub
 

Magic_Doctor

XLDnaute Barbatruc
Re : Problème de sélection multiple de colonnes

Bonsoir staple1600,

Merci pour ton intervention, mais... trop compliqué.
Imaginons un instant qu'il y ait 250 colonnes... On est bons pour les antidépresseurs...
La solution doit être plus simple au moyen d'une boucle.
 

Staple1600

XLDnaute Barbatruc
Re : Problème de sélection multiple de colonnes

Re

Il me semble que l'on boucler dans un Array, non ?
Code:
For i=LBound(t) To Ubound(t)
'code
Next i
Voir si cela peut te mener quelquepart
était une invitation pour tu t'inspires ou pas de ma proposition
(car je sais que tu n'es pas un débutant en VBA, et tu as su t’imprégner du grand Job75)


Je me suis arrêté à la situation de départ énoncé dans ton message d'introduction
(ne pensant pas que la question allait devenir à tiroirs)

EDITION: Pour moi, c'est bien une question à tiroirs :rolleyes:
https://www.excel-downloads.com/threads/probleme-de-selection-multiple-de-colonnes.175050/
 
Dernière édition:

Magic_Doctor

XLDnaute Barbatruc
Re : Problème de sélection multiple de colonnes

Il n'y a aucun tiroir dans ma requête.
Le tableau n'était qu'un exemple. Mais aucun tableau n'est vraiment statique ; donc, si chaque fois que l'on modifie le tableau il faut se replonger dans la macro, voilà de quoi y perdre son latin. Supposons, un instant, que le tableau change d'emplacement dans la feuille... À mon sens, une macro doit faire face à ce genre de situation sans qu'en permanence on aille la reparamétrer en fonction des modifications faites dans la feuille. Voilà pourquoi ta solution me paraît trop compliquée et pas assez souple.
 
Dernière édition:

david84

XLDnaute Barbatruc
Re : Problème de sélection multiple de colonnes

Bonsoir,
sauf erreur de ma part, tes explications du message #1
... sélectionner dans un tableau une colonne sur deux depuis la 1ère colonne du tableau jusqu'à l'antépénultième.
ne correspondent pas aux explications fournies dans le fichier
Si choix colonne = 2 ---> seule la colonnes 1 est sélectionnée
Si choix colonne = 3 ---> colonnes 1 & 2 sélectionnées
Si choix colonne = 4 ---> colonnes 1, 2 & 3 sélectionnées
Si choix colonne = 7 ---> colonnes 1, 2, 3, 4, 5 & 6 sélectionnées
.
Je ne comprends donc pas précisément ce que tu veux.
A+
 

Magic_Doctor

XLDnaute Barbatruc
Re : Problème de sélection multiple de colonnes

Bonsoir David84 et merci pour t'intéresser au sujet,

Comme je le précisais dans le 1er post, l'explication est plus claire sur la feuille avec un exemple de tableau.
Dans ce tableau il y a des colonnes alternes : colonnes avec en-têtes et colonnes intermédiaires.
Ce qui m'intéresse est de sélectionner uniquement les colonnes avec en-tête (sans leur en-tête respectif, bien entendu) mais sous certaines conditions.
Je choisis, par exemple, la 4ème colonne avec en-tête, soit la colonne 4. Je voudrais que TOUTES les colonnes avec en-tête uniquement qui la précèdent, et uniquement ces colonnes, soient sélectionnées ; soient les colonnes avec en-tête 1, 2 et 3. Évidemment, la colonne choisie ne faisant pas partie de l'ensemble des colonnes sélectionnées.
Ce qui revient à dire, plus concisément :

Je veux, par macro, sélectionner dans un tableau une colonne sur deux depuis la 1ère colonne du tableau jusqu'à l'antépénultième.

L'antépénultième colonne (dans la plage du tableau correspondant à notre recherche) étant bien la dernière colonne avec en-tête de l'ensemble des colonnes sélectionnées.

Ai-je été clair ?
 

job75

XLDnaute Barbatruc
Re : Problème de sélection multiple de colonnes

Bonsoir Magic Doctor, Jean-Marie, David,

Voir le fichier joint et cette macro :

Code:
Sub SelectCol()
Dim col As Integer, plage As Range, i As Integer
col = Application.Min(2 * Val([ChxCol]) - 1, [TABLEAU].Columns.Count) 'ou bien
'col = Application.Min(Val([ChxCol]), [TABLEAU].Columns.Count) 'suivant ce qu'on entend par ChxCol
If col < 1 Then Exit Sub
Set plage = [TABLEAU].Columns(1)
For i = 3 To col Step 2
  Set plage = Union(plage, [TABLEAU].Columns(i))
Next
plage.Select
End Sub
Noter qu'il y a 2 manières possibles de calculer col...

A+
 

Pièces jointes

  • Sélection colonnes(1).xls
    37.5 KB · Affichages: 40

Magic_Doctor

XLDnaute Barbatruc
Re : Problème de sélection multiple de colonnes

Bonsoir job,

Ta solution marche. Je n'y ai fait qu'une mineure modification afin qu'elle s'adapte à mes desiderata ; en effet, je ne voulais pas que la dernière colonne soit sélectionnée (autrement dit celle que nous indiquons et qui, en fait, ne sert que de balise).

Sub SelectCol()
Dim col As Integer, plage As Range, i As Integer

col = Application.Min(2 * Val([ChxCol]) - 1, [TABLEAU].Columns.Count) 'ou bien
'col = Application.Min(Val([ChxCol]), [TABLEAU].Columns.Count) 'suivant ce qu'on entend par ChxCol
If col < 1 Then Exit Sub
Set plage = [TABLEAU].Columns(1)
'For i = 3 To col Step 2
For i = 3 To col - 1 Step 2
Set plage = Union(plage, [TABLEAU].Columns(i))
Next
plage.Select
End Sub

Merci pour ton aide et bonne soirée septentrionale, quoique, ici, le temps soit maussade...
 

job75

XLDnaute Barbatruc
Re : Problème de sélection multiple de colonnes

Re,

je préfère cette solution sans boucle :

Code:
Sub SelectCol()
Dim col As Integer, plage As Range
col = Application.Min(2 * Val([ChxCol]) - 1, [TABLEAU].Columns.Count) 'ou bien
'col = Application.Min(Val([ChxCol]), [TABLEAU].Columns.Count) 'suivant ce qu'on entend par ChxCol
If col < 1 Then Exit Sub
Set plage = [TABLEAU].Cells(0, 1).Resize(, col).SpecialCells(xlCellTypeConstants)
Intersect([TABLEAU], plage.EntireColumn).Select
End Sub
Ce sont les en-têtes qui permettent de définir les colonnes.

Fichier (2).

Edit : pas rafraîchi pour ton post #9, donc écrire plutôt :

Code:
Set plage = [TABLEAU].Cells(0, 1).Resize(, col - 1).SpecialCells(xlCellTypeConstants)
A+
 

Pièces jointes

  • Sélection colonnes(2).xls
    38 KB · Affichages: 44
Dernière édition:

Magic_Doctor

XLDnaute Barbatruc
Re : Problème de sélection multiple de colonnes

Bonsoir job, ou plutôt bonjour,

Je viens de lire tardivement ta dernière solution manifestement allégée.
En attendant, j'ai modifié (muchos "bidouillages"...) ta solution précédente afin de tenir compte des extrêmes des colonnes.
Voilà exactement où je voulais en venir (voir pièce jointe). Ça marche, mais la syntaxe, j'en suis sûr, peut être singulièrement allégée.
 

Pièces jointes

  • Sélection colonnes2.xls
    45.5 KB · Affichages: 40

job75

XLDnaute Barbatruc
Re : Problème de sélection multiple de colonnes

Bonjour Magic Doctor, le fil,

Pour ton dernier problème, il y a effectivement plus simple :

Code:
Sub SelectCol(chx As Byte)
Dim plage As Range
If chx Then
  Application.ScreenUpdating = False
  [TABLEAU].Cells(0, 2 * [ChxCol] - 1) = ""
End If
Set plage = [TABLEAU].Cells(0, 1).Resize(, [TABLEAU].Columns.Count).SpecialCells(xlCellTypeConstants)
If chx Then [TABLEAU].Cells(0, 2 * [ChxCol] - 1) = [ChxCol]
Intersect([TABLEAU], plage.EntireColumn).Select
End Sub
La méthode est semblable à celle de mon post #10.

Fichier joint.

A+
 

Pièces jointes

  • Sélection colonnes2(1).xls
    36 KB · Affichages: 47

Magic_Doctor

XLDnaute Barbatruc
Re : Problème de sélection multiple de colonnes

Bonjour job,

Effectivement, ça change !
Difficile, je pense, de faire plus bref.
Seulement, voilà, je me heurte à un problème. Pour des raisons, disons, explicites, j'avais numéroté les en-têtes des colonnes. Dans le tableau définitif, les en-têtes ne porteront pas de numéro mais tout autre chose (par ex. "moutarde", "tabasco", "soja"...). Quand j'active la macro, forcément un numéro se substitue au nom de l'en-tête.
Peut-on y remédier afin que le nom de l'en-tête soit conservé ?
 

job75

XLDnaute Barbatruc
Re : Problème de sélection multiple de colonnes

Re Magic Doctor,

Avec des en-têtes sous forme de texte, mémoriser celle de la colonne concernée :

Code:
Sub SelectCol(chx As Byte)
Dim plage As Range, txt$
With [TABLEAU].Cells(0, 2 * [ChxCol] - 1)
  If chx Then
    Application.ScreenUpdating = False
    txt = .Value 'mémorise
    .Value = "" 'efface
  End If
  Set plage = [TABLEAU].Cells(0, 1).Resize(, [TABLEAU].Columns.Count).SpecialCells(xlCellTypeConstants)
  If chx Then .Value = txt 'restitue
End With
Intersect([TABLEAU], plage.EntireColumn).Select
End Sub
Fichier (2).

A+
 

Pièces jointes

  • Sélection colonnes2(2).xls
    35.5 KB · Affichages: 55

Magic_Doctor

XLDnaute Barbatruc
Re : Problème de sélection multiple de colonnes

Re,

Magnifique, ça marche !
Mais une "petite" question :
- si chx = 0 ---> toutes les colonnes "stratégiques" sont sélectionnées
- si chx <> 0 ---> toutes les colonnes "stratégiques" sont sélectionnées sauf celle choisie

Tu as écrit :

If chx Then
Application.ScreenUpdating = False
txt = .Value 'mémorise
.Value = "" 'efface
End If
Set plage = [TABLEAU].Cells(0, 1).Resize(, [TABLEAU].Columns.Count).SpecialCells(xlCellTypeConstants)
If chx Then .Value = txt 'restitue

mais je ne saisis pas comment la condition "If" fait la part des choses.
Normalement le néandertal du VBA que je suis aurait, par exemple, écrit :
If chx = 0 Then
xxxxxxxxxxxxxxx
Else
yyyyyyyyyyyyy
End If

Ce que tu as écrit marche parfaitement, mais il n'en demeure pas moins que ce n'est pas clair.
 

Discussions similaires

Réponses
7
Affichages
287

Statistiques des forums

Discussions
312 199
Messages
2 086 159
Membres
103 145
dernier inscrit
lea.