Sélectionner une feuille de calcul à l'aide de VBA dans Excel
Cette page présente différentes façons de sélectionner une feuille de calcul sur laquelle opérer, en fonction du nom ou du numéro.
Il est important d'utiliser une feuille de calcul et des variables de classeur plutôt que de se fier à la fonction Activesheet.
Bien que fournissant un code court pour accéder à une feuille de calcul, l'utilisation de l'option CodeName
peut conduire à des erreurs car il ne fonctionne que dans certaines conditions.
Il a examiné deux conditions d'erreur possibles et la manière de les traiter.
Sélectionnez feuille de calcul par nom
La propriété Item
de la collection Worksheets
est utilisée pour renvoyer un seul objet Feuille de calcul de la collection.
A titre d'exemple, il s'appelle ainsi :
Dim ws As Worksheet
Set ws = Application.ActiveWorkbook.Worksheets.Item(Index:="data")
Le collection Worksheets
est obtenue à partir d'une Workbook.Worksheets
appel de procédure.
Le procédure Item
renvoie un objet de type Worksheet
qui est affectée facultative à une variable ws
.
... ou plus court :
Dim ws As Worksheet
Set ws = Worksheets(Index:="data")
- Si
Worksheets
est appelé sans spécifier le classeur, Excel supposeApplication.ActiveWorkbook
- Une pratique courante pour les éléments de collection consiste à utiliser une abréviation : Au lieu de l'expression complète
collection.Item(...)
le plus courtcollection(...)
est utilisé. - Comme cela ne rend pas les choses plus claires, nous laissons également de côté la mention
Item
nom du paramètre(Index:=...)
ActiveWorkbook
pour fournir le parent Workbook
dont l'objet Worksheets
est utilisée. Dans le code réel, il est préférable d'utiliser des variables d'objet explicitement déclarées et assignées, dans le cas présent : Dim wb As Workbook
: Set wb = ActiveWorkbook
, très probablement avec une autre expression d'affectation d'objet.
Dim strWorkbook As String: strWorkbook = "Demo.xlsx"
Dim wb As Workbook
Set wb = Workbooks(strWorkbook)
Dim wsData As Worksheet
Set wsData = wb.Worksheets("Data")
Sélection d'une feuille par numéro d'index
Un feuille de calcul peut également être identifié par son numéro dans la collection, où la feuille 1 correspond à la première feuille de calcul.
Dim ws As Worksheet
Set ws = Worksheets(1)
Feuilles ou fiches de calcul
En fait, vous pouvez également obtenir un feuille de calcul à partir de collection Sheets
du Workbook. Cette dernière contient toutes les feuilles du classeur :
outre les feuille de calculs, également les graphiques (chart sheets).
Si vous souhaitez qu'un feuille de calcul soit renvoyé, il est plus sûr d'utiliser Worksheets
en précisant le type.
Charts
,
le nombre de feuilles sera différent. Par exemple, s'il commence par un tableau suivi d'un feuille de calcul,
Sheets(2)
sera le même feuille de calcul que Workheets(1)
.
Sélectionner feuille de calcul par nom de variable
À l'exception des macros à usage général, vous connaîtrez souvent le nom des feuille de calculs sur lesquels votre macro agit.
Dim strWorkbook As String: strWorkbook = "Demo.xlsx"
Dim wb As Workbook
Set wb = Workbooks(strWorkbook)
Dim strWorksheet As String: strWorksheet = "data"
Dim ws As Worksheet
Set ws = wb.Worksheets(strWorksheet)
Cependant, le nom de la feuille peut inclure un élément variable, par exemple la date (formatée) d'un rapport de production sous forme de fichier csv.
Dans ce cas, vous pouvez parcourir les feuilles de calcul en boucle, comme indiqué ci-dessous,
où le caractère générique, Like "...*"
, reviendra la feuille de calcul dont le nom commence par "Data" et dont la fin n'est pas précisée :
Dim wsData As Worksheet
Dim ws As Worksheet
For Each ws In wb.Worksheets
If ws.Name Like "Data*" Then
Set wsData = ws
Exit For
End If
Next ws
Sélectionnez feuille de calcul par nom de code
Si votre macro ne doit fonctionner que sur les feuilles du classeur dans lequel elle se trouve, vous pouvez utiliser une syntaxe plus courte :
Sheet1.Range("A1").Value = "Hello world"
WorksheetCodeName
ne peut renvoyer que des feuilles en ThisWorkbook
.
Sélectionner la feuille à gauche
Utiliser le Previous
pour placer la feuille à gauche. Utilisez la propriété Next
pour déplacer la feuille vers la droite.
Dim wsPrevious As Worksheet
Set wsPrevious = Sheet2.Previous
If Not wsPrevious Is Nothing Then
End If
- Il est clair qu'il n'y aura pas toujours de feuille précédente.
Par conséquent, avant d'agir sur la feuille sélectionnée, il peut être utile de vérifier :
Not wsPrevious Is Nothing
. Cela permet d'éviter Erreur d'exécution 9 : indice hors plage. - Si vous avez également des feuilles de graphique dans votre classeur, vous voudrez peut-être rendre le code plus prudent afin d'éviter que des feuilles de graphique ne soient utilisées.
soit en ajoutant une gestion des erreurs, soit en déclarant la nouvelle variable en tant que
Object
et de vérifier s'il s'agit du type de produit dont vous avez besoin.
Sélectionner la feuille à droite
Utiliser le Next
pour déplacer la feuille vers la droite.
Dim wsNext As Worksheet
Set wsNext = Sheet2.Next
Sélectionnez Worksheet Range
En fin de compte, vous voudrez probablement faire des choses avec une plage dans la feuille de calcul pour laquelle vous utiliserez un Range
variable.
Dim strWorkbook As String: strWorkbook = "Demo.xlsm"
Dim wb As Workbook
Set wb = Workbooks(strWorkbook)
Dim strWorksheet As String: strWorksheet = "data"
Dim ws As Worksheet
Set ws = wb.Sheets(strSheet)
Dim rng As Range
Set rng = ws.Range("A2:B6")
Erreur d'exécution 9 : indice hors plage
Si le Index
fait référence à un élément qui n'est pas présent dans la collection, le système renvoie l'erreur d'exécution 9 : l'indice est hors de portée.
En fonction de l'utilisation réelle, vous pouvez envisager l'ajout d'une gestion des erreurs.
Sub Demo()
On Error GoTo HandleError
Set ws = Worksheets("xxx")
HandleExit:
Exit Sub
HandleError:
MsgBox Err.Description
Resume HandleExit
End Sub
Ouvrir l'événement feuille de calcul.
Vous pouvez utiliser la procédure Worksheet_Activate() qui s'exécute lorsque la feuille est sélectionnée. Pour ajouter le code, ouvrez le module feuille de calcul (sélectionnez-le dans l'explorateur de projet) et, dans la liste déroulante de gauche, sélectionnezWorksheet et dans la liste déroulante de droite, sélectionnez Activate. Cette opération insère un bloc de code vide, puis le complète de la manière suivante :
Private Sub Worksheet_Activate()
MsgBox "Hi! I'm " & Me.Name & ", who are you?"
End Sub
Auteur : Mark Uildriks Référence : Worksheets.Item() | Microsoft Learn