Codename dans un autre workbook ?
Bonjour,
j'ai cherché à ouvrir un 2ème fichier excel à partir de mon premier pour copier des cellules du classeur juste ouvert vers le classeur ou se trouve la macro grâce à un Vlookup.
Suite à vos nombreux conseils, j'ai pris la bonne habitude d'utiliser le codename plutôt que le name, sauf qu'ici cela ne fonctionnais pas au départ, car excel utilisait la propriété Name au lieu du codename (la propriété name est le nom de l'onglet qui peut être renommé au contraire de codename qui ne peux pas être renomée pour info)...
Voila routine à utiliser que que cela fonctionne correctement :
Sub Button1_Click()
Dim fichier_A_ouvrir As String
Dim fichier_A_chercher_ouvrir As Workbook
Dim shFrom As Worksheet
fichier_A_ouvrir = Dir(ThisWorkbook.Path & "\" & "*training matrix*.xlsm")
Set fichier_A_chercher_ouvrir = Application.Workbooks.Open(ThisWorkbook.Path & "\" & fichier_A_ouvrir, True)
MsgBox GetSheetWithCodename("Feuil2", fichier_A_chercher_ouvrir).Range("A34").Value
On Error Resume Next
MsgBox "Texte : " & Application.VLookup("6.1", GetSheetWithCodename("Sheet2", fichier_A_chercher_ouvrir).Range("A34:B125"), 2, False)
On Error Resume Next
MsgBox "CINT : " & Application.VLookup(CInt("6.1"), GetSheetWithCodename("Sheet2", fichier_A_chercher_ouvrir).Range("A34:B125"), 2, False)
Application.ScreenUpdating = True
Application.DisplayAlerts = True
fichier_A_chercher_ouvrir.Close
End SubEn rajoutant dans un module cette function :
Function GetSheetWithCodename(ByVal worksheetCodename As String, Optional wb As Workbook) As Worksheet
Dim iSheet As Long
If wb Is Nothing Then Set wb = ThisWorkbook ' mimics the default behaviour
For iSheet = 1 To wb.Worksheets.Count
If wb.Worksheets(iSheet).CodeName = worksheetCodename Then
Set GetSheetWithCodename = wb.Worksheets(iSheet)
Exit Function
End If
Next iSheet
End FunctionUne petite contribution pour tous ceux qui prennent du temps içi pour aider tout le monde, merci encore à tous.
David
par dav999:
la propriété name est le nom de l'onglet qui peut être renommé au contraire de codename qui ne peux pas être renomée
pour info, les codename peuvent être renommés
à tester sur un nouveau classeur,
Sub Renomme_CodeName()
i = 0
For Each ws In ActiveWorkbook.Worksheets
i = i + 1
On Error Resume Next
ws.Parent.VBProject.VBComponents(ws.CodeName).Properties("_CodeName") = "XXX" & i
On Error GoTo 0
Next ws
End SubOui pardon, je voulais dire ne pas être modifiable aisément, il faut soit passer par un code, ou sinon aller des les propriétés de la feuille avec la fenêtre "développeur" pour afficher le code VBA.
Ca ne viendrait pas à l'idée des utilisateurs de mes fichiers, c'est pour cela que j'ai pris ce raccourci, mais tu as bien fait de rectifier.
Merci