IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Macros et VBA Excel Discussion :

Utilisation nom VBA d'une feuille [XL-2007]


Sujet :

Macros et VBA Excel

  1. #1
    Membre habitué
    Profil pro
    Inscrit en
    Avril 2004
    Messages
    9
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2004
    Messages : 9
    Par défaut Utilisation nom VBA d'une feuille
    Bonjour

    En VBA, pour manipuler une feuille de calcul donnée, il est souvent utile de créer une variable objet comme ceci :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Set MaFeuille = ActiveWorkbook.Worksheets("Feuil1")
    Sur ce code, "Feuil1" correspond au nom de l'onglet de la feuille visible dans Excel.

    Coté VBA Editor, il est possible d'utiliser le nom VBA de la feuille de calcul (qui par défaut est également Feuil1) et qui correspond à la propriété (Name) avec les parenthèses.

    Jusqu'ici, j’utilise ce nom VBA de la feuille pour ne pas être tributaire du nom visible côté Excel comme ceci :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Feuil2.Range("A1") = "test"
    J'en arrive à ma problématique : comment déclarer une variable objet avec l'instruction set en utilisant le nom VBA de la feuille et pas le nom visible d'Excel ?

    Cela me serait particulièrement utile lorsque je souhaite travailler sur d'autres classeurs que celui qui contient le code VBA et pour manipuler une des feuilles de celui-ci.

    Exemple pour un classeur nommé Planning.xlsx avec une feuille nommé "Janvier" coté Excel (et coté VBA, la feuille est nommée F01) :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    Set MonClasseur = Workbooks("Planning.xlsx")
    Set MaFeuille= MonClasseur.Worksheets("Janvier")
    MaFeuille.Columns("D:D").Delete Shift:=xlToLeft
    Comment remplacer ce code pour utiliser le nom VBA de ma feuille ?
    Les lignes suivantes ne fonctionnent pas :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    Set MonClasseur = Workbooks("Planning.xlsx")
    Set MaFeuille= MonClasseur.F01 'erreur sur cette ligne
    MaFeuille.Columns("D:D").Delete Shift:=xlToLeft

    J'espère que ma demande est assez explicite.

    Merci pour toute aide apportée.

    DG

  2. #2
    Expert confirmé Avatar de jfontaine
    Homme Profil pro
    Contrôleur de Gestion
    Inscrit en
    Juin 2006
    Messages
    4 756
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51
    Localisation : France, Sarthe (Pays de la Loire)

    Informations professionnelles :
    Activité : Contrôleur de Gestion

    Informations forums :
    Inscription : Juin 2006
    Messages : 4 756
    Par défaut
    Bonjour,

    Je ne suis pas certain que la portée des noms VBA dépassent le classeur.


  3. #3
    Membre habitué
    Profil pro
    Inscrit en
    Avril 2004
    Messages
    9
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2004
    Messages : 9
    Par défaut
    C'est ce que je craignais...
    J'ai d'ailleurs essayé le code :

    et cela ne fonctionne pas non plus...

    Merci en tous cas du retour !

  4. #4
    Membre averti
    Homme Profil pro
    Amateur
    Inscrit en
    Avril 2012
    Messages
    49
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Amateur

    Informations forums :
    Inscription : Avril 2012
    Messages : 49
    Par défaut Peut être un début de solution
    Voici une adaptation d'un code qui permet de lister avec debug et surtout d'agir sur la feuille cible :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
     
    Public Sub avoir()
    Dim F As Worksheet
     
        For Each F In Worksheets
        Debug.Print Application.ThisWorkbook.VBProject.VBComponents(F.CodeName).Name
            If (F.CodeName) = "I" Then
                F.Activate
                    F.Cells(1, 1).Value = "OK"
            End If
        Next F
     
    Set F = Nothing
     
    End Sub
    Dans mon cas la feuille est nommée I bien sur, au fait quel code utilise tu pour nommer les feuilles (par simple curiosité) de mon côté j'utilise une adaptation à partir de Dev..

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    '*********    Attribuer un Nom-Système à une feuille de calcul   ***
        Sub RenommerCodeName()
        Dim ws As Worksheet
        Set ws = ThisWorkbook.Sheets("INTERFACE")
        'Attention: le nouveau nom ne doit pas contenir d'espace.
        ThisWorkbook.VBProject.VBComponents(ws.CodeName).Name = "I"
        Set ws = Nothing
        End Sub
    Bien cordialement

  5. #5
    Membre éprouvé
    Homme Profil pro
    Technicien maintenance
    Inscrit en
    Juillet 2012
    Messages
    94
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Technicien maintenance
    Secteur : Industrie

    Informations forums :
    Inscription : Juillet 2012
    Messages : 94
    Par défaut
    J'ai cherché à faire ça pendant longtemps, et tu as de la chance j'ai trouvé hier :p

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    application.VBE.ActiveVBProject.VBComponents("nomdumodule/feuille/userform/n'importequoi").Name="lenomvoulu"
    edit: arf, doublé.

  6. #6
    Membre éclairé
    Homme Profil pro
    Responsable Maintenance
    Inscrit en
    Août 2012
    Messages
    479
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Responsable Maintenance

    Informations forums :
    Inscription : Août 2012
    Messages : 479
    Par défaut
    Pour ma part j'ai trouvé ceci

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Set Ws = Wb.Sheets(SheetName(Wb, TheCodeName))
    donc
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Set MaFeuille= MonClasseur.sheets(sheetname(Monclasseur,F01))
    a essayer...

  7. #7
    Membre habitué
    Profil pro
    Inscrit en
    Avril 2004
    Messages
    9
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2004
    Messages : 9
    Par défaut
    Merci à tous ! Ça marche !

    En synthétisant les réponses et un utilisant une feuille nommée côté VBA "F01", ça donne :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    Sub test()
        Dim MonClasseur As Workbook
        Dim MaFeuille As Worksheet
        Dim Nom As String
        Nom = "F01"
        Set MonClasseur = ThisWorkbook
        Set MaFeuille = MonClasseur.Sheets(SheetName(MonClasseur, Nom))
        MaFeuille.Range("A1") = "ça marche"
    End Sub
     
    Function SheetName(Wb As Workbook, CodeName As String) As String
        SheetName = Wb.VBProject.VBComponents(CodeName).Properties("Name").Value
    End Function

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [VBA] Importer une feuille Excel sous Access
    Par Keldon dans le forum VBA Access
    Réponses: 10
    Dernier message: 26/04/2007, 09h22
  2. Affectation code VBA dans une feuille xls
    Par anisr dans le forum Macros et VBA Excel
    Réponses: 4
    Dernier message: 24/02/2007, 13h52
  3. Utilisation des Checkbox d'une feuille excel
    Par Abdex dans le forum Macros et VBA Excel
    Réponses: 1
    Dernier message: 03/01/2007, 18h16
  4. envoyer le contenu de variables vba vers une feuille excel
    Par Sebastien_INR59 dans le forum Access
    Réponses: 1
    Dernier message: 21/06/2006, 19h58
  5. [VBA]Renseigner une feuille excel à partir d'un site web
    Par DonKnacki dans le forum Macros et VBA Excel
    Réponses: 6
    Dernier message: 23/01/2006, 13h43

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo