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

Rechercher des sujets similaires à "variable codename"