Variable CodeName
Bonsoir les codeurs,
J'ai un soucis sur un code que je construis, Je souhaite aller chercher des données dans des onglets, en fonction de leur nom. En gros mon UserForm à une ComboBox qui as tous les noms des onglets, quand je valide, je vais chercher la valeur de ma ComboBox dans les noms des onglets, et lorsque je le trouve j'attribue à une variable le CodeName de ce même onglet, afin de pouvoir bosser après avec les .activate etc...
Sur le code en dessous, j'ai mis des MsgBox pour tester mon code. Il me donne bien le nom de l'onglet que j'ai sélectionné dans mon ComboBox, il me donne bien le CodeName de l'onglet, mais impossible d'aller activer avec une variable '"CodeName", j'ai une erreur code 9, l'indice n'appartient pas à la sélection. Ais-je raté quelque chose ou est-ce impossible ?
Private Sub btnValider_Click()
Unload Me
'Check données
If U1_ComboBox_Matière = "" Then
MsgBox "La matière doit être renseignée.", vbExclamation, "Erreur - 0"
Else
If U1_ComboBox_PN = "" Then
MsgBox "Le PN doit être renseigné.", vbExclamation, "Erreur - 1"
Else
'Déclaration des variables
Dim WS As Worksheet
Dim NombreFeuilles As Integer
Dim NomFeuille As String
Dim CodeFeuille As String
For Each WS In Worksheets
NomFeuille = WS.Name
CodeFeuille = WS.CodeName
If U1_ComboBox_Matière = NomFeuille Then
MsgBox NomFeuille
MsgBox CodeFeuille
Sheets("CodeFeuille").Activate
End If
Next WS
End If
End If
End Sub
Merci
Bonjour,
déjà si c'est une variable la syntaxe serait plutôt Sheets(CodeFeuille).Activate
Mais là c'est un nom de feuille qu'il attend.
En général ce qu'on fait c'est de définir une variable feuille.
Dim wsF As Worksheet
For Each ws In Worksheets
' NomFeuille = ws.Name
' CodeFeuille = ws.CodeName
If U1_ComboBox_Matière = NomFeuille Then
Set wsF = ws
' MsgBox NomFeuille
' MsgBox CodeFeuille
wsF.Activate
Exit For
End If
Next ws
eric
PS : j'ai ajouté un Exit For, tu ne peux pas en avoir plusieurs autant sortir de la boucle
Salut Eric,
Merci pour cette réponse rapide, j'avais essayé sans les guillemet mais c'était pareil. La ça fonctionne bien. Merci aussi pour le Exit For, je l'oublie sur quasiment tout mes codes...
Bonne nuit
Le codename ne se laisse pas vraiment manipuler.
Il faut l'utiliser quand tu connais la feuille et qu'elle ne change pas. Tu peux lui donner un nom plus court ou plus parlant dans VBE.
L'avantage c'est que la feuille peut être renommée ou déplacée, tu t'adresseras toujours à la bonne.
Dans ce cas même plus besoin d'utiliser une variable feuille, directement le codename.la_propriété_ou_méthode
eric
PS : une ligne de trop en commentaire mais tu as dû corriger