web-dev-qa-db-fra.com

Excel VBA - sélectionnez une plage de cellules dynamiques

Je veux être en mesure de sélectionner dynamiquement une plage de cellules (la ligne d'en-tête), où la ligne est 1 mais les colonnes sont pour 1 à la dernière colonne, où "A" est la première colonne et "M" la dernière colonne. Je sais comment trouver la dernière colonne, mais je ne sais pas comment modifier la plage ci-dessous pour entrer les première et dernière colonnes sous la forme de "A" et "M".

 Range("A1:M1").Select
8
HL8

Si vous souhaitez sélectionner une plage de variables contenant toutes les cellules d'en-tête:

Dim sht as WorkSheet
Set sht = This Workbook.Sheets("Data")

'Range(Cells(1,1),Cells(1,Columns.Count).End(xlToLeft)).Select '<<< NOT ROBUST

sht.Range(sht.Cells(1,1),sht.Cells(1,Columns.Count).End(xlToLeft)).Select

... tant qu'il n'y a pas d'autre contenu sur cette ligne.

EDIT: mis à jour pour souligner que, lorsque vous utilisez Range(Cells(...), Cells(...)), il est recommandé de qualifier Range et Cells avec une référence de feuille de calcul.

16
Tim Williams
sub selectVar ()
    dim x,y as integer
    let srange = "A" & x & ":" & "m" & y
    range(srange).select
end sub

Je pense que c'est le moyen le plus simple.

6
akbar moradi

Cela dépend donc de la manière dont vous voulez choisir l'incrémenteur, mais cela devrait fonctionner:

Range("A1:" & Cells(1, i).Address).Select

i est la variable qui représente la colonne à sélectionner (1 = A, 2 = B, etc.). Voulez-vous le faire par lettre de colonne à la place? Nous pouvons ajuster si oui :)

Si vous souhaitez que le début soit également dynamique, vous pouvez essayer ceci:

Sub SelectCols()

    Dim Col1 As Integer
    Dim Col2 As Integer

    Col1 = 2
    Col2 = 4

    Range(Cells(1, Col1), Cells(1, Col2)).Select

End Sub
4
RocketDonkey

J'aime utiliser le plus cette méthode, elle sélectionnera automatiquement la première colonne à la dernière colonne utilisée. Toutefois, si la dernière cellule de la première ligne ou la dernière cellule de la première colonne est vide, ce code ne sera pas calculé correctement. Recherchez dans link d’autres méthodes pour sélectionner dynamiquement la plage de cellules.

Sub DynamicRange()
'Best used when first column has value on last row and first row has a value in the last column

Dim sht As Worksheet
Dim LastRow As Long
Dim LastColumn As Long
Dim StartCell As Range

Set sht = Worksheets("Sheet1")
Set StartCell = Range("A1")

'Find Last Row and Column
  LastRow = sht.Cells(sht.Rows.Count, StartCell.Column).End(xlUp).Row
  LastColumn = sht.Cells(StartCell.Row, sht.Columns.Count).End(xlToLeft).Column

'Select Range
  sht.Range(StartCell, sht.Cells(LastRow, LastColumn)).Select

End Sub
0
aaa