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
Vidéos High-Tech et Jeu Vidéo
Téléchargements
Vos réponses Page 1 / 2
Gagnez chaque mois un abonnement Premium avec GNT : Inscrivez-vous !
Trier par : date / pertinence
DanielCo
Le #26368264
Bonjour,
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 :
Bonjour,

j'ai une macro que j'ai créé pour des collègues.
(cette macro est utilisée pour envoyer automatiquement des mails depuis
excel)

Dans cette macro je souhaite insérer la ligne suivante

msg.SentOnBehalfOfName = ""

la partie de code considérée passant de
msg.To = ActiveCell.Value
msg.CC = DestinatairesEnCc

à
msg.To = ActiveCell.Value
msg.SentOnBehalfOfName = ""
msg.CC = DestinatairesEnCc


Je voudrais pouvoir faire cette modification depuis excel, par une macro
enregistré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
module contenant la macro à modifier pour réimporter un module contenant la
macro mise à jour, mais je bloque quasiment à la première ligne par 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
HIRTZEnvoi_depuis_contact_tce.bas" End Sub
Fredo(67)
Le #26368285
en cherchant sur Excelabo, j'ai trouvé ceci
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
DanielCo
Le #26368288
cf. précédente réponse.
Daniel
Il se trouve que Fredo(67) a formulé :

et là ca bloque sur For Each Module In Classeur.VBProject.VBComponents
Fredo(67)
Le #26368292
Salut DanielCo
L'Accès approuvé au modèle d'objet du projet VVBA Est cochée.
DanielCo
Le #26368291
Fredo(67) a écrit :
Salut DanielCo
L'Accès approuvé au modèle d'objet du projet VVBA Est cochée.



La variable "Classeur" n'est pas renseignée.
Daniel
Fredo(67)
Le #26368290
Le lundi 21 septembre 2015 15:06:16 UTC+2, DanielCo a écrit :
Fredo(67) a écrit :
> Salut DanielCo
> 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 ?
DanielCo
Le #26368296
Fredo(67) avait soumis l'idée :
Le lundi 21 septembre 2015 15:06:16 UTC+2, DanielCo a écrit :
Fredo(67) a écrit :
Salut DanielCo
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
Fredo(67)
Le #26368298
Un grand merci Daniel, effectivement, maintenant ça marche.

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
DanielCo
Le #26368306
Il ne surligne pas de ligne ?
Daniel
Fredo(67)
Le #26368310
Le lundi 21 septembre 2015 16:43:01 UTC+2, DanielCo a écrit :
Il ne surligne pas de ligne ?
Daniel



Non justement,
Il fait bien la modification, et à la fin une fenêtre apparaît, avec le bouton débogage grisé....

Strange..
Publicité
Poster une réponse
Anonyme