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 :

[VBA-E] macros complémentaires .xla et .xlt


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Octobre 2004
    Messages
    124
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2004
    Messages : 124
    Par défaut [VBA-E] macros complémentaires .xla et .xlt
    Bonjour ,

    Je souhaiterais qu’à chaque démarrage d’excel un feuillet “produits complémentaires” soit ajouter au classeur en cour .De meme pour un fichier excel qui existerait déjà .

    Pour cela j’aie crée une macro complémentaire .xla et un fichier modèle .xlt (ce dernier contenant mon feuillet « produits complémentaires »)

    Voici ce que j’aie codé dans mon .xla (dans ThisWorkBook)

    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
    16
     
    Public WithEvents app As Excel.Application
     
    Private Sub app_WorkbookOpen(ByVal Wb As Workbook)
        MsgBox "Ouverture d'un classeur"
     
    End Sub
     
    Private Sub Workbook_Open()
     
        Set app = Excel.Application
     
        ThisWorkbook.Sheets.Add After:=Worksheets(Worksheets.Count), Type:= _
            "C:\Documents and Settings\a\Application Data\Microsoft\Modèles\PRODUITS COMPLEMENTAIRES.xlt"
     
    End Sub
    Mais le feuillet « produits complémentaires » n’est pas ajouté automatiquement …
    Rmq : pas de bug si je lance excel directement et ouvre ainsi un nouveau classeur.En revanche ça plante sévère si j’ouvre un fichier .xls existant .


    Que manque-t-il ? merci …

  2. #2
    Expert éminent


    Profil pro
    Inscrit en
    Juin 2003
    Messages
    14 008
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 14 008
    Par défaut
    pourquoi n'utilise tu pas la variable WB .. pour définir le classeur dans lequel la feuille doit être ajoutée...?

  3. #3
    Membre confirmé
    Profil pro
    Inscrit en
    Octobre 2004
    Messages
    124
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2004
    Messages : 124
    Par défaut
    Finalement c’est devenu ceci .

    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
    16
    17
    18
    19
    20
    21
    Public WithEvents app As Excel.Application
     
    Private Sub app_WorkbookOpen(ByVal Wb As Workbook)
        MsgBox "Ouverture d'un classeur"
     
    End Sub
     
    Private Sub Workbook_Open()
     
     Set app = Excel.Application
    Call essai.feuillet
     
    End Sub
     
    Sub feuillet()
     
    Application.Sheets.Add After:=Worksheets(Worksheets.Count), Type:= _
    "C:\Documents and Settings\a\Application Data\Microsoft\Modèles\PRODUITS COMPLEMENTAIRES.xlt" 'ici erreur d'execution 1004
     
     
    End Sub
    J'y suis presque mais ...

    L’inconvénient est que cela ne marche pas avec les fichiers .xls déjà existants .
    "Erreur d’execution 1004 ,
    La méthode ‘Worksheet de l’objet ‘_Global’ a échoué"

    Par contre en ce contentant de lancer excel via le menu démarrer , ça fonctionne ….

  4. #4
    Expert éminent


    Profil pro
    Inscrit en
    Juin 2003
    Messages
    14 008
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 14 008
    Par défaut
    Citation Envoyé par bbil
    pourquoi n'utilise tu pas la variable WB .. pour définir le classeur dans lequel la feuille doit être ajoutée...?
    il est ou ton code ...?

    à quoi cela sert :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
     
    Private Sub app_WorkbookOpen(ByVal Wb As Workbook)
        MsgBox "Ouverture d'un classeur"
     
    End Sub

  5. #5
    Membre confirmé
    Profil pro
    Inscrit en
    Octobre 2004
    Messages
    124
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2004
    Messages : 124
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    MsgBox "Ouverture d'un classeur"
    .
    Ne sert à rien .
    C'est du code que j'aie pompé pour mieux cerner l'utilité des fichiers .xla .

    pourquoi n'utilise tu pas la variable WB .. pour définir le classeur dans lequel la feuille doit être ajoutée...?
    Je ne connais pas la variable WB ..+ quelque chose .Il me semble que cela se rattache à une sorte de constante vb .. .
    Mais je n'aie rien trouvé comme constante commencant par WB dans la doc excel ...

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    Private Sub app_WorkbookOpen(ByVal Wb As Workbook)
        MsgBox "Ouverture d'un classeur"
     
    End Sub
     
    Private Sub Workbook_Open()
     
     Set app = Excel.Application
    Call essai.feuillet
     
    End Sub
    est dans le fichier ThisWorkBook correspondant à ma macro complémentaire .

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    Sub feuillet()
    Application.Sheets.Add After:=Worksheets(Worksheets.Count), Type:= _
    "C:\Documents and Settings\a\Application Data\Microsoft\Modèles\PRODUITS COMPLEMENTAIRES.xlt" 'ici erreur d'execution 1004
    End Sub
    Cette partie de code est dans le module de ma macro complémentaire .

  6. #6
    Expert éminent


    Profil pro
    Inscrit en
    Juin 2003
    Messages
    14 008
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 14 008
    Par défaut
    bon alors on va faire un peu de tri pour t'aider à comprendre ton code ...

    tout d'abords, pour gérer les événements de l'objet application crée dans ta macro complémentaire un module de classe ... dans lequel tu met ton code :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    Option Explicit
     
    Public WithEvents App As Application
     
    Private Sub app_WorkbookOpen(ByVal Wb As Workbook)
        MsgBox "Ouverture d'un classeur" & Wb.Name
     
    End Sub
    renomme ce module de classe ( par défaut classe1) en EventClassModule (comme dans l'aide en ligne excel...) par exemple...

    dans un module rajoute la fonction d'initialisation ...
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    Dim X As New EventClassModule
     
    Sub InitializeApp()
        Set X.App = Application
    End Sub

    puis dans le code thisWorkbook.. de ta macro complémentaire .. rajoute:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    Option Explicit
    Private Sub Workbook_Open()
     InitializeApp
    End Sub
    maintenant sauve, ferme puis ouvre à nouveau ton fichier .. de façon à exécuter WorkBook_open.. et initialiser ton gestionnaire d'événement ... (tu peu aussi lancer directement WorkBook_open...



    enfin ouvre un autre fichier excel .... et observe le résultat...

  7. #7
    Membre confirmé
    Profil pro
    Inscrit en
    Octobre 2004
    Messages
    124
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2004
    Messages : 124
    Par défaut
    Oui c’est plus clair et mieux organisé .

    Restes l’insertion du feuillet ….Toujours le même problème ça fonctionne si je lance excel par le menu démarrer ; ne fonctionnne pas si je lance un fichier .xls existant .

    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
    16
    17
    18
    Dim X As New EventClassModule
     
    Sub InitializeApp()
     
        Set X.App = Application
     
    feuillet
     
    End Sub
     
     
     
    Sub feuillet()
     
    ActiveWorkbook.Sheets.Add After:=Worksheets(Worksheets.Count), Type:= _
    "C:\Documents and Settings\a\Application Data\Microsoft\Modèles\PRODUITS COMPLEMENTAIRES.xlt" 'ici erreur d'execution 1004 La méthode Work sheet a échoué
     
    End Sub
    Si je force avec la touche F8 , le feuillet est inséré mais bon ça à planter …

Discussions similaires

  1. [XL-2003] Macro complémentaire xla: ajout description fonction perso
    Par yizashi dans le forum Macros et VBA Excel
    Réponses: 1
    Dernier message: 17/01/2012, 13h23
  2. [XL-2003] VBA et Macro complémentaire (utilitaire d'analyse)
    Par Koksinhell dans le forum Macros et VBA Excel
    Réponses: 5
    Dernier message: 28/01/2010, 19h28
  3. [XL-2003] Macro complémentaire .xla
    Par drakkar_agfa dans le forum Macros et VBA Excel
    Réponses: 10
    Dernier message: 01/05/2009, 16h30
  4. macro complémentaire xla
    Par harlockbaz dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 28/01/2008, 09h16
  5. [VBA-E] Utilisation macros complémentaire xla
    Par EvaristeGaloisBis dans le forum Macros et VBA Excel
    Réponses: 5
    Dernier message: 10/04/2007, 16h15

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