VBA: Nom de feuille (CodeName) ou Variable

Jam

XLDnaute Accro
Bonjour,

Je travail sur la refonte d'un projet important (près de 2000 lignes de code) comportant de nombreuses feuilles, et je m'interrogeais sur la pertinence d'utiliser soit les noms de feuilles (le "CodeName", pas le nom de l'onglet) soit des variables faisant références à ces mêmes feuilles du type
Code:
 wks = ThisWorkbook.Worksheets("Feuil1")
L'un des risques dans ce cas étant l'erreur déclenchée par la modification du nom de l'onglet par l'utilisateur.

N'ayant pas trouvé de littérature explicite sur ce sujet, je souhaiterai connaître les avantages de l'un par rapport à l'autre notamment en vitesse d'exécution.

Merci d'avance pour vos conseils.
 
Dernière édition:

Papou-net

XLDnaute Barbatruc
Re : VBA: Nom de feuille (Name) ou Variable

Bonjour Jam,

(le "Name", pas le nom de l'onglet) ?

Je suppose que tu entends par là le nom système de la feuille (CodeName)?

Je ne suis pas certain que ça augmente la rapidité d'exécution, le gros avantage est que son utilisation t'affranchit de modifications ou d'erreurs éventuelles dans le nom des onglets. Toutefois, tu ne pourras pas utiliser de variables dans ce cas.

Pour reprendre ton code:

Code:
wks = ThisWorkbook.Feuil1
tout simplement.

Cordialement.
 

Jam

XLDnaute Accro
Re : VBA: Nom de feuille (Name) ou Variable

Je suppose que tu entends par là le nom système de la feuille (CodeName)?

Je modifiais mon post en même temps que tu m'envoyais ta réponse. C'est effectivement cela.
Par contre - excuse moi mais j'ai l'esprit embué par l'analyse de tout ce code - mais que veux-tu dire par
tu ne pourras pas utiliser de variables
?

Merci
 

Papou-net

XLDnaute Barbatruc
Re : VBA: Nom de feuille (CodeName) ou Variable

RE:

Je veux dire par là que tu ne peux pas utiliser une variable pour désigner le CodeName de la feuille. Donc, tu ne peux faire d'actions itératives au sein d'une boucle, par exemple.

Cordialement.
 

solquagerius

XLDnaute Junior
Re : VBA: Nom de feuille (CodeName) ou Variable

Salut !

Comme le dit Papou-net, ce n'est peut-être pas plus rapide, mais on évite les erreurs de nommage d'onglet (notamment si le fichier est utilisé sur plusieurs Excels ayant des langues différents... Feuil1 en francais sera Sheet1 en anglais... donc ça ne marche plus !). Le mieux est d'utiliser le codename.
Pour faire l'itération, perso j'utilise des codename explicites et j'utiliser la boucle

Foreach ws in thiswoobook.worksheets
if ws.codename = "Feuil*" then ...

en utilisant le même préfixe ou suffixe pour des feuilles de même type, on peut facilement faire des boucles.
 

Papou-net

XLDnaute Barbatruc
Re : VBA: Nom de feuille (CodeName) ou Variable

RE:

Bonsoir solquagerius,

Quand tu dis:

Pour faire l'itération, perso j'utilise des codename explicites et j'utiliser la boucle
Je ne comprends pas bien car on ne peut pas intervenir sur les CodesName qui sont générés par l'application Excel.

Par contre, tu as raison, on peut toujours les itérer dans une boucle comme tu le précises

Code:
If ws.CodeName = "Feuil*" then

Mais où est l'intérêt puisque celà fait redondance avec

Code:
For Each ws in ThisWorkbook.Worksheets

Cordialement.
 

solquagerius

XLDnaute Junior
Re : VBA: Nom de feuille (CodeName) ou Variable

Sauf erreur de ma part, on peut changer les codename (onglet propriétés de la feuille, tu changes le NAME, comme pour un module)
Du coup, l'itération peut se faire sur des noms particuliers de codename style : WS_TOTAUX, WS_TOTAUX2, etc...

Par contre, le code vba ne peut pas changer un codename, on doit le faire à la main... solution, créer une feuille avec un codename TOTO, et la copier/insérer en VBA créera une feuille TOTO2 etc... on garde la même structure du nom.
 

MJ13

XLDnaute Barbatruc
Re : VBA: Nom de feuille (CodeName) ou Variable

Bonjour à tous

Pour renommer le CodeName d'une feuille, j'ai retrouver ce code.

Code:
'---

'Nécessite dd'activer la référence "Microsoft Visual Basic For Application Extensibility 5.3"
'---
'Attention: Le CodeName n'accepte pas les espaces dans le nom
'----

With ThisWorkbook

    .VBProject.VBComponents(.Worksheets("historique2006").CodeName).Name = "NouveauNom"

End With
 

ctiquoi

XLDnaute Nouveau
Re : VBA: Nom de feuille (CodeName) ou Variable

J'arrive après la bataille, mais cela peu servir à quelqu'un.

Changer le CodeName
Code:
Dim mySheet As Worksheet
Set mySheet = Worksheets("feuil1")
mySheet.[_CodeName] = "Toto"

Parfois, il faut ressaisir la partie après "mySheet." car la saisie automatique remplace mySheet.[_CodeName] par mySheet.CodeName
 

Discussions similaires

Statistiques des forums

Discussions
312 321
Messages
2 087 249
Membres
103 498
dernier inscrit
FAHDE