Sélection de plusieurs colonnes contigües dont la dernière est une variable

Bonjour la communauté

Je cherche à fixer la largeur d'une sélection de colonnes, de la n°2 à la dernière colonne qui contient des valeurs.

Je sais que je dois utiliser ColumnWidth, mais je ne sais pas comment effectuer la sélection.

Pour info, j'ai une variable qui s'appelle lastColumn qui récupère exactement le n° de la colonne de fin.

Comment faire la sélection ?

Si quelqu'un peut m'aider... Merci !

Bonjour ebetsch,

A moins que ce ne soit nécessaire (ce dont je doute), il faut éviter de sélectionner des plages. On peut agir dessus directement.

Voici un exemple :

with activesheet
    lastrow = .cells(.rows.count, 1).end(xlup).row '<<< derniere ligne
    lastcol = .cells(1, .columns.count).end(xltoleft).column '<<< derniere colonne
    .cells(2, 2).resize(lastrow - 1, lastcol - 1).copy
end with

Ici, on copie la plage à partir de la cellule B2, redimensionnée à lastrow - 1 lignes et lastcol - 1 colonnes (-1 car on commence en ligne 2 et colonne 2).

Cdlt,

Merci 3GB,

mais je ne vois pas trop comment utiliser ton code. Je suis totalement novice en VBA...

Voilà ce que je veux faire :

[plage de colonnes // ou de cellules].ColumnWidth = 10

Mais je ne sais comment définir cette plage.

En termes de plage de colonnes, je vais de la colonne 2 à la colonne lastColumn.

En termes de plage de cellules, je vais de la cellule (2,2) à la cellule (lastRow, lastColumn) [là aussi j'ai une variable lastRow].

Est-ce que ça aide à la compréhension ?

Pour info :

lastRow = Cells(Cells.Rows.Count, 1).End(xlUp).Row
lastColumn = Cells(1, Cells.Columns.Count).End(xlToLeft).Column

En effet je ne pense pas avoir besoin de sélectionner à proprement parler la plage, je veux juste pouvoir la décrire.

Bonjour le fil et le forum,

voici un exemple

Sub test()

Dim LastCol As String

'lettre de la dernière colonne
LastCol = Split(Columns(Range("A1").End(xlToRight).Column).Address(, False), ":")(1)

With ActiveSheet.Columns("B:" & LastCol)
 .ColumnWidth = "50" 'à adapter
End With

End Sub

ok merci, ça marche nickel !

Salut Ebetsch,
Salut Sequoyah,

tiens, je suis étonné de voir que la dimension entre guillemets ( "50" ) fonctionne aussi !
Sinon, juste pour l'infime différence par rapport à ta fonction de recherche de la lettre de colonne, voici celle que j'utilise quotidiennement où iCol est évidemment le n° de colonne.

Public Function fctCol(ByVal iCol%) As String
'
fctCol = Split(Columns(iCol).Address(ColumnAbsolute:=False), ":")(1)
'
End Function


A+

Bonjour à tous,

Désolé, je suis totalement passé à côté de la question de la largeur...

Pour poursuivre sur mon exemple (autre alternative), voici un essai :

with activesheet
    lastrow = .cells(.rows.count, 1).end(xlup).row '<<< derniere ligne
    lastcol = .cells(1, .columns.count).end(xltoleft).column '<<< derniere colonne
    .cells(2, 2).resize(lastrow - 1, lastcol - 1).entirecolumn.columnwidth = 10
end with

Si tu as des questions, n'hésite pas.

Cdlt,

Ooops, je t'avais zappé dans mon salut 3GB !


A+

En fait il y avait bien plus simple :

For currentColumn = 2 To lastColumn
    Columns(currentColumn).ColumnWidth = 10
Next

Pour info, cette boucle For existait déjà dans mon code pour d'autres instructions, je n'ai eu qu'à y rajouter le code sur la largeur de colonne (et les guillemets autour du 10 ne sont pas indispensables, voire étranges...)

Encore merci à vous -- et à mon cerveau qui a optimisé tout ça, car finalement c'était très simple !

Le truc c'est qu'au départ j'étais partie sur un

For currentColumn = 2 To lastColumn
    Cells(1, currentColumn).Select
    Selection.ColumnWidth=10
Next

mais ça prenait un temps monstrueux de sélectionner chaque colonne, du coup mon souci était de passer à la même manip sans sélection !

Pas de souci Curulis !

Juste pour ce problème de guillemets, je crois qu'ils ne sont pas anodins. De mémoire, les guillemets servent à indiquer la largeur telle qu'elle est exprimée sur excel, alors que les valeurs de type double correspondent à une autre unité (je ne sais plus laquelle entre les inches, les points, ...).

.columnwidth = 10 donnerait une largeur beaucoup plus importante que .columnwidth = "10".

Je vais vérifier quand même.

Bonne soirée/nuit à tous,

Je viens d'essayer avec et sans guillemets : kif-kif bourricot !


A+

Ah mince, j'ai totalement rêvé alors , j'en étais pourtant quasiment persuadé...

Je vais aller me coucher, ça me fera pas de mal.

A plus,

Rechercher des sujets similaires à "selection colonnes contig derniere variable"