contenu de variable = nom object

Pyrof

XLDnaute Occasionnel
Bonjour,

En vba, pour activer une feuille (un onglet), on a la commande sheets("Nom de ma feuille").select

Le problème est que si quelqu'un change le nom, la macro bug : normal.

Dans l'environnement vba on clique sur une feuille on a :

Feuil1(Feuil1)
Feuil2(Feuil2)
Feuil3(Feuil3)
ThisWorkBook

Si dans excel on fait renommer l'onglet en TOTO on obtient :

Feuil1(TOTO)
Feuil2(Feuil2)
Feuil3(Feuil3)
ThisWorkBook

Maintenant par vba pour activer la feuille on a les solutions :

sheets("TOTO").select
Feuil1.select

On peut changer le nom Feuil1 en sélectionnant dans l'explorer de projets puis sur F4, et on peut retrouver les noms Feuil1 et TOTO.
Si on change Feuil1 en ma_feuille

En vb on peut faire ma_feuille.select ou sheets("TOTO").select, la première solution ne pose plus de problème si on change le nom de l'onglet.

Voici enfin mon problème

ma_var="TOTO"
sheets(ma_var).select --------------> ça fonctionne

ma_var="ma_feuille"
sheets(ma_var).select --------------> ça bug

je ne peux pas écriée ma_var.select.

En fait je voudrais transformer le contenu d'un variable en nom d'Object
Voilà, ce fut long, toutes mes excuses

Ceci a pour but que dans des développements complexes, le nom apparent des onglets n'est pas utilisé dans les macros : sécurité.

Bonne journée
 

Pierrot93

XLDnaute Barbatruc
Re : contenu de variable = nom object

Bonjour Pirof, Pascal

si j'ai bien compris :

Code:
'declaration d'une variable
Dim ws As Worksheet
'utilisation de la variable avec le CODENAME de ta feuille
Set ws = Ma_Feuille
'2 façons ensuite de sélectionner ta feuille
'directement par le CODENAME
Ma_Feuille.Select
'ou avec la variable
ws.Select

bon après midi
@+
 

Pyrof

XLDnaute Occasionnel
Re : contenu de variable = nom object

Pierrot 93
dans cette ligne tu ne mets pas "Ma_feuille" or cette valeur peut dépndre de calcul (concaténation) du type : Set ws= "Tot_" & numero
Set ws = Ma_Feuille

Je ne connaissais pas la commande codename (on n'arrive pas à tout connaître) donc merci a vous.
de ça j'en ai écrit ce code :

Sub test()
numero=10
var="essai_" & numero
test = active_sheet(var)
if test = 0 then message d'erreur
End Sub


Function active_sheet(ref)
active_sheet = 0
For Each feuille In Worksheets
If feuille.CodeName = ref Then
Sheets(feuille.Name).Select
active_sheet = 1
Exit For
End If
Next
End Function

Qui fonctionne, mais je ne trouve pas ça très pro, être contraint à faire une boucle ????
 

Pierrot93

XLDnaute Barbatruc
Re : contenu de variable = nom object

Re,

non, je ne met pas entre guillemets, puisque cela correspond au module vba de la feuille, "Ma_Feuille", dans mon exemple correspond à feuil1 de ta feuille "toto" :

Si dans excel on fait renommer l'onglet en TOTO on obtient :
Feuil1(TOTO)

donc ce nom ne pourra pas être modifié par l'utilisateur, indépendant du nom de l'onglet, et tu peux le coder directement dans tons projet.

@+
 

Pyrof

XLDnaute Occasionnel
Re : contenu de variable = nom object

Oui mais le nom peut être la concaténation de texte

var1="TOT_" & numero

et là si tu fais set ws=var1 , ça ne marche pas car var1 contient les guillemets

Voici une autre version de mon code

Sub test2()
Sheets(code_name("essai")).Select
End Sub

'----------------------------------------------------'
Function code_name(ref)
code_name = ""
For Each feuille In Worksheets
If feuille.CodeName = ref Then
code_name = feuille.Name
Exit For
End If
Next
End Function
 

Pyrof

XLDnaute Occasionnel
Re : contenu de variable = nom object

Si ce lien m'a été utile, car j'ai vu que je nétais pas le seul.
Je souhaitais avoir une commande excel existante du style codename("toto").select
(on peut toujours réver !!!!!!!!!!!!!!!!!!!)

Je vois qu'il n'en est rien.
 

PascalXLD

XLDnaute Barbatruc
Modérateur
Re : contenu de variable = nom object

Re

je viens de faire un test ainsi et ça marche

Code:
Sub toto()
Dim mafeuille As String
mafeuille = "ws2"
For Each ws In Worksheets
    If ws.CodeName = mafeuille Then
        ws.Select
        Exit For
    End If
Next
End Sub
 

Pyrof

XLDnaute Occasionnel
Re : contenu de variable = nom object

Exact

mais la fonction :

Function code_name(ref)
code_name = ""
For Each feuille In Worksheets
If feuille.CodeName = ref Then
code_name = feuille.Name
Exit For
End If
Next
End Function

peut être utilisé :

Sheets(code_name("essai")).Select
Sheets(code_name("essai")).protect

Sheets(code_name("essai")).cells(1,1)="y a du boulot"
.......
 

Discussions similaires

Statistiques des forums

Discussions
312 836
Messages
2 092 651
Membres
105 479
dernier inscrit
chaussadas.renaud