Je souhaite sélectionner la plage formatée d'une feuille Excel ..__ Pour définir la dernière et la première ligne, j'utilise les fonctions suivantes:
lastColumn = ActiveSheet.UsedRange.Column - 1 + ActiveSheet.UsedRange.Columns.Count
lastRow = ActiveSheet.UsedRange.Rows(ActiveSheet.UsedRange.Rows.Count).Row
Dans l'étape suivante, je souhaite sélectionner cette zone: La formule devrait ressembler à ceci:
Range(cells(1, 1), cells(lastRow, lastColumn).Select
Cependant, cela ne fonctionne pas. Peut-être que quelqu'un a une idée de ce qui ne va pas. Merci beaucoup!
J'ai enregistré une macro avec 'Références relatives' et voici ce que j'ai obtenu:
Range("F10").Select
ActiveCell.Offset(0, 3).Range("A1:D11").Select
Voici ce que je pensais: Si la sélection de plage est entre guillemets, VBA souhaite vraiment une chaîne et interprète les cellules à partir de celle-ci.
Dim MyRange as String
MyRange = "A1:D11"
Range(MyRange).Select
Et cela a fonctionné :) c'est-à-dire qu'il suffit de créer une chaîne à l'aide de vos variables, assurez-vous de la dimensionner en tant que variable STRING et Excel le lira immédiatement;)
Après avoir testé et trouvé efficace:
Sub Macro04()
Dim Copyrange As String
Startrow = 1
Lastrow = 11
Let Copyrange = "A" & Startrow & ":" & "D" & Lastrow
Range(Copyrange).Select
End Sub
J'ai rencontré quelque chose de similaire - je voulais créer une plage basée sur certaines variables. L'utilisation de la feuille de calcul.Les cellules ne fonctionnaient pas directement, car je pense que les valeurs de la cellule ont été transmises à Range.
Cela a bien fonctionné:
Range(Cells(1, 1).Address(), Cells(lastRow, lastColumn).Address()).Select
Cela a permis de convertir l'emplacement numérique de la cellule en ce que Range attend, à savoir le format A1.
Si vous voulez juste sélectionner la plage utilisée, utilisez
ActiveSheet.UsedRange.Select
Si vous souhaitez sélectionner A1 à la fin de la plage utilisée, vous pouvez utiliser la méthode SpecialCells comme celle-ci.
With ActiveSheet
.Range(.Cells(1, 1), .Cells.SpecialCells(xlCellTypeLastCell)).Select
End With
Parfois, Excel est confus sur la dernière cellule. Ce n'est jamais une plage plus petite que la plage réellement utilisée, mais elle peut être plus grande si certaines cellules ont été supprimées. Pour éviter cela, vous pouvez utiliser la recherche et le caractère générique astérisque pour rechercher la dernière cellule réelle.
Dim rLastCell As Range
With Sheet1
Set rLastCell = .Cells.Find("*", .Cells(1, 1), xlValues, xlPart, , xlPrevious)
.Range(.Cells(1, 1), rLastCell).Select
End With
Enfin, assurez-vous de ne sélectionner que si vous en avez vraiment besoin. La plupart de ce que vous devez faire dans Excel VBA peut être fait directement dans la plage plutôt que de le sélectionner au préalable. Au lieu de
.Range(.Cells(1, 1), rLastCell).Select
Selection.Font.Bold = True
Vous pouvez
.Range(.Cells(1,1), rLastCells).Font.Bold = True
Vous manquez une parenthèse proche, I.E. vous ne fermez pas Range()
.
Essayez ceci Range(cells(1, 1), cells(lastRow, lastColumn)).Select
Mais vous devriez vraiment regarder l'autre réponse de Dick Kusleika pour des alternatives possibles qui pourraient mieux vous servir. Plus précisément, ActiveSheet.UsedRange.Select
qui a le même résultat final que votre code.
vous les transformez en adresse mais Cells (#, #) utilise des entrées entières et non des adresses; utilisez donc simplement lastRow = ActiveSheet.UsedRange.Rows.count
et lastColumn = ActiveSheet.UsedRange.Columns.Count
J'ai essayé d'utiliser:
Range(cells(1, 1), cells(lastRow, lastColumn)).Select
où lastRow
et lastColumn
sont des entiers, mais ont reçu l'erreur d'exécution 1004. J'utilise un ancien VB (6.5).
Ce qui a fonctionné était d'utiliser ce qui suit:
Range(Chr(64 + firstColumn) & firstRow & ":" & Chr(64 + lastColumn) & firstColumn).Select.