macro qui modifie une macro

  • Initiateur de la discussion Initiateur de la discussion dvigneault
  • Date de début Date de début

Boostez vos compétences Excel avec notre communauté !

Rejoignez Excel Downloads, le rendez-vous des passionnés où l'entraide fait la force. Apprenez, échangez, progressez – et tout ça gratuitement ! 👉 Inscrivez-vous maintenant !

D

dvigneault

Guest
Bonjour à tous,

Il y quelques temps j'ai créé une macro dans un fichier excel et ce fichier à été dupliqué à plusieurs reprises (± 5000 fois). Aujourd'hui, il faudrait que je modifie cette macro.

Donc, je cherche un moyen de faire une macro qui pourrait modifier cette dernière en vba.

Merci d'avance pour l'aide.
 
Re : macro qui modifie une macro

Bonsoir Dvigneauld,
oui ça peux ce faire, moi je mets à jour mes application comme cela, j'ai une organisation en modules qui me permet de supprimer le module puis d'importer le nouveau, je ne sais pas si c'est cela que tu recherches . selon l'antivirus que tu as sur le poste , il peut t'empêche de le faire, a oui il faut aussi dans les param sécurité faire confiance au projet visual basic sinon tu n'y arriveras jamais
 
Re : macro qui modifie une macro

Bonsoir à tous
Supposons que la feuille Feuil1 porte ce code
Code:
[COLOR="DarkSlateGray"][B]Option Explicit

Sub toto0()
   [COLOR="SeaGreen"]'Ici, une procédure _
   plus ou moins longue[/COLOR]
End Sub

Sub toto1()
   [COLOR="SeaGreen"]'Ici, une procédure _
   plus ou moins longue[/COLOR]
End Sub

Sub toto()
Dim x
   [COLOR="SeaGreen"]'Ici, une autre procédure _
   plus ou moins longue
'[/COLOR]
End Sub

Sub toto2()
   [COLOR="SeaGreen"]'Ici, une procédure _
   plus ou moins longue[/COLOR]
End Sub[/B][/COLOR]
et qu'on veuille remplacer la procédure toto par celle-ci :
Code:
[COLOR="DarkSlateGray"][B]Sub tata()
   [COLOR="SeaGreen"]'Ici, une nouvelle procédure _
   plus ou moins longue[/COLOR]
End Sub[/B][/COLOR]

Alors, l'exécution du code
Code:
[COLOR="DarkSlateGray"][B]Sub remplace_la_procédure()
Dim i&, l&
      With ThisWorkbook.VBProject.VBComponents(Sheets("Feuil1").CodeName).CodeModule
         For i = 1 To .CountOfLines
            If .Lines(i, 1) = "Sub toto()" Then l = i: Exit For
         Next i
         If l Then
            For i = l To .CountOfLines
               If .Lines(i, 1) = "End Sub" Then Exit For
            Next i
            .DeleteLines l, i - l + 1
            .InsertLines l, "Sub tata()" & vbLf _
            & "   " & Chr(39) & "Ici, une nouvelle procédure _ " & vbLf _
            & "   plus ou moins longue" & vbLf _
            & "End Sub"
         End If
      End With
End Sub[/B][/COLOR]
placé dans un module quelconque du même classeur fera le boulot.​
ROGER2327
#3638


Mercredi 18 Merdre 137 (Saint Anal, cordelier et Sainte Foire, anagogue, SQ)
16 Prairial An CCXVIII
2010-W22-5T21:11:40Z
 
Re : macro qui modifie une macro

Bonjour Roger et le Fil,

Oui , cela fonctionne très bien également, c'est effectivement aussi une solution, il faudra peut -être que l'intéressé nous dise si ce sont des modules , ou juste un bout de code qu'il faut remplacer.
Ma remarque pour l'antivirus et le réglage sécurité Excel reste néanmoins valide.
 
Re : macro qui modifie une macro

Re...
Bonjour Roger et le Fil,

Oui , cela fonctionne très bien également, c'est effectivement aussi une solution, il faudra peut -être que l'intéressé nous dise si ce sont des modules , ou juste un bout de code qu'il faut remplacer.
Ma remarque pour l'antivirus et le réglage sécurité Excel reste néanmoins valide.
Parfaitement d'accord sur la pertinence de vos remarques sur l'antivirus et le paramétrage de sécurité.
Quant à ma vision du problème, elle est suggérée par
(...) il faudrait que je modifie cette macro (...)
mais comme le dit votre devise
Poser clairement le problème, c'est déjà le début d'une solution.
Attendons donc les précisions que notre ami ne manquera pas d'apporter...
ROGER2327
#3641


Jeudi 19 Merdre 137 (Sainte Fétatoire, super, SQ)
17 Prairial An CCXVIII
2010-W22-6T08:18:57Z
 
Re : macro qui modifie une macro

Merci pour les réponses.

La solution de remplacer le(s) module(s) concerné est génial puisque peu importe le segment à remplacer, ce sera toujours la même procédure pour modifier ou remplacer le code.

