Microsoft 365 Définir une variable Worksheet d'après son codeName ?

Boostez vos compétences Excel avec notre communauté !

Rejoignez Excel Downloads, le rendez-vous des passionnés où l'entraide fait la force. Apprenez, échangez, progressez – et tout ça gratuitement ! 👉 Inscrivez-vous maintenant !

BenHarber

XLDnaute Occasionnel
Bonjour Le Forum,
J'ai une fois de plus besoin de vos lumières : est-ce que qq'un peut m'aiguiller ?

Soit les 2 variables-objet suivantes :
Dim monWbk as Workbook et Dim monSht as Worksheet

J'initialise sans difficulté monWbk avec la commande suivante :
Set monWbk = Workbooks.Open("monChemin")

J'aimerais maintenant initialiser monSht avec son codeName "maFeuille" (but = plus de 'solidité', les utilisateurs ayant quelquefois tendance à renommer les onglets...😆)
J'ai donc saisi la commande suivante :
Set monSht = monWbk.maFeuille
Mais j'obtiens "Erreur '438' : Propriété ou méthode non géré par cet objet"
J'ai aussi essayé : Set monSht = maFeuille et là j'obtiens "Erreur '424' : objet requis"

Du coup, avez-vous une autre idée ? Merci d'avance pour vos suggestions !
 
Solution
Bonjour.
Si, il devrait y avoir une autre solution, si le projet VBA de l'autre classeur a un nom différent de celui du classeur qui veut y accéder, son projet peut être coché dans les références de ce dernier. Dans ce cas, précédés du nom du projet référencé suivi d'un point, ses objets Worksheet devraient être connus sous leur nom reproduit par leur propriété CodeName.
Bonjour @Phil69970
Merci pour ta réponse rapide. Seulement comme indiqué en dernière ligne de mon post, j'ai essayé la commande
Set monSht = maFeuille mais j'obtiens : "Erreur '424' : objet requis"

Je pense que cette commande fonctionne quand le code et l'objet qu'il vise ('maFeuille' dans mon cas, ou 'Feuil1' dans ton exemple) sont stockés dans le même fichier.
Or pour moi, le code se trouve dans un fichier 'maître', alors que l'objet dont le codeName est 'maFeuille' se trouve dans un autre fichier que j'ouvre avec la commande 'Set monWbk = Workbooks.Open("monChemin")'
 
@BenHarber

Si j'ai compris tu es sur 2 fichiers

Essaye ceci en adaptant les différents noms et en complétant pour ton cas ou bien fourni des 2 fichiers avec leur chemin et ce que tu veux faire

VB:
Sub test()
Dim WkA As Workbook, WkB As Workbook, Fichier$, DerLig&

Set WkA = ThisWorkbook                                                      'classeur A qui contient la macro

Dim Chemin As String

Chemin = ThisWorkbook.Path & "\essai\"                                      'Chemin du classeur B

'***** 'Ouverture du classeur B
Workbooks.Open Filename:=Chemin & Dir(Chemin & "Fichier2.xlsx")
Fichier = Chemin & Dir(Chemin & "Fichier2.xlsx")
Set WkB = ActiveWorkbook

DerLig = WkB.Sheets(Feuil1).Range("A" & Rows.Count).End(xlUp).Row           ' Derniere ligne de la colonne A du classeur B feuil1
 '....etc....

 '****
WkB.Close SaveChanges:=False                                                ' Ferme sans enregistrer le classeur B
 '....etc....

End Sub

Merci de ton retour
 
Bonjour à toutes & à tous, bonjour @BenHarber, @Phil69970, @sylvanu
Peut-être avec quelque chose comme ça
Enrichi (BBcode):
Sub tst()

Dim monWbk As Workbook, LstSh As Worksheets, monSht As Worksheet
'MonChemin = path du fichier à ouvrir
Set monWbk = Workbooks.Open("monChemin")
'...

Set lst = monWbk.Worksheets

For Each Wsh In lst
     If Wsh.CodeName = "maFeuille" Then
          Set monSht = Wsh
          Exit For
     End If
Next
'...
End Sub

À bientôt
 
