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 :

Créer et se servir de macros communes à tous les classeurs Excel


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Inscrit en
    Mai 2009
    Messages
    57
    Détails du profil
    Informations forums :
    Inscription : Mai 2009
    Messages : 57
    Par défaut Créer et se servir de macros communes à tous les classeurs Excel
    Bonjour,
    Je n'arrive pas à réaliser des macros qui soient communes à plusieurs classeurs. J'utilise certaines fonctions assez régulièrement, et pour l'instant je les re-crée dans chaque classeur ou j'en ai besion et ça commence à devenir assez fouilli...

    Donc je voudrai créer un fichier qui contiennene ces fonctions une fois pour toutes, et que les autres fichiers puissent faire appel à ces fonctions.

    J'ai essayé:
    - de créer un fichier "perso.xls" dans le dossier XLSTART, mais je n'ai pas pu, car je ne suis pas "administrateur" sur mon ordinateur.
    - les macros complémentaires:
    * J'ai enregistré un fichier "FonctionsVBA.xlam" dans le dossier proposé par par défaut (le dossier des macros complémentaires), cette étape marche (pas de bug ou autre).
    * Deuxième étape: dans l'onglet développeur d'un autre fichier excel, j'ai cliqué sur "Compléments", j'ai coché "FonctionsVBA.xlsa", puis j'ai enregistré le fichier (nommé "Test.xlsm"). J'ai alors essayé d'utiliser dans une macro quelquonque des fonctions contenue dans "FonctionsVBA.xlsa", ça n'a pas marché (débogage: la fonction n'est pas reconnue). J'ai fermé et rouvert le fichier, ça n'a rien changé.
    * J'ai rajouté en première ligne du fichier Test.xlsm (celui dans lequel j'essaye de faire appel aux fonctions de FonctionsVBA.xlsa):
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Application.AddIns.Add("H:\prenom\Macros\ComplémentsVBA.xlam").Installed = True
    (j'ai dabord mis cette instriction hors des balises Sub/End Sub, puis dans la macro elle même)
    ça n'a pas résolu le problème...

    Donc je suis à cours d'idées, et suis preneuse de vos suggestions.

    Merci d'avance

  2. #2
    Rédacteur
    Avatar de Philippe Tulliez
    Homme Profil pro
    Formateur, développeur et consultant Excel, Access, Word et VBA
    Inscrit en
    Janvier 2010
    Messages
    13 163
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Formateur, développeur et consultant Excel, Access, Word et VBA

    Informations forums :
    Inscription : Janvier 2010
    Messages : 13 163
    Billets dans le blog
    53
    Par défaut
    Bonjour,
    Voici un code qui fonctionne
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    Sub AddInInstall()
     Dim Folder As String, FileName As String
     Folder = "Z:\Administration\Macros Complémentaires\"
     FileName = "ASSISMOD.XLA"
     With Application.AddIns
     .Add Folder & FileName   ' Charge l'AddIn
     .Item("Assistant Modèle avec suivi des données").Installed = True ' Active l'Addin
     End With
    End Sub
    Attention dans cet exemple, l'interception des erreurs n'est pas gérée
    Philippe Tulliez
    Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément. (Nicolas Boileau)
    Lorsque vous avez la réponse à votre question, n'oubliez pas de cliquer sur et si celle-ci est pertinente pensez à voter
    Mes tutoriels : Utilisation de l'assistant « Insertion de fonction », Les filtres avancés ou élaborés dans Excel
    Mon dernier billet : Utilisation de la fonction Dir en VBA pour vérifier l'existence d'un fichier

  3. #3
    Membre confirmé
    Inscrit en
    Mai 2009
    Messages
    57
    Détails du profil
    Informations forums :
    Inscription : Mai 2009
    Messages : 57
    Par défaut
    Merci Corona,
    j'ai essayé ton code (en remplaçant le chemin et le fichier) mais pour la ligne
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
     .Item("Assistant Modèle avec suivi des données").Installed = True
    le débogage bug, l'erreur est "Erreur d'execution 9. L'indice n'appartient pas à la sélection"


    (si je met cette ligne en commentaire, la macro AddInstall marche, mais la fonction du fichier xlam que j'utilise dans une autre macro du fichier Test.xlsm n'est toujours pas reconnue)

  4. #4
    Rédacteur
    Avatar de Philippe Tulliez
    Homme Profil pro
    Formateur, développeur et consultant Excel, Access, Word et VBA
    Inscrit en
    Janvier 2010
    Messages
    13 163
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Formateur, développeur et consultant Excel, Access, Word et VBA

    Informations forums :
    Inscription : Janvier 2010
    Messages : 13 163
    Billets dans le blog
    53
    Par défaut
    Bonjour,
    Je viens d'ajouter un comentaire dans le post précédant.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    .Item("Assistant Modèle avec suivi des données").Installed = True
    "Assistant Modèle avec suivi des données" C'est le texte qui accompagne l'AddIn ASSMOD.Xla
    Lorsque tu fais Outils/Macros Complémentaires..., tu obtiens une boîte de dialogue qui t'affiche les macros complémentaires chargées
    Par exemple :
    Outils pour l'Euro
    Utilitaire d'Analyse
    Etc ...
    A gauche, il faut cocher l'option pour activer la macro
    C'est le code Application.addins.Item("leNom").installed
    L'index doit être le nom avec orthographe exacte de ta macro complémentaire.
    Philippe Tulliez
    Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément. (Nicolas Boileau)
    Lorsque vous avez la réponse à votre question, n'oubliez pas de cliquer sur et si celle-ci est pertinente pensez à voter
    Mes tutoriels : Utilisation de l'assistant « Insertion de fonction », Les filtres avancés ou élaborés dans Excel
    Mon dernier billet : Utilisation de la fonction Dir en VBA pour vérifier l'existence d'un fichier

  5. #5
    Membre confirmé
    Inscrit en
    Mai 2009
    Messages
    57
    Détails du profil
    Informations forums :
    Inscription : Mai 2009
    Messages : 57
    Par défaut
    Merci pour ces précisions.
    Malheureusement, je ne suis pas sure d'avoir compris, car j'ai excel 2010 et je ne sais pas si c'est pareil...

    A gauche, il faut cocher l'option pour activer la macro
    En fait à la place de outil>macros complémentaires, je dois aller dans l'onglet développeur, puis cliquer sur le bouton "Compléments" (à côté il y a un bouton "Compléments COM" mais ça n'a pas l'air d'être le bon). Une fois que je clique sur ce bouton, j'ai bien une boîte de dialogue (de titre "Macros complémentaires"): il y a écrit "Macro complémentaires disponibles:" puis:
    - la liste avec des cases pour cocher (il y en a 6, "Analysis ToolPak", ...., "Outils pour l'euro") dans cette liste il y en a 2 de cochées: "Fonctionsvba" (c'est bien le nom de mon fichier complémentaire) et aussi "IAS.ADsDataStore.1" (je sais pas ce que c'est).
    - A droite il y a 4 boutons qui sont: "OK", "Annuler", "Parcourir...", et "Automatisation..."
    - En bas il y a une petite place pour les commentaires (par ex quand on met "Outils pour l'euro" en surbrillance, il y a marqué dans ce cadre: "Conversion et mise en forme pour l'euro"

    Donc une fois Fonctionvba cochée, je clique sur "OK". Par contre, j'avoue que je ne vois pas à quelle option tu fais allusion dans cette boîte dialogue.


    L'index doit être le nom avec orthographe exacte de ta macro complémentaire.
    Dans le fichier "Fonctionsvba.xlam" je n'ai pas de macro, mais que des fonctions (mais il y en a de nombreuses).

    En mettant le nom du fichier sans l'extension sinon, le code se compile mais les fonctions ne sont toujours pas reconnues par la suite.

    Pour clarifier, voici la fonction (un peu bidon, mais c'est pour le test) contenue dans "Fonctionsvba.xlam":
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    Option Explicit
     
    Public Function suivant(numero As Integer) As Integer
    suivant = numero + 1
    End Function
    Ensuite dans le fichier test.xlsm, le code est:
    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
    Sub AddInInstall()
     Dim Folder As String, FileName As String
     Folder = "C:\Users\nom\AppData\Roaming\Microsoft\AddIns\"
     FileName = "FonctionsVBA.xlam"
     With Application.AddIns
     .Add Folder & FileName
     .Item("FonctionsVBA").Installed = True
     End With
    End Sub
    'nb: Ce code se compile
     
     
    Sub test()
    Range("A1").Value = suivant(5)
    End Sub
    'erreur de compilation pour suivant(): Sub ou fonction non définie

    en compilant ces deux macro l'une après l'autre, la fonction n'est donc toujours pas reconnue, mais je pas suis d'avoir compris l'explication.

  6. #6
    Rédacteur
    Avatar de Philippe Tulliez
    Homme Profil pro
    Formateur, développeur et consultant Excel, Access, Word et VBA
    Inscrit en
    Janvier 2010
    Messages
    13 163
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Formateur, développeur et consultant Excel, Access, Word et VBA

    Informations forums :
    Inscription : Janvier 2010
    Messages : 13 163
    Billets dans le blog
    53
    Par défaut
    Bonjour,
    Je viens de tester avec Office2010
    J'ai écrit dans un module d'un classeur, cette fonction.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    Function SommeDeuxCellules(cel1, cel2)
      SommeDeuxCellules = cel1 + cel2
    End Function
    Ce classeur je l'ai sauvé sous le nom mesFonctions.XLAM et placer dans le répertoire Z:\Administration\Macros Complémentaires\
    Ensuite, j'ai fais tourner ce programme
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    Sub AddInInstall()
     Dim Folder As String, FileName As String
     Folder = "Z:\Administration\Macros Complémentaires\"
     FileName = "mesFonctions.XLAM"
     With Application.AddIns
     .Add Folder & FileName
     .Item("mesFonctions").Installed = True
     End With
    End Sub
    La macro complémentaire mesFonctions est bien répertoriée et activée dans la liste des macros complémentaires
    Quand je fais la liste de mes fonctions personnalisées, je vois bien ma fonction SommeDeuxCellules apparaître et je peux l'utiliser.
    J'espère que maintenant c'est plus clair.
    Philippe Tulliez
    Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément. (Nicolas Boileau)
    Lorsque vous avez la réponse à votre question, n'oubliez pas de cliquer sur et si celle-ci est pertinente pensez à voter
    Mes tutoriels : Utilisation de l'assistant « Insertion de fonction », Les filtres avancés ou élaborés dans Excel
    Mon dernier billet : Utilisation de la fonction Dir en VBA pour vérifier l'existence d'un fichier

Discussions similaires

  1. [Toutes versions] Portée des fonctions : comment créer une fonction commune à tous les classeurs ?
    Par akr54 dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 09/02/2010, 11h29
  2. [XL-2003] macro dans tous les classeur comment les enlever
    Par Patnel dans le forum Macros et VBA Excel
    Réponses: 3
    Dernier message: 21/04/2009, 08h01
  3. fichier commun à tous les systèmes Linux
    Par Shugo78 dans le forum Administration système
    Réponses: 11
    Dernier message: 13/06/2007, 21h51
  4. Wallpaper Fond d'ecran commun à tous les utilisateurs
    Par krey26 dans le forum Windows XP
    Réponses: 2
    Dernier message: 17/05/2007, 19h56
  5. Constante commune à tous les modules du projet
    Par Mors_Ubyte dans le forum Access
    Réponses: 1
    Dernier message: 19/07/2006, 14h48

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