Je vais tester ce code demain et je vous en donne des nouvelles.
 
Re : macro qui modifie une macro

Pardonnez-moi le délai, j'étais occupé à d'autre tâche. J'ai reproduit le code que vous m'aviez fourni et j'ai rencontré un problème. En testant le code par la fonction pas à pas (F8) je reçois le message suivant: L'accès par programme au projet Visual Basic n'est pas fiable.

J'ai vérifié le code pour voir si j'avais des erreurs et je n'ai rien trouver. Que dois-je faire?
 
Re : macro qui modifie une macro

Bonsoir,
dans l'article 2 tu as manqués :
il faut aussi dans les param sécurité faire confiance au projet visual basic
enfin , je précise
donc outil /macro / sécurité / editeurs approuvés
faire confiance au projet visual basic
voilà
 
Re : macro qui modifie une macro

Bonjour,

ATTENTION , Il y A toujours un risque de plantage sévère lorsque l'on utilise ce genre de code,
donc prévoyez l'extincteur, voir le SAMU. ( Sauvegarder votre fichier avant d'exécuter ce code )

Alors le chr permet d'obtenir un caractère selon son code Ascii, bon inutile de les connaitre par cœur les tables, mais au moins quelques uns d'entre eux servent couramment .
voici ceux qui me restent dans la tête :
De 65 à (+ 26 lettres)90 ce sont les lettres A à Z en majuscule, de 97 à (+26 lettres) 122 a à z minuscule, le 64 pour @, de 48 à (10 chiffres)57 les chiffres le 1 étant le zéro,
le 32 l'espace , le 9 = Tabulation, le 10 fin de ligne, le 13 retour chariot ( et oui, des reste de la machine à écrire) et enfin le 34 = ", le 39 à '

Si tu veux avoir une table plus complète , prends ton moteur de recherche favori et tape Table Ascii.

A oui le & permet d'assembler 2 chaines de caractères entre elles ( Le + est aussi accepté , mais par exemple : msgbox "Résultat : " & 50 + 20 & " Euros" ne sera vable que écrit comme cela , si tu essayes msgbox "Résultat : " + 50 + 20 + " Euros " , ben là t'as droit à une erreur de concordance type)

bon tout cela pour te dire que l'on y met un apostrophe pour que le texte aprés soit un commentaire. (voir dans exemple suivant devant Nécessite il y a un ' , donc c'est une ligne très importante puisse qu'elle permet de laisser des informations qui peuvent être primordiales, mais pour l'interpréteur cette ligne sera tout simplement ignorée)

Bon , une autre petite procédure pour remplacer un mot par un autre dans le code, (la c'est de la correction au scalpel)

Sub RemplacementMotDansProcedure()
'Nécessite d'activer la référence [Visual basic For Application Extensibility 5.3]
'
'Déclaration objects et variables
Dim Ancien As String, Nouveau As String, Cible As String
Dim VbComp As VBComponent
Dim i As Integer
Dim Wb As Workbook
'Crée un objet Wb reprenant l'ensemble du classeur "NomClasseur"
Set Wb = Workbooks("NomClasseur.xls")
'Ancien terme à remplacer
Ancien = "Feuil1"
'Nouveau terme qui remplacera
Nouveau = "Feuil3"
'Balayage des modules vba
For Each VbComp In Wb.VBProject.VBComponents
' scan des ligne d'un module
For i = 1 To VbComp.CodeModule.CountOfLines
' pour la démo , en détail pourrait être écrit plus "court"
'Mise en variable de l'ancienne ligne courante
Cible = VbComp.CodeModule.Lines(i, 1)
'Remplacement du terme
Cible = Replace(Cible, Ancien, Nouveau)
'Remplace par la nouvelle ligne dans le module
VbComp.CodeModule.ReplaceLine i, Cible
Next i
Next VbComp
End Sub

et voilà
 
Dernière édition:
Re : macro qui modifie une macro

J'ai réussi à faire fonctionner la procédure. J'ai remplacer le terme Thisworkbook par Activeworkbook puisque le code à remplacer est dans chacun des ±5000 fichier. Donc, pour trouver mes fichiers à corriger, j'ai écris une procédure avec File Search. Il répertorie les dits fichiers puis il lance une macro qui fais des correctifs dans le ficher même et il lance une autre macro (celle que vous m'avez montré) qui remplace la macro existante par la nouvelle. Il me reste à tester le tout lundi et je met en action mon programme.

Si tout va bien, je pourrai essayé votre autre code car il m'intéresse beaucoup lui aussi.

Je vous en redonne des nouvelles plus tard.
 
- Navigue sans publicité
- Accède à Cléa, notre assistante IA experte Excel... et pas que...
- Profite de fonctionnalités exclusives
Ton soutien permet à Excel Downloads de rester 100% gratuit et de continuer à rassembler les passionnés d'Excel.
Je deviens Supporter XLD
Assurez vous de marquer un message comme solution pour une meilleure transparence.

Discussions similaires

  • Question Question
XL 2021 Macro
Réponses
6
Affichages
309
Retour