Sub test()
cn = "Feuil3"
With Application.VBE.MainWindow
For n = 1 To Sheets.Count
If Sheets(n).CodeName = cn Then MsgBox (Sheets(n).Name)
Next n
End With
End Sub
Sub test()
Dim cn As String
Dim LaFeuille As Worksheet
Sheets.Add
With Application.VBE.MainWindow
cn = ActiveSheet.CodeName
End With
Feuil1.Select 'sert juste à voir quand une autre feuille est active
Set LaFeuille = ConnaitreMaFeuille(cn)
LaFeuille.Range("A1") = "titi"
End Sub
Function ConnaitreMaFeuille(MonCodeName As String) As Worksheet
Dim ws As Worksheet
For Each ws In Worksheets
If ws.CodeName = MonCodeName Then
Set ConnaitreMaFeuille = ws
Exit For
End If
Next
End Function
Sub test()
Dim cn As String
Dim LaFeuille As Worksheet
cn = Sheets(2).CodeName 'par exemple
Set LaFeuille = ConnaitreMaFeuille(cn)
LaFeuille.Range("A1") = "titi"
End Sub
Function ConnaitreMaFeuille(MonCodeName As String) As Worksheet
Dim ws As Worksheet
For Each ws In Worksheets
If ws.CodeName = MonCodeName Then Set ConnaitreMaFeuille = ws: Exit Function
Next
End Function
The Name property, not the CodeName (string), is the index to the Worksheets collection.
Use Worksheets(Sheet1.Name).Select, not Worksheets("Sheet1").Select
(assuming that Sheet1 is the CodeName and not the Name of a worksheet).
Sheet1 is a (reference to a) Worksheet object. Think of it as a variable (an object variable) that contains a Worksheet reference.
"Sheet1" is a string that happens to be the code name of the worksheet
object Sheet1.
sheetreturn is a string variable that contains the code name of Sheet1.
If you must use sheetreturn (the string), you must use it to get the
worksheet (the object).
Function SheetCodeNamed(sCodeName as String) As Worksheet
'Returns a WORKSHEET given its codename STRING.
Dim wks As Worksheet
For Each wks In Worksheets
If wks.CodeName = sCodeName Then
Set SheetCodeNamed = wks
Exit For
End If
Next wks
End Function
Je connais le fil et je viens de retester (j'avais oublié de fermer la fenêtre VBE) et la suppression de ne gêne en rien le fonctionnement de la macro sur ma machine. Il y a des choses vraiment strange d'une machine à l'autre!Alors le With Application.VBE.MainWindow est indispensable dans le cas que j'utilisais d'ajout d'une feuille (voir le fil référencé par pierrejean)
Je confirmeJe ne crois pas que Grégoire veuille savoir comment récupérer le codename mais plutôt de savoir comment appeler la feuille à l'aide de ce code name.
Je veux dire récupérer l'objet Worksheet ayant ce codenameLa question que je me pose c'est : qu'entends-tu par "récupérer la feuille associée" ?
Dans une application où les feuilles vont et viennent, l'index de la feuille n'est vraiment pas une donnée fiable, et le name non plus, car ils peuvent être changés par l'utilisateur, ce qui est difficilement contrôlable... je ne sais pas s'il existe des événements sheetDelete() ou des trucs du genre. Le codename est la seule information qui puisse permettre de retrouver une feuille à coup sûr. La question que je me posais c'est: Existe-t-il une fonction dans l'API d'excel qui permette de récupérer la feuille. En lisant ce fil on comprend que non et qu'il faut se taper sa propre fonction...merci beaucoupil me semblait qu'en ayant le Sheets(n).Name et même le n seulement on etait a même de faire ce que l'on veut de la feuille en question !!
C'est le cas dès qu'on a un projet un tant soit peu consistant comme le mien (mais non je frime pas)si l'appel doit se répéter trop souvent