web-dev-qa-db-fra.com

Obtenir la cellule actuelle dans Excel VB

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.

18
user266450

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)
23
Ben McCormack

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

2
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
2
Lance Roberts

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. 

2
Alex P

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 :)
1
James Heffer