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à