J'ai un petit script dans Excel/VB que j'essaie de faire fonctionner. Tout ce que je veux faire est de sélectionner une plage dynamique de données à copier, mais je n'arrive pas à trouver d'aide/de code sur la manière d'obtenir les données de grille (comme A11).
Voici le code que j'ai de l'enregistrement de macro qui sélectionne la plage de données:
Range("D291:D380").Select
J'espérais pouvoir faire Range(Current).Select
ou autre chose, mais ça ne marche pas.
Toute aide est appréciée.
As-tu essayé:
Pour une cellule:
ActiveCell.Select
Pour plusieurs cellules sélectionnées:
Selection.Range
Par exemple:
Dim rng As Range
Set rng = Range(Selection.Address)
Le mot-clé " Selection " est déjà un objet vba Range. Vous pouvez donc l'utiliser directement. Vous n'avez pas à sélectionner de cellules à copier. Par exemple, vous pouvez être sur la feuille Sheet1 et émettre les commandes suivantes:
ThisWorkbook.worksheets("sheet2").Range("namedRange_or_address").Copy
ThisWorkbook.worksheets("sheet1").Range("namedRange_or_address").Paste
S'il s'agit d'une sélection multiple, vous devez utiliser l'objet Area dans une boucle for:
Dim a as Range
For Each a in ActiveSheet.Selection.Areas
a.Copy
ThisWorkbook.worksheets("sheet2").Range("A1").Paste
Next
Cordialement
Thomas
Si vous essayez de saisir une plage avec une chaîne générée dynamiquement, il vous suffit de construire la chaîne comme suit:
Range(firstcol & firstrow & ":" & secondcol & secondrow).Select
Cela ne vous aidera peut-être pas à répondre directement à votre question, mais j’ai trouvé quelque chose d’utile lorsque vous essayez de travailler avec des plages dynamiques qui peuvent vous aider.
Supposons que dans votre feuille de calcul, vous avez les numéros 100 à 108 dans les cellules A1: C3:
A B C
1 100 101 102
2 103 104 105
3 106 107 108
Ensuite, pour sélectionner toutes les cellules, vous pouvez utiliser la propriété CurrentRegion
:
Sub SelectRange()
Dim dynamicRange As Range
Set dynamicRange = Range("A1").CurrentRegion
End Sub
L’avantage de cela est que si vous ajoutez de nouvelles lignes ou colonnes à votre bloc de nombres (par exemple, 109, 110, 111), la région en cours fera toujours référence à la plage élargie (dans ce cas, A1: C4).
J'ai utilisé pas mal CurrentRegion dans mon code VBA et je trouve qu'il est très utile lorsque vous travaillez avec des plages de taille dynmaciale. En outre, cela évite d'avoir à coder en dur des plages dans votre code.
Pour terminer, dans mon code, vous verrez que j'ai utilisé A1 comme cellule de référence pour CurrentRegion. Cela fonctionnera également quelle que soit la cellule que vous référencez (essayez de remplacer A1 par B2 par exemple). La raison en est que CurrentRegion sélectionnera toutes les cellules contiguës en fonction de la cellule de référence.
Essaye ça
Dim app As Excel.Application = Nothing
Dim Active_Cell As Excel.Range = Nothing
Try
app = CType(Marshal.GetActiveObject("Excel.Application"), Excel.Application)
Active_Cell = app.ActiveCell
Catch ex As Exception
MsgBox(ex.Message)
Exit Sub
End Try
' .address will return the cell reference :)