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

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

    Informations forums :
    Inscription : Octobre 2004
    Messages : 124
    Points : 80
    Points
    80
    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 sénior


    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
    Points : 20 038
    Points
    20 038
    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 régulier
    Profil pro
    Inscrit en
    Octobre 2004
    Messages
    124
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2004
    Messages : 124
    Points : 80
    Points
    80
    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 sénior


    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
    Points : 20 038
    Points
    20 038
    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 régulier
    Profil pro
    Inscrit en
    Octobre 2004
    Messages
    124
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2004
    Messages : 124
    Points : 80
    Points
    80
    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 sénior


    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
    Points : 20 038
    Points
    20 038
    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 régulier
    Profil pro
    Inscrit en
    Octobre 2004
    Messages
    124
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2004
    Messages : 124
    Points : 80
    Points
    80
    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 …

  8. #8
    Expert éminent sénior


    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
    Points : 20 038
    Points
    20 038
    Par défaut
    InitializeApp() .. n'est la que pour initialiser la gestion des événements de l'application ... c'est pas la qu'il faut appeler ta fonction feuillet...


    Le message box fonctionne-t'il ...?
    tu n'as toujours pas trouvé .. WB ?

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

    Informations forums :
    Inscription : Octobre 2004
    Messages : 124
    Points : 80
    Points
    80
    Par défaut
    Oui le msgBox fontionne ... Même la macro complémentaire arrachée de travers est affichée en msgBox .
    Wb oui vu WB non ...

  10. #10
    Expert éminent sénior


    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
    Points : 20 038
    Points
    20 038
    Par défaut
    Citation Envoyé par aA189
    ...arrachée.. .

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

    Informations forums :
    Inscription : Octobre 2004
    Messages : 124
    Points : 80
    Points
    80
    Par défaut
    aA189 a écrit :
    ...arrachée.. .
    C'est un détail ça ne nuit pas à la bonne execution de la macro complémentaire qui m'intéresse à mon avis .

  12. #12
    Expert éminent sénior


    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
    Points : 20 038
    Points
    20 038
    Par défaut
    Citation Envoyé par aA189
    Oui le msgBox fontionne ... Même la macro complémentaire arrachée de travers est affichée en msgBox .
    Wb oui vu WB non ...
    c'est pareil .. VBA n'est pas "case sensitive" pour les nom de variable...

    donc si ton message box fonctionne... tu as une variable "Wb" qui "pointe" sur le classeur ouvert et te permet donc d'effectuer les traitements désirés à l'ouverture ... en gros (j'ai pas le temps de tester..) :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    Private Sub app_WorkbookOpen(ByVal Wb As Workbook)
        MsgBox "Traitement du classeur : " & Wb.Name
     Wb.Sheets.Add After:=Wb.Worksheets(wb.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
    ensuite.. faudra peu-être que tu rajoute un test .. sur le nom du classeur ouvert ... l'existence de la feuille.... etc ... afin d'éviter le rajout de ta feuille à des endroits non désirés...

    PS: je n'ai pas vérifié ton code d'ajout de feuille... il pouvoir être amélioré..?

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

    Informations forums :
    Inscription : Octobre 2004
    Messages : 124
    Points : 80
    Points
    80
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    Wb.Sheets.Add After:=Wb.Worksheets(wb.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é
    Non en lancant un fichier .xls placé sur mon bureau ça me renvoie un méchant

    "Rapport d'erreur" avec 2 bouton "envoyer-ne pas envoyer"

    me renvoie le nom de ma macro complémentaire ...

    En lancant par le bouton démarrer pas de bug mais pas de feuillet inséré non plus

  14. #14
    Expert éminent sénior


    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
    Points : 20 038
    Points
    20 038
    Par défaut
    ton code ..Wb.name... est bien dans la macro complémentaire..?

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

    Informations forums :
    Inscription : Octobre 2004
    Messages : 124
    Points : 80
    Points
    80
    Par défaut
    J'aie fait ceci dans un fichier excel
    1/fichier enregistrer sous/macro complementaires/zaza3

    2/Ensuite j'aie coché zaza3 dans le menu "macros complémentaires"

    3/Enfin dans mon editeur VBA , je retrouve "zaza3" dans l'explorateur de projet
    3.1/j'y aie rajouté un module de classe
    3.2/Et dans ce module il y a le code

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    Option Explicit
     
    Public WithEvents App As Application
     
    Private Sub app_WorkbookOpen(ByVal Wb As Workbook)
        MsgBox "Ouverture d'un classeur" & Wb.Name
     
    End Sub
    Donc à priori oui; le code est bien dans la macro complémentaire .

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

    Informations forums :
    Inscription : Octobre 2004
    Messages : 124
    Points : 80
    Points
    80
    Par défaut
    Il semble que la macro complémentaire que j'aie dézinguée fasse plus de tort que je ne pense

    ex : en lancant un fichier .xls à partir du bureau

    la 1er msgbox donne le texte "Ouverture d'un classeur zaza3.xla"
    La 2 ème msgbox coorespondant à la macro complémentaire dézinguée n'apparait pas .
    Et je suis jeté dehors par un message "rapport d'erreur"

    ex2 : en lancant à partir du bouton "démarrer"

    la 1er msgbox donne le texte "Ouverture d'un classeur zaza3.xla"
    la 2ème msgbox donne le texte "Ouverture d'un classeur zaza2.xla"

    J'aie désinstallé et réinstallé MS OFFICE mais la trace des macros complémentaires est gardée !!Desinstaller ne nettoie pas en profondeur apparemment .

  17. #17
    Expert éminent sénior


    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
    Points : 20 038
    Points
    20 038
    Par défaut
    pour la gestion des macros complémentaires .. c'est sous excel .. puis macros complémentaires...


    puis tu peu tester le nom du classeur Wb.name.. afin de savoir si tu dois où pas rajouter la feuille...

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

    Informations forums :
    Inscription : Octobre 2004
    Messages : 124
    Points : 80
    Points
    80
    Par défaut
    Voici ce que j’aie tenté avec d’autres bidouilles sans succés
    La principale difficulté étant d'obtenir une valeur dans la variable « Sh »

    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
    22
    Option Explicit
     
    Public WithEvents App As Application
     
    Private Sub App_WorkbookNewSheet(ByVal Wb As Workbook, ByVal Sh As Object)
     
    For Each Wb In Workbooks
    MsgBox "Ouverture d'un classeur" & Wb.Name  'ne renvoie rien
    Next Wb
     
    For Each Sh In Worksheets
    MsgBox "Ouverture d'un feuillet" & Sh.Name  ' ne renvoie rien
    Next Sh
     
     
     
    'Private Sub App_NewWorkBook(ByVal Wb As Workbook, ByVal Sh As Sheets)
    ' MsgBox "Ouverture d'un classeur" & Wb.Name
     'MsgBox "Ouverture d'un feuillet" & Sh.Name
    'End Sub
     
    End Sub

  19. #19
    Inactif  
    Avatar de ouskel'n'or
    Profil pro
    Inscrit en
    Février 2005
    Messages
    12 464
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2005
    Messages : 12 464
    Points : 15 543
    Points
    15 543
    Par défaut
    Citation Envoyé par aA189
    J'aie désinstallé et réinstallé MS OFFICE mais la trace des macros complémentaires est gardée !!Desinstaller ne nettoie pas en profondeur apparemment .
    Pour désactiver une macro complémentaire par le code, tu peux utiliser
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
        AddIns("Macro Complémentaire.xla").Installed = False
    Ça doit peutêtre s'utiliser avec "Application."
    Je ne réponds pas à ta question essentielle mais je n'ai pas suivi depuis le début, désolé... Épi j'ai jamais fait ce que tu tentes de faire... si j'ai compris quelque chose

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

    Informations forums :
    Inscription : Octobre 2004
    Messages : 124
    Points : 80
    Points
    80
    Par défaut
    J'aie reussi à tout remettre d'equerre .J'avais mis un .xla dans mon dossier XLSTART
    et ça intéfère avec l'explorateur de projet dans l'EDI vba .

    Pour ce qui de ma macro .

    L'objectif est très simple : il s'agit de rajouter un feuillet automatiquement quel que soit le fichier .xls et quel que soit le chemin pour l'(les) ouvrir .

    Un genre de fichier modèle ou de gabarit ...

    La procédure me parait lourde (utiliser la notion de module de classe uniquement pour insérer un feuillet de manière automatique ...)

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, 14h23
  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, 20h28
  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, 17h30
  4. macro complémentaire xla
    Par harlockbaz dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 28/01/2008, 10h16
  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, 17h15

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