Je cherche une alternative à cette code
, mais en utilisant des nombres ... je veux sélectionner 5 colonnes, la colonne de départ est une variable, puis 5 colonnes.
Columns("A:E").Select
Comment utiliser plutôt integers
pour faire référence à des colonnes? Quelque chose comme ci-dessous?
For n = 1 to 5
Columns("n : n + 4") .select
do sth
next n
Merci . Gemmo
Vous pouvez utiliser le redimensionnement comme ceci:
For n = 1 To 5
Columns(n).Resize(, 5).Select
'~~> rest of your code
Next
Dans tout Manipulation de plage que vous faites, gardez toujours à l'esprit de votre esprit Resize and Offset property.
Columns("A:E").Select
Peut être directement remplacé par
Columns(1).Resize(, 5).EntireColumn.Select
Où 1 peut être remplacé par une variable
n = 5
Columns(n).Resize(, n+4).EntireColumn.Select
À mon avis, il vaut mieux utiliser un bloc de colonnes plutôt que de parcourir les colonnes n à n + 4 car il est plus efficace.
De plus, utiliser select ralentira votre code. Ainsi, au lieu de sélectionner vos colonnes, puis d’exécuter une action sur la sélection, essayez plutôt d’exécuter cette action directement. Vous trouverez ci-dessous un exemple pour changer la couleur des colonnes A à E en jaune.
Columns(1).Resize(, 5).EntireColumn.Interior.Color = 65535
vous pouvez utiliser range
avec cells
pour obtenir l'effet souhaité (mais il serait préférable de ne pas utiliser select si vous n'avez pas à le faire)
For n = 1 to 5
range(cells(1,n).entirecolumn,cells(1,n+4).entirecolumn).Select
do sth
next n
pas besoin de boucles ou autres .. essayez ceci ..
dim startColumnas integer
dim endColumn as integer
startColumn = 7
endColumn = 24
Range(Cells(, startColumn), Cells(, endColumn)).ColumnWidth = 3.8 ' <~~ whatever width you want to set..*
Essayez ce qui suit, où n
est votre variable et x votre décalage (4 dans ce cas):
LEFT(ADDRESS(1,n+x,4),1)
Cela retournera la lettre de cette colonne (donc pour n = 1 et x = 4, cela retournera A + 4 = E). Vous pouvez ensuite utiliser INDIRECT()
pour référencer ceci, comme suit:
COLUMNS(INDIRECT(LEFT(ADDRESS(1,n,4),1)&":"&LEFT(ADDRESS(1,n+x,4),1)))
qui avec n = 1, x = 4 devient:
COLUMNS(INDIRECT("A"&":"&"E"))
et donc:
COLUMNS(A:E)
Je cherchais une solution similaire ... Mon problème était de trouver la dernière colonne en fonction de la ligne 5, puis de sélectionner 3 colonnes avant d'inclure la dernière.
Dim lColumn As Long
lColumn = ActiveSheet.Cells(5,Columns.Count).End(xlToLeft).Column
MsgBox ("The last used column is: " & lColumn)
Range(Columns(lColumn - 3), Columns(lColumn)).Select
La boîte de message est facultative car il s’agit plus d’une vérification de contrôle. Si vous souhaitez sélectionner les colonnes après la dernière colonne, vous devez simplement inverser la sélection de la plage.
Dim lColumn As Long
lColumn = ActiveSheet.Cells(5,Columns.Count).End(xlToLeft).Column
MsgBox ("The last used column is: " & lColumn)
Range(Columns(lColumn), Columns(lColumn + 3)).Select
Vous pouvez spécifier des adresses sous la forme "R1C2" au lieu de "B2". Sous Fichier -> Options -> Formulaires -> Travailler avec des formules il existe une bascule Style de référence R1C1 . qui peut être réglé, comme illustré ci-dessous.