Accéder à un module vb de n'importe quel fichier excel [Résolu]

Hermios 265 Messages postés dimanche 14 avril 2013Date d'inscription 23 mai 2014 Dernière intervention - 4 mai 2012 à 10:38 - Dernière réponse : Hermios 265 Messages postés dimanche 14 avril 2013Date d'inscription 23 mai 2014 Dernière intervention
- 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
Afficher la suite 

14 réponses

Répondre au sujet
Utilisateur anonyme - 10 mai 2012 à 03:21
+3
Utile
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.
Cette réponse vous a-t-elle aidé ?  
Commenter la réponse de Utilisateur anonyme
cs_Le Pivert 5067 Messages postés jeudi 13 septembre 2007Date d'inscriptionContributeurStatut 23 avril 2018 Dernière intervention - 10 mai 2012 à 11:54
+3
Utile
Je pense que tu ne connais pas l'utilisation des macros complémentaires. Renseigne toi et reviens nous voir!


Le Pivert
Cette réponse vous a-t-elle aidé ?  
Commenter la réponse de cs_Le Pivert
Utilisateur anonyme - 4 mai 2012 à 17:40
0
Utile
Bonjour,

Application.run dans l'aide de VBA
Commenter la réponse de Utilisateur anonyme
Hermios 265 Messages postés dimanche 14 avril 2013Date d'inscription 23 mai 2014 Dernière intervention - 8 mai 2012 à 10:28
0
Utile
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
Commenter la réponse de Hermios
Utilisateur anonyme - 8 mai 2012 à 22:25
0
Utile
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.
Commenter la réponse de Utilisateur anonyme
Hermios 265 Messages postés dimanche 14 avril 2013Date d'inscription 23 mai 2014 Dernière intervention - 9 mai 2012 à 11:26
0
Utile
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
Commenter la réponse de Hermios
Utilisateur anonyme - 9 mai 2012 à 17:42
0
Utile
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.
Commenter la réponse de Utilisateur anonyme
Hermios 265 Messages postés dimanche 14 avril 2013Date d'inscription 23 mai 2014 Dernière intervention - 9 mai 2012 à 17:47
0
Utile
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
Commenter la réponse de Hermios
cs_Le Pivert 5067 Messages postés jeudi 13 septembre 2007Date d'inscriptionContributeurStatut 23 avril 2018 Dernière intervention - 10 mai 2012 à 10:20
0
Utile
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
Commenter la réponse de cs_Le Pivert
Hermios 265 Messages postés dimanche 14 avril 2013Date d'inscription 23 mai 2014 Dernière intervention - 10 mai 2012 à 11:14
0
Utile
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
Commenter la réponse de Hermios
cs_Le Pivert 5067 Messages postés jeudi 13 septembre 2007Date d'inscriptionContributeurStatut 23 avril 2018 Dernière intervention - 10 mai 2012 à 11:45
0
Utile
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
Commenter la réponse de cs_Le Pivert
Hermios 265 Messages postés dimanche 14 avril 2013Date d'inscription 23 mai 2014 Dernière intervention - 10 mai 2012 à 11:50
0
Utile
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
Commenter la réponse de Hermios
Hermios 265 Messages postés dimanche 14 avril 2013Date d'inscription 23 mai 2014 Dernière intervention - 10 mai 2012 à 13:00
0
Utile
Ah, ok, ca expliquerai des trucs :)
Bon, je vais voir ca!
Merci de ton aide en tout cas :D


@+. Hermios
Commenter la réponse de Hermios
Hermios 265 Messages postés dimanche 14 avril 2013Date d'inscription 23 mai 2014 Dernière intervention - 10 mai 2012 à 17:55
0
Utile
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
Commenter la réponse de Hermios

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.