macro pour changer une autre macro en vba

daiman

XLDnaute Nouveau
bonjour,:D
j'ai créé une macro qui va chercher une feuille xls sur un serveur et la copie dans ma feuille xls active. sa fonctionne très bien, sauf que des fois l'adresse du serveur change, sa n'arrive pas souvent mais sa arrive. quand c'est moi qui suis là je remet à jour la nouvelle adresse du serveur mais mes collègues ne savent pas comment faire.
je voudrais créé une macro qui va changer, quand je la solicite via un bouton par exemple, l'adresse du serveur dans la macro d'origine.

voilà un morçeau de mon code:
Workbooks.Open Filename:="\\Mrf67-tw\Externe_MF67\Resultat\" & gmao & ".slk"

j'aimerais que la macro, via un userform, change uniquement "\\Mrf67-tw\Externe_MF67\Resultat\".
merci d'avance
 

bqtr

XLDnaute Accro
Re : macro pour changer une autre macro en vba

Bonsoir daiman, le forum

Voici un exemple :

Sur la feuille 1 en A2 tu as ton adresse actuelle.
Click sur GO, un Userform s'ouvre avec 2 textbox. Le 1er rempli avec ton adresse en A2 et le deuxième où tu entres la nouvelle adresse. (attention l'adresse avec les " au début et à la fin)

Click sur le bouton Modifier, la nouvelle adresse remplacera l'ancienne dans la macro du module 1 "Ma_Macro", et se placera en A2.

Pour que cela fonctionne il faut activer la référence suivante :
"Microsoft Visual Basic For Application Extensibility 5.3" dans le menu VBA Outils/Références.

Ensuite tu adaptes cette ligne en remplaçant le nom du Module si nécessaire. (par le n° du Module où ce trouve ta macro, où par le nom du Module si tu l'as modifé)
Code:
Set VBComp = ActiveWorkbook.VBProject.VBComponents("[SIZE=3][COLOR=Blue]Module1[/COLOR][/SIZE]")


A+
 

Pièces jointes

  • Modif Macro.zip
    14.5 KB · Affichages: 584
  • Modif Macro.zip
    14.5 KB · Affichages: 534
  • Modif Macro.zip
    14.5 KB · Affichages: 562

daiman

XLDnaute Nouveau
Re : macro pour changer une autre macro en vba

merci.
on m'a aidé à trouvé une solution. je remplace l'adresse du serveur par une variable que je rend public. ensuite j'ai crée une macro qui change cette variable par ma nouvelle adresse. j'execute cette macro via un bouton sur ma feuille active.
mais ta solution m'intrigue je vais la tester. merci
 

daiman

XLDnaute Nouveau
Re : macro pour changer une autre macro en vba

ah! j'ai du mal.
je ne trouve pas le fameux "Click sur GO" pour active un userform????

ou dois-je ecrire ce code:
Set VBComp = ActiveWorkbook.VBProject.VBComponents("Module1")

merci de ton aide:rolleyes:
 

bqtr

XLDnaute Accro
Re : macro pour changer une autre macro en vba

Bonsoir,

Le bouton GO se trouve sur la feuille 1 du fichier.
La ligne de code à adapter et non pas à créer se trouve dans le code du bouton "Modifier" sur l'userform. (ouvre VBA, affiche l'userform et double click sur le bouton "Modifier", tu auras le code)

Dans l'exemple du fichier, la macro qui est à modifier se nomme Ma_Macro et se trouve dans le Module1. Dans ton fichier la macro qui contient l'adresse du serveur à changer se trouve elle aussi dans un module. C'est le nom de ce module qui doit être inscrit dans la ligne de code à la place de Module1. (Si nécessaire bien sur) Ca peut-être Module2 ou 3 ou 4 .../... ou bien le nom que tu as donné à ce module si tu l'a modifié.

N'oublie pas d'activer la référence citée dans mon précédant message.



A+
 

daiman

XLDnaute Nouveau
Re : macro pour changer une autre macro en vba

bonjour bqtr,
j'ai adapté ton programme sur mon fichier et sa fonctionne très bien.
malheureusement je n'arrive pas à comprendre ton code. si tu veu bien et quand tu auras:) le temps pourrais tu mettre un commentaire à côté de tes lignes de codes. merci d'avance
 

bqtr

XLDnaute Accro
Re : macro pour changer une autre macro en vba

Bonjour,

Quand tu as ouvert VBA, dans la fenêtre de Projet- VBAProject ( CTRL+R) en haut à gauche, tu as ton projet VBA (VBAProject(NomDeTonFichier)).

Il se compose de composants :D : Les Feuilles, Le Thisworkbook, Les Userforms si il y en a et les Modules de code standard ou de classe (qui comprennent les macros).

Tous ces composants (collection) sont renvoyés par la proprièté VBComponents.

Dans ton cas, tu dois modifier une macro qui se trouve dans un module de code standard. Il faut donc définir ce module (ou composant).

On déclare la variable VBComp comme composant:
Dim VBComp As VBComponent (sans le "s" à la fin de VBComponents, car il s'agit d'un composant particulier et non de la collection des composants)

On définit le composant: ici le Module1
Set VBComp = ActiveWorkbook.VBProject.VBComponents("Module1")

Ensuite avec ce composant (Module1) on boucle sur toutes les lignes de code qu'il contient.
With VBComp
For i = 1 To .CodeModule.CountOfLines

La variable "Recherche" prend la valeur de la ligne listée.
Recherche = .CodeModule.Lines(i, 1)

On remplace dans cette ligne les anciennes valeurs par les nouvelles si nécessaire , et la valeur de "Recherche" change ou pas suivant le cas.
Recherche = Replace(Recherche, Anciene_Adresse, Nouvelle_Adresse)

Ici on remplace physiquement la ligne de code dans la macro par la nouvelle en fonction de la valeur de "Recherche"
.CodeModule.ReplaceLine i, Recherche

Fin de la boucle
Next
End With

Voilà, je pense que le reste du code ne doit pas te poser de problème.

Bonne soirée









 

daiman

XLDnaute Nouveau
Re : macro pour changer une autre macro en vba

ah!!! je me torturais l'espris car je comprenais pas comment tu arrivais à chager juste la ligne va bien. mais avec ton exmplixation j'ai compris. enfin je pense. tout ce joue avec cette ligne:Recherche = Replace(Recherche, Anciene_Adresse, Nouvelle_Adresse)
donc, on va listé toute les lignes et lorsque la valeur de "recherche" est égale à "ancienne_adresse" on la remplace par "nouvelle_adresse". tu es tout à fait géniale.

ps: rectifi moi si je me trompe dans la compréhension. merci pour tout:confused:
 

bqtr

XLDnaute Accro
Re : macro pour changer une autre macro en vba

Re,

C'est presque ça :

La macro liste bien toutes les linges de code du Module1.
La variable Recherche va prendre successivement 2 valeurs:
Chaque ligne de code du Module1 va être ré-écrite

Valeur 1 : La ligne(i) de code
Valeur 2 : On applique un traitement à la variable Recherche. On utilise la fonction Replace. Cette fonction permet de remplacer une partie d'une chaine de caractères par une autre. Elle a 3 arguments dans le cas présent.

Argument 1 : la chaine de caractères à traiter, ici la valeur de Recherche.
Argument 2 : la valeur à remplacer, ici la variable Anciene_Adresse
Argument 3 : la valeur de remplacement, ici la variable Nouvelle_Adresse

Si l'argument 2 est présent dans la variable Recherche le remplacement se fait. Sinon la variable Recherche prend comme valeur sa valeur d'origine.

Donc dans notre cas, la variable Recherche n'est jamais égale à la variable Ancien_Adresse, cette dernière est au mieux une sous_chaine de la variable Recherche.

Enfin la ligne(i) est ré-écrite avec la dernière instruction.

C'est pas toujours évident d'expliquer le déroulement d'une macro, donc modifie la comme ceci, je pense que tu comprendras plus facilement le principe.

Code:
Set VBComp = ActiveWorkbook.VBProject.VBComponents("Module1")
With VBComp
   For i = 1 To .CodeModule.CountOfLines
      Recherche = .CodeModule.Lines(i, 1)
      MsgBox "Valeur à modifier ligne " & i & " : " & Recherche
      Recherche = Replace(Recherche, Anciene_Adresse, Nouvelle_Adresse)
      MsgBox "Valeur après la modif ligne " & i & " : " & Recherche
      .CodeModule.ReplaceLine i, Recherche
   Next
End With

Bonne journée
 

sebkil28

XLDnaute Nouveau
Re : macro pour changer une autre macro en vba

Bonjour à tous,

Je cherche à remplacer une valeur dans mes macro via une autre macro,

J'ai donc essayer ce code citer plus haut qui correspond exactement à mon besoin.

Lorsque je test sa macro, j'ai une erreur " Erreur d'exec ' 1004 '
L'acces par programme au projet visual basic n'est pas fiable"

J'ai bien activer la référence citée mais rien à faire.

Avez vous une petite idée ?
 

Pierrot93

XLDnaute Barbatruc
Re : macro pour changer une autre macro en vba

Bonjour Sebkil

Si j'ai bien compris, pour moi ce n'est pas un problème de "référence" mais option au niveau de la sécurité. Dans la barre de menu Excel => Outils => Macro => sécurité => onglet "éditeurs approuvés, il faut cocher la case "faire confiance au projet visual basic".

bonne journée
@+
 

skun

XLDnaute Occasionnel
Re : macro pour changer une autre macro en vba

Bonjour à tous !!

J'ai un peu lu ce fils trés intéressent, et ca m'a ammené à me demander si une macro pouvait en effacer une autre, puis s'effacer elle meme?

j'ai donc essayer, mais l'enregistrement de macro n'enregistre pas les modifications dans le VBA...

auriez vous une idée?
(sachant que j'ai protégé l'accés au VBA par un mot de passe)

je vous remercie =)
 

sebkil28

XLDnaute Nouveau
Re : macro pour changer une autre macro en vba

Grand merci pierrot 93 !

C'était bien ce problème de sécurité...

Du coup, comme le fichier que je souhaite utilisé va tourner sur plusieurs post différent, comment activer cette option à l'ouverture du fichier ?
 

Discussions similaires

Réponses
12
Affichages
289

Statistiques des forums

Discussions
312 508
Messages
2 089 136
Membres
104 045
dernier inscrit
Megajoules