Utilisation nom VBA d'une feuille
Bonjour
En VBA, pour manipuler une feuille de calcul donnée, il est souvent utile de créer une variable objet comme ceci :
Code:
Set MaFeuille = ActiveWorkbook.Worksheets("Feuil1")
Sur ce code, "Feuil1" correspond au nom de l'onglet de la feuille visible dans Excel.
Coté VBA Editor, il est possible d'utiliser le nom VBA de la feuille de calcul (qui par défaut est également Feuil1) et qui correspond à la propriété (Name) avec les parenthèses.
Jusqu'ici, j’utilise ce nom VBA de la feuille pour ne pas être tributaire du nom visible côté Excel comme ceci :
Code:
Feuil2.Range("A1") = "test"
J'en arrive à ma problématique : comment déclarer une variable objet avec l'instruction set en utilisant le nom VBA de la feuille et pas le nom visible d'Excel ?
Cela me serait particulièrement utile lorsque je souhaite travailler sur d'autres classeurs que celui qui contient le code VBA et pour manipuler une des feuilles de celui-ci.
Exemple pour un classeur nommé Planning.xlsx avec une feuille nommé "Janvier" coté Excel (et coté VBA, la feuille est nommée F01) :
Code:
1 2 3 4
|
Set MonClasseur = Workbooks("Planning.xlsx")
Set MaFeuille= MonClasseur.Worksheets("Janvier")
MaFeuille.Columns("D:D").Delete Shift:=xlToLeft |
Comment remplacer ce code pour utiliser le nom VBA de ma feuille ?
Les lignes suivantes ne fonctionnent pas :
Code:
1 2 3 4
|
Set MonClasseur = Workbooks("Planning.xlsx")
Set MaFeuille= MonClasseur.F01 'erreur sur cette ligne
MaFeuille.Columns("D:D").Delete Shift:=xlToLeft |
J'espère que ma demande est assez explicite.
Merci pour toute aide apportée.
DG
Peut être un début de solution
Voici une adaptation d'un code qui permet de lister avec debug et surtout d'agir sur la feuille cible :
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
|
Public Sub avoir()
Dim F As Worksheet
For Each F In Worksheets
Debug.Print Application.ThisWorkbook.VBProject.VBComponents(F.CodeName).Name
If (F.CodeName) = "I" Then
F.Activate
F.Cells(1, 1).Value = "OK"
End If
Next F
Set F = Nothing
End Sub |
Dans mon cas la feuille est nommée I bien sur, au fait quel code utilise tu pour nommer les feuilles (par simple curiosité) de mon côté j'utilise une adaptation à partir de Dev..
Code:
1 2 3 4 5 6 7 8 9
|
'********* Attribuer un Nom-Système à une feuille de calcul ***
Sub RenommerCodeName()
Dim ws As Worksheet
Set ws = ThisWorkbook.Sheets("INTERFACE")
'Attention: le nouveau nom ne doit pas contenir d'espace.
ThisWorkbook.VBProject.VBComponents(ws.CodeName).Name = "I"
Set ws = Nothing
End Sub |
Bien cordialement