Ajouter une ligne de code dans une macro
Le
Fredo(67)

Bonjour,
j'ai une macro que j'ai créé pour des collègues.
(cette macro est utilisée pour envoyer automatiquement des mails depuis e=
xcel)
Dans cette macro je souhaite insérer la ligne suivante
msg.SentOnBehalfOfName = "adresse@domaine.fr"
la partie de code considérée passant de
msg.To = ActiveCell.Value
msg.CC = DestinatairesEnCc
à
msg.To = ActiveCell.Value
msg.SentOnBehalfOfName = "adresse@domaine.fr"
msg.CC = DestinatairesEnCc
Je voudrais pouvoir faire cette modification depuis excel, par une macro en=
registrée dans le Personal.xlb
parcequ'en fait elle doit être effectuée sur un grand nombre de fichier=
.
Comment cela pourrait il se faire ?
dans un autre fil de discussion quelqu'un a proposer de supprimer tout le m=
odule contenant la macro à modifier pour réimporter un module contenant=
la macro mise à jour, mais je bloque quasiment à la première ligne p=
ar un code d'erreur
voilà ce que j'ai testé :
Sub MacroQuiTransformeMacro()
Application.VBE.ActiveVBProject.VBComponents.Remove
' Application.VBE.ActiveVBProject.VBComponents.Remove
Application.VBE.ActiveVBProject.VBComponents ("Autrefichier")
Application.VBE.ActiveVBProject.VBComponents.Import "I:ConduiteAA HIR=
TZEnvoi_depuis_contact_tce.bas"
End Sub
j'ai une macro que j'ai créé pour des collègues.
(cette macro est utilisée pour envoyer automatiquement des mails depuis e=
xcel)
Dans cette macro je souhaite insérer la ligne suivante
msg.SentOnBehalfOfName = "adresse@domaine.fr"
la partie de code considérée passant de
msg.To = ActiveCell.Value
msg.CC = DestinatairesEnCc
à
msg.To = ActiveCell.Value
msg.SentOnBehalfOfName = "adresse@domaine.fr"
msg.CC = DestinatairesEnCc
Je voudrais pouvoir faire cette modification depuis excel, par une macro en=
registrée dans le Personal.xlb
parcequ'en fait elle doit être effectuée sur un grand nombre de fichier=
.
Comment cela pourrait il se faire ?
dans un autre fil de discussion quelqu'un a proposer de supprimer tout le m=
odule contenant la macro à modifier pour réimporter un module contenant=
la macro mise à jour, mais je bloque quasiment à la première ligne p=
ar un code d'erreur
voilà ce que j'ai testé :
Sub MacroQuiTransformeMacro()
Application.VBE.ActiveVBProject.VBComponents.Remove
' Application.VBE.ActiveVBProject.VBComponents.Remove
Application.VBE.ActiveVBProject.VBComponents ("Autrefichier")
Application.VBE.ActiveVBProject.VBComponents.Import "I:ConduiteAA HIR=
TZEnvoi_depuis_contact_tce.bas"
End Sub
Quel code d'erreur ? quelle ligne ? Vérifie que dans les paramètres du centre
de gestion de la confidentialité, Paramètres des macros, la case "Accès
approuvé au modèle d'objet du projet VVBA" soit vien cochée.
Daniel
Fredo(67) a formulé la demande :
et je l'ai adapté
========
Sub Remplacer()
'Hervé, mpfe
Dim Classeur As Workbook
Dim Module As Object
Dim Rechercher As String
Dim Remplacer As String
Dim Trouver As Integer
Dim I As Integer
Rechercher = " msg.CC = DestinatairesEnCc"
Remplacer = " msg.SentOnBehalfOfName = """" ms g.CC = DestinatairesEnCc"
For Each Module In Classeur.VBProject.VBComponents
With Module.CodeModule
If Module.Name = "autrefichier" Then
For I = 1 To .CountOfLines
Trouver = InStr(.Lines(I, 1), Rechercher)
If Trouver > 0 Then
'si une occurrence est trouvée, fait la modif et boucle
'sur la ligne afin de remplacer tous les mots
Do
.ReplaceLine I, Left(.Lines(I, 1) _
, Trouver - 1) & Remplacer & _
Mid(.Lines(I, 1), _
Trouver + Len(Rechercher) _
, Len(.Lines(I, 1)))
Trouver = InStr(Trouver + 1, _
.Lines(I, 1), Rechercher)
Loop While Trouver = 0
End If
Next I
End If
End With
Next Module
Set Classeur = Nothing
Set Module = Nothing
End Sub
=============
et là ca bloque sur
For Each Module In Classeur.VBProject.VBComponents
Daniel
Il se trouve que Fredo(67) a formulé :
L'Accès approuvé au modèle d'objet du projet VVBA Est cochée.
La variable "Classeur" n'est pas renseignée.
Daniel
Mais pourtant il y a bien noté : Dim Classeur As Workbook
cela ne suffit t'il pas ?
Tu l'as défini, mais tu ne l'as pas renseigné :
Set Classeur = ActiveWorkbook
par exemple.
Daniel
Le seul soucis c'est qu'à la fin de l'exécution de la macro il m'affich e ce panneau :
ARGUMENT OU APPEL DE PROCEDURE INCORRECT
il ne me propose pas de déboguer (je ne sais donc pas d'où cela provien t.
Merci
voici la copie totale de la macro :
Sub Remplacer()
'Hervé, mpfe
Dim Classeur As Workbook
Dim Module As Object
Dim Rechercher As String
Dim Remplacer As String
Dim Trouver As Integer
Dim I As Integer
Set Classeur = ActiveWorkbook
Rechercher = " msg.CC = DestinatairesEnCc"
Remplacer = "'Ajout de la ligne de choix de l Expéditeur" & Chr(13) & " Dim ExpEditEur" & Chr(13) & " ExpEditEur = Range(""d10"").Val ue" & Chr(13) & " msg.SentOnBehalfOfName = expediteur " & Chr(13) & " msg.CC = DestinatairesEnCc"
For Each Module In Classeur.VBProject.VBComponents
With Module.CodeModule
If Module.Name = "AutreFichier" Then
For I = 1 To .CountOfLines
Trouver = InStr(.Lines(I, 1), Rechercher)
If Trouver > 0 Then
'si une occurrence est trouvée, fait la modif et boucle
'sur la ligne afin de remplacer tous les mots
Do
.ReplaceLine I, Left(.Lines(I, 1) _
, Trouver - 1) & Remplacer & _
Mid(.Lines(I, 1), _
Trouver + Len(Rechercher) _
, Len(.Lines(I, 1)))
Trouver = InStr(Trouver + 1, _
.Lines(I, 1), Rechercher)
Loop While Trouver = 0
End If
Next I
End If
End With
Next Module
Set Classeur = Nothing
Set Module = Nothing
End Sub
Daniel
Non justement,
Il fait bien la modification, et à la fin une fenêtre apparaît, avec le bouton débogage grisé....
Strange..