codename->feuille

greg0ire

XLDnaute Nouveau
Bonjour, je voudrais juste savoir : peut-on récupérer une feuille à partir de son codename, c'est à dire que si j'ai une variable string cn qui contient un codename, puis-je récupérer la feuille associée?
 

Spitnolan08

XLDnaute Barbatruc
Re : codename->feuille

Bonjour Grégoire, Pierrejean,:)

Je 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.

En effet :
a = Sheets(2).codename va donner par exemple a = "Alpha2"
or
a.select ne fonctionne pas car il faut écrire : Alpha2.select
pour appeler cette feuille à partir de son codename...
A moins qu'il faille déclarer un type spécial pour a.

(Nota :J'avais buté sur ce problème dans un code développé surle forum, mais j'avais finalement utilisé une autre voie. La réponse m'intéresse quand même.)

Cordialement
 
Dernière édition:

Spitnolan08

XLDnaute Barbatruc
Re : codename->feuille

Re,

@Pierrejean: tout à fait d'accord avec toi. Pourquoi faire simple quand on peut faire compliqué...

Cependant, il peut être utile dans certaines applications d'utiliser le codename.
Et sur un plan intellectuel, j'aimerais savoir comment appeler une feuille à partir de ce codename puisqu'il existe!

Histoire également de ne pas mourir idiot.

Cordialement
 

PascalXLD

XLDnaute Barbatruc
Modérateur
Re : codename->feuille

Bonjour

Je viens de faire un test pour recuperer une feuille par rapport à son codename et ecrire dedans
Code:
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
Attention dans ce cas je ne pouvais avoir d'erreur (mon codename existe obligatoirement) donc pas de gestion d'erreur de faite.

Je ne sais pas si on peut faire une attaque directe
 

Spitnolan08

XLDnaute Barbatruc
Re : codename->feuille

Re,

Super Pascal! Voilà, on peut mourir maintenant...
En regardant en détail ton code, je l'ai un peu simplifié car dans le cas des feuilles, apparemment, l'instruction
With Application.VBE.MainWindow n'est pas utile.
Code:
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
Bien vue l'idée de la fonction. Encore merci.

@Pascal : dans le cas de mes sauts de page, tu m'as laissé tomber:rolleyes::eek: Tu ne vois pas pourquoi je n'obtiens pas les mêmes résultats que toi ?

Cordialement
 

PascalXLD

XLDnaute Barbatruc
Modérateur
Re : codename->feuille

RE

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)

Sinon en fouinant un peu plus sur le net pour ce problème j'ai trouvé une solution similaire à celle que j'avais donné avec des explications qui montrent qu'on ne doit pas pouvoir faire autrement

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


Pour tes saut de page j'ai refait les test avec le fichier que je t'ai envoyé et perso no problem donc difficile de continuer pour moi sans le problème
 

Spitnolan08

XLDnaute Barbatruc
Re : codename->feuille

Re,
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 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!

Cordialement
 

greg0ire

XLDnaute Nouveau
Re : codename->feuille

Je 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 confirme :)
La question que je me pose c'est : qu'entends-tu par "récupérer la feuille associée" ?
Je veux dire récupérer l'objet Worksheet ayant ce codename
il 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 !!
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 beaucoup;)
P.S: J'ai trouvé une autre façon de faire pour le problème qui comprend celui-ci mais je suis sûr que ce fil resservira.
 
Dernière édition:

pierrejean

XLDnaute Barbatruc
Re : codename->feuille

bonjour

au niveau ou se tient ce fil (et bien plus encore le precedent)
je persiste a dire que les quelques lignes de code que j'ai commises (et dont l'essentiel provient de Ti et Pascal ) permettent de savoir a quelle feuille on a affaire au moment ou elles sont traitées
ensuite ,bien sur, il est necessaire de se taper la fonction correspondante si l'appel doit se repeter trop souvent !!!
 

Discussions similaires

Réponses
0
Affichages
231
Réponses
16
Affichages
669

Membres actuellement en ligne

Statistiques des forums

Discussions
312 489
Messages
2 088 849
Membres
103 974
dernier inscrit
chmikha