Nom interne des feuilles Excel; appel macro comp

Zapretis1

Nouveau membre
Une question à laquelle je ne trouve de réponse nulle part...
Au départ j'ai un fichier Excel et une macro VBA incorporée au fichier qui appelle les feuillles du classeur de la manière suivante:
Private Sub charge_donnees()
'Variables d'Entrées
Ref = Feuil4.Cells(3, 3).CurrentRegion.Address
Set Gen = Feuil4.Range(Ref)
End Sub

L'utilisateur du classeur peut changer le nom des feuilles, cela n'a pas d'incidence sur le code VBA.

Maintenant pour séparer le classeur qui stocke les données du code, je crée une macro complémentaire. L'appel des feuilles comme plus haut ne fonctionne plus: l'objet du classeur est introuvable.

La syntaxe Activeworkbook.Worksheets(4) active la feuille placée en 4-ème position dans le classeur et pas la feuille dont le nom interne (visible en clair sans parenthèse dans le Visual Basic Editor).
La syntaxe Activeworkbook.Worksheets("Gen") m'oblige à garantir que l'utilisateur du classeur ne changera pas le nom de la feuille "Gen".

La question:
Est-il possible d'appeler les feuilles de mon classeur par leur nom interne à partir de la macro complémentaire? ou bien est-ce que j'essaie de faire quelque chose qui n'est pas géré par Excel-VBA? et dans ce cas je dois obliger l'utilisateur à ne pas modifier le nom des feuilles du classeur...
 

zeb

Modérateur
Tu peux accéder à une feuille par son numéro d'ordre 1), par son nom interne 2), ou par son nom externe 3).

1) Worksheets(n)
2) Feuilln
3) Worksheets("Feuilln")

Pour le numéro d'ordre, je te laisse faire, pour le nom externe, je laisse tes utlisateur tout cafouiller, pour le nom interne, sers-toi de la fenêtre PROPERTIES de l'objet Sheet. "(Name)" c'est le nom interne, Name c'est le nom externe. Subtil, n'est-ce pas ?


Enjoy!
 

Zapretis1

Nouveau membre
Merci pour cette réponse. Je me suis peut-etre mal exprimé, mais la question ne portait pas sur "comment modifier le nom interne d'une feuille?" mais sur "comment accéder à la feuille 1 du classeur 1 à partir d'une macro complémentaire d'un classeur 2 en utilisant le nom interne de la feuille 1, si cela est possible?"
La macro complémentaire ne trouvait deja pas la feuille 4 lorsque le nom interne etait "Feuil4"...
 

zeb

Modérateur
:)

Ah, bah, rien à voir avec les feuilles alors, mais bien avec les classeurs

Jette un oeil du côté de l'objet Workbook.
Code:
Workbooks(1).Worksheet(1)
devrait faire l'affaire.
 

Zapretis1

Nouveau membre
Effectivement. J'avais déjà essayé cette façon d'appeler les feuiles mais avec ActiveWorkbook au lieu de Workbook. Le classeur de la macro devait s'appeler lui-même.
Merci ton aide.
 

Zapretis1

Nouveau membre
Et en fait... non! Je me suis leurré tout seul.
Le code Workbooks(1).Worksheet(1) appelle la feuille dont l'onglet est le plus à droite dans le classeur; il ne s'agit pas du nom interne de la feuille. Il faut utiliser la propriété CodeName, malheureusement en lecture seule.
La solution consiste à écrire une fonction qui prend en entrée le numéro interne de la feuille et renvoie son nom. Il est ensuite possible d'appeler cette feuille comme dans test.

Function GetName(nIndex As Integer) As String
Dim WS As Worksheet 'Feuille
Dim sWSIn As String 'Nom interne
Dim sWSOut As String 'Nom modifiable par l'utilisateur
sWSIn = "Feuil" & nIndex
'Nom du classeur actif
sNomClasseur = ActiveWorkbook.Name
'Boucle pour trouver le nom de l'onglet correspondant
'au nom interne choisi
For Each WS In Application.Workbooks(sNomClasseur).Worksheets
If sWSIn Like WS.CodeName Then
'MsgBox (WS.Name)
sWSOut = WS.Name
Exit For
End If
Next
GetName = sWSOut
End Function

Sub test()
For i = 1 To 10
Workboos(1).Worksheets(GetName (i)).Activate

Next i
End Sub
 

gogo78

Nouveau membre
Salut, mon problème ressemble à celui là mais j'aimerais me passer du VBA...

J'ai plusieurs feuilles dont les noms sont des pays :"Allemagne", "France"....

Dans la case B2 de ma feuille de synthèse apparait le nom du pays sélectionné (via un choix dans une liste....facile)

Je veux que dans ma feuille de synthèse apparaisse les infos (cases C3 à C8 par exemple) de la feuille pays sélectionnée !....et je n'y arrive pas !

Dans l'idée, ce doit etre quelque chose comme : ='=B2'!C3 ou quelque chose comme ca !

Merci d'avance !
 
Vous devez vous inscrire ou vous connecter pour répondre ici.
Derniers messages publiés
Statistiques globales
Discussions
730 125
Messages
6 717 770
Membres
1 586 361
Dernier membre
Florian3549
Partager cette page
Haut