Dernière édition:
@BenHarber

Tu as mal lu

Dans mon exemple
Le codename est Feuil1 Regarde la pièce jointe 1211029

Le nom de la feuille est "Truc" Regarde la pièce jointe 1211030 Regarde la pièce jointe 1211031

Voir le fichier
J'ai bien compris @Phil69970 : mais ton code VBA ET ton objet onglet (n
@BenHarber

Si j'ai compris tu es sur 2 fichiers

Essaye ceci en adaptant les différents noms et en complétant pour ton cas ou bien fourni des 2 fichiers avec leur chemin et ce que tu veux faire

VB:
Sub test()
Dim WkA As Workbook, WkB As Workbook, Fichier$, DerLig&

Set WkA = ThisWorkbook                                                      'classeur A qui contient la macro

Dim Chemin As String

Chemin = ThisWorkbook.Path & "\essai\"                                      'Chemin du classeur B

'***** 'Ouverture du classeur B
Workbooks.Open Filename:=Chemin & Dir(Chemin & "Fichier2.xlsx")
Fichier = Chemin & Dir(Chemin & "Fichier2.xlsx")
Set WkB = ActiveWorkbook

DerLig = WkB.Sheets(Feuil1).Range("A" & Rows.Count).End(xlUp).Row           ' Derniere ligne de la colonne A du classeur B feuil1
 '....etc....

 '****
WkB.Close SaveChanges:=False                                                ' Ferme sans enregistrer le classeur B
 '....etc....

End Sub

Merci de ton retour
Oui @Phil69970 : sur le fond c'est bien ça.
Mais du coup quand je reprends ton exemple, c'est à la commande "DerLig = WkB.Sheets(Feuil1).Range("A" & Rows.Count).End(xlUp).Row" que ça plante : erreur 9 L'indice n'appartient pas à la sélection
J'ai essayé : "DerLig = WkB.Sheets("Feuil1").Range("A" & Rows.Count).End(xlUp).Row = erreur 9 L'indice n'appartient pas à la sélection
J'ai essayé : "DerLig = WkB.Feuil1.Range("A" & Rows.Count).End(xlUp).Row = erreur 438 Propriété/Méthode non gérée par cet objet

PS : trop long de te communiquer mon fichier à moins de tout reconstruire en partant de 0 (actuellement chemin Sharepoint ="https://... données perso...etc...)
 
re @BenHarber
Regarde mon post #10 je pense qu'il solutionne ton problème ...
À Bientôt
Bonjour @AtTheOne ,
Merci beaucoup pour ta réponse qui, effectivement, fonctionne : 👍🏻
Je voulais m'affranchir -par économie de lignes de code- de passer par une boucle sur tous les onglets de mon fichier B mais apparemment, il n'y a pas d'autres solutions !

Et merci aussi à @Phil69970 et @sylvanu pour vos contributions !
 
Bonjour.
Si, il devrait y avoir une autre solution, si le projet VBA de l'autre classeur a un nom différent de celui du classeur qui veut y accéder, son projet peut être coché dans les références de ce dernier. Dans ce cas, précédés du nom du projet référencé suivi d'un point, ses objets Worksheet devraient être connus sous leur nom reproduit par leur propriété CodeName.
 
Bonjour.
Si, il devrait y avoir une autre solution, si le projet VBA de l'autre classeur a un nom différent de celui du classeur qui veut y accéder, son projet peut être coché dans les références de ce dernier. Dans ce cas, précédés du nom du projet référencé suivi d'un point, ses objets Worksheet devraient être connus sous leur nom reproduit par leur propriété CodeName.
Bonjour @Dranreb ,
Top du top ta solution ! Nul besoin de coder une boucle. Et c'est la 1ère fois que je personnifie le nom VBA d'un Projet : Merci beaucoup !
👏👏👏
 
- Navigue sans publicité
- Accède à Cléa, notre assistante IA experte Excel... et pas que...
- Profite de fonctionnalités exclusives
Ton soutien permet à Excel Downloads de rester 100% gratuit et de continuer à rassembler les passionnés d'Excel.
Je deviens Supporter XLD
Retour