Accéder à un module vb de n'importe quel fichier excel

Résolu
Hermios Messages postés 264 Date d'inscription dimanche 14 avril 2013 Statut Membre Dernière intervention 23 mai 2014 - 4 mai 2012 à 10:38
Hermios Messages postés 264 Date d'inscription dimanche 14 avril 2013 Statut Membre Dernière intervention 23 mai 2014 - 10 mai 2012 à 17:55
Salut à tous,
Je travaille sous Excel 2007
J'ai créé un module toto.bas
J'aimerai pouvoir appeler ce module de n'importe quelle feuille excel sur mon ordinateur.
J'avais vu qu'en mettant un fichier Personal.xls dans XLStart, ca marchait.
Comme j'ai Excel 2007, j'ai créé un fichier Personal.xlsm, ca marche, mais dès que j'ouvre une feuille excel, le fichier Personal.xlsm s'ouvre, ce que je ne veux pas.
Je voudrai simplement pouvoir charger le module dès que J'ouvre Excel.
De plus, ce module fait appel à la librairie Microsoft scripting runtime. Donc il faudrait qu'en chargeant le module, il charge aussi cette librairie.

Comment puis je faire?

Merci beaucoup


@+. Hermios
A voir également:

14 réponses

Utilisateur anonyme
10 mai 2012 à 03:21
Bonjour,

Va falloir l'huile de bras. (À moins que tu ne trouves un installateur qui peut créer des programmes d'installation de macro-commandes)

L'utilisateur mets la macro complémentaire dans un dossier quelconque et clique deux fois sur l'icône. Si les paramètres de sécurité de l'utilisateur le permettent, l'installation va se faire toute seule.
3
cs_Le Pivert Messages postés 7903 Date d'inscription jeudi 13 septembre 2007 Statut Contributeur Dernière intervention 11 mars 2024 137
10 mai 2012 à 11:54
Je pense que tu ne connais pas l'utilisation des macros complémentaires. Renseigne toi et reviens nous voir!


Le Pivert
3
Utilisateur anonyme
4 mai 2012 à 17:40
Bonjour,

Application.run dans l'aide de VBA
0
Hermios Messages postés 264 Date d'inscription dimanche 14 avril 2013 Statut Membre Dernière intervention 23 mai 2014 2
8 mai 2012 à 10:28
Salut cmarcotte,
Merci pour ta réponse (quelque peu laconique ;) )
J'ai fait un peu de recherches là dessus, mais de ce que j'ai compris, ca permet de charger dans une feuille excel un module d'une autre feuille excel. Pour cela, il faut que l'autre feuille Excel soit ouverte, il me semble. Or je veux justement éviter d'ouvrir une autre feuille excel. Juste, le module est disponible pour toutes les feuilles excel sur l'ordinateur. Est ce possible?
Merci beaucoup de ton aide.


@+. Hermios
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
Utilisateur anonyme
8 mai 2012 à 22:25
Bonjour,

Merci pour ta réponse (quelque peu laconique ;) )

Plus de détails ici.

J'ai fait un peu de recherches là dessus, mais de ce que j'ai compris, ca permet de charger dans une feuille excel un module d'une autre feuille excel.

Application.run permet de lancer un autre programme à partir du programme VBA en cours. Si tu marques comme programme "toto.xls", Windows va se charger de faire ouvrir toto.xls par Excel.

Sinon tu te fais une macro complémentaire Excel et tu gardes Excel ouvert. Aucune macro Excel ne peut fonctionner si Excel n'est pas ouvert.
0
Hermios Messages postés 264 Date d'inscription dimanche 14 avril 2013 Statut Membre Dernière intervention 23 mai 2014 2
9 mai 2012 à 11:26
Bonjour cmarcotte,
Merci pour ta réponse, mais ce n'est pas ce que je cherche (ou alors j'ai pas compris!)
Je veux, pour n'importe quelle feuille excel que j'ouvre, pouvoir accéder immédiatement à ma Macros, via l'onglet "développeur">Macros.
Le but est, pour n'importe quel utilisateur, qu'il puisse immédiatement accéder à cette macro pour formater sa feuille excel en cours. La feuille excel a été générée automatiquement par l'utilisateur, il n'est pas censé connaitre le VBA pour appeler la macro.
Concrètement :
Je suis un utilisateur Lambda
1- Je génère ma feuille excel (quelconque, sans MACRO qui lui soit propre)
2- J'ouvre cette feuille excel
3- Je vais dans l'onglet développeur
4- Je clique sur le bouton MACRO
5- Je sélectionne la macro qui m'interesse, et l'exécute.

Dans ton cas, entre les étapes 2 et 3, je dois ouvrir l'éditeur VBA, ou l'éditeur de MACRO, taper la commande "Application.Run" etc., ai je bien compris?
Si oui, je veux justement éviter cette étape.

Merci beaucoup


@+. Hermios
0
Utilisateur anonyme
9 mai 2012 à 17:42
Bonjour,

Si tu veux absolument qu'un classeur sans aucune macro utilise automatiquement une autre macro d'un autre classeur sans ouvrir le classeur qui contient la macro; c'est impossible directement d'Excel.

1) Tu peux te faire un exécutable externe avec VB pur et dur qui va créer ton nouveau classeur et lancer ta macro.

ou

2) Tu fais une macro complémentaire que tu ajoutes aux Excels de tous les utilisateurs pour faire le même travail. Ou bien tu t'arranges avec ton service de Dictature Informatique pour imposer à tes utilisateurs d'utiliser Excel avec la macro complémentaire sur un serveur.
0
Hermios Messages postés 264 Date d'inscription dimanche 14 avril 2013 Statut Membre Dernière intervention 23 mai 2014 2
9 mai 2012 à 17:47
Re
Oui, c'est ca, le numéro 2 (mais sans la dictature... pas politiquement correct :D)
Précisément, comment je peux automatiquement ajouter cette macro à tous les Excels de l'ordi?

Merci


@+. Hermios
0
cs_Le Pivert Messages postés 7903 Date d'inscription jeudi 13 septembre 2007 Statut Contributeur Dernière intervention 11 mars 2024 137
10 mai 2012 à 10:20
Bonjour,
Je crois avoir trouvé une solution:
Créer un bouton dans une macro complémentaire qui ouvrira une UserForm. Il suffira de cliquer sur un bouton pour que ta macro soit copiée dans ton classeur ouvert. Voici les codes:

Dans ThisWorkBook:
Private Sub Workbook_Open()
CreeMonBouton
End Sub


Dans l'UserForm avec un bouton:

Private Sub CommandButton1_Click()
Exportermodule
End Sub



Dans un module nommé Module2(tu peux changer). Il faut que ton module à copier soit Module1

Option Explicit
Dim chemin As String
Sub RecopieModule()
  Dim NewM As Object, NewCode As String
  ' Stockage du code du module "Module1" du classeur maitre
    With ThisWorkbook.VBProject.VBComponents("Module1").CodeModule
      NewCode = .Lines(1, .CountOfLines)
    End With
  ' Ajout d'un module au CLASSEUR ACTIF
  Set NewM = ActiveWorkbook.VBProject.VBComponents.Add(1)
    With ActiveWorkbook.VBProject.VBComponents(NewM.Name).CodeModule
    ' Le DeleteLines sert à éviter éviter d'avoir 2 fois Option Explicit
    ' si la déclaration explicite est cochée dans les préférences
    'sans effet si l'option n'est pas cochée
      .DeleteLines 1, .CountOfLines
      .AddFromString NewCode
    End With
 End Sub
Sub Exportermodule()
NbFich
Workbooks.Open Filename:=chemin
       RecopieModule
End Sub
Sub NbFich()
Dim Workb As Workbook
  For Each Workb In Workbooks
  chemin = Workb.FullName
  Next Workb
End Sub
Sub CreeMonBouton()
Dim bar
  Set bar = Application.CommandBars("Standard")
  With bar.Controls.Add(msoControlButton, , , , True)
    .Caption = "Module"
    .FaceId = 351
    .Tag = 1
     '.Style = msoButtonCaption
    .OnAction = "L_Start"
  End With
  End Sub
Sub L_Start()
UserForm1.Show
 End Sub


C'est tout. Tu enregistres en Macro complémentaire? ensuite tu coches cette macro et tu fermes.
@+Le Pivert
0
Hermios Messages postés 264 Date d'inscription dimanche 14 avril 2013 Statut Membre Dernière intervention 23 mai 2014 2
10 mai 2012 à 11:14
Salut à tous les deux
Merci de vos réponses.
Le pivert, malheureusement, cela impose à mon utilisateur de lancer une macro avec form, ce que je ne veux pas.
cmarmotte, malheureusement, les paramètes de sécurité sont très restrictifs, donc... ca va pas marcher!
Mais je valide quand même, j'imagine que ca correspondait à ce que je cherche!
Merci encore


@+. Hermios
0
cs_Le Pivert Messages postés 7903 Date d'inscription jeudi 13 septembre 2007 Statut Contributeur Dernière intervention 11 mars 2024 137
10 mai 2012 à 11:45
Je pense que tu as répondu un peu vite et tu n'as pas étudié mon code. Car il suffit de changer une ligne pour te défaire de l'UserForm

Sub L_Start()
Exportermodule
 End Sub


Je ne sais pas si sous Excel 2007 l'on peut créer des boutons dans le MenuBar. Sinon on peut passer par un menu contextuel.

Petite remarque cette macro permet de chercher le chemin du classeur que tu viens d'ouvrir. Donc il n'y a pas de possibilité d'ouvrir plusieurs classeurs en même temps et cliquer sur le bouton du MenuBar!

Sub NbFich()
Dim Workb As Workbook
  For Each Workb In Workbooks
  chemin = Workb.FullName
  Next Workb
End Sub

Le Pivert
0
Hermios Messages postés 264 Date d'inscription dimanche 14 avril 2013 Statut Membre Dernière intervention 23 mai 2014 2
10 mai 2012 à 11:50
Yop,
Je te concède que j'ai pas lu ton code, mais le problème reste entier :) :
Pour effectuer cela, l'utilisateur devra, pour chaque feuille excel, écrire ce code, puis le lancer.
Mon but n'est pas d'écrire du code pour lancer du code, mais de manipuler le code existant pour pouvoir y accéder facilement de n'importe quelle feuille excelle, sans opération préalable, à chaque fois que j'ai une nouvelle feuille excel.


@+. Hermios
0
Hermios Messages postés 264 Date d'inscription dimanche 14 avril 2013 Statut Membre Dernière intervention 23 mai 2014 2
10 mai 2012 à 13:00
Ah, ok, ca expliquerai des trucs :)
Bon, je vais voir ca!
Merci de ton aide en tout cas :D


@+. Hermios
0
Hermios Messages postés 264 Date d'inscription dimanche 14 avril 2013 Statut Membre Dernière intervention 23 mai 2014 2
10 mai 2012 à 17:55
Mes plus plates excuses, à tous les deux... Ce que je voulais, c'était ca : Les macros complémentaires (tout simplement!)
J'ai à chaque fois zappé le concept de "complémentaire" dans vos phrases, en pensant simplement que c'était des macros standards. Donc voilà, j'avais la réponse depuis le début!
Merci beaucoup de votre aide! Et encore dsl pour la perte de temps!

@+. Hermios
0
Rejoignez-nous