Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

Ajouter une ligne de code dans une macro

17 réponses
Avatar
Fredo(67)
Bonjour,

j'ai une macro que j'ai cr=E9=E9 pour des coll=E8gues.
(cette macro est utilis=E9e pour envoyer automatiquement des mails depuis e=
xcel)

Dans cette macro je souhaite ins=E9rer la ligne suivante

msg.SentOnBehalfOfName =3D "adresse@domaine.fr"

la partie de code consid=E9r=E9e passant de
msg.To =3D ActiveCell.Value
msg.CC =3D DestinatairesEnCc

=E0 =20
msg.To =3D ActiveCell.Value
msg.SentOnBehalfOfName =3D "adresse@domaine.fr"
msg.CC =3D DestinatairesEnCc


Je voudrais pouvoir faire cette modification depuis excel, par une macro en=
registr=E9e dans le Personal.xlb
parcequ'en fait elle doit =EAtre effectu=E9e 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 =E0 modifier pour r=E9importer un module contenant=
la macro mise =E0 jour, mais je bloque quasiment =E0 la premi=E8re ligne p=
ar un code d'erreur

voil=E0 ce que j'ai test=E9 :

Sub MacroQuiTransformeMacro()
Application.VBE.ActiveVBProject.VBComponents.Remove
' Application.VBE.ActiveVBProject.VBComponents.Remove
Application.VBE.ActiveVBProject.VBComponents ("Autrefichier")
Application.VBE.ActiveVBProject.VBComponents.Import "I:\Conduite\AA HIR=
TZ\Envoi_depuis_contact_tce.bas"
End Sub

10 réponses

1 2
Avatar
DanielCo
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
Avatar
Fredo(67)
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
Avatar
DanielCo
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
Avatar
Fredo(67)
Salut DanielCo
L'Accès approuvé au modèle d'objet du projet VVBA Est cochée.
Avatar
DanielCo
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
Avatar
Fredo(67)
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 ?
Avatar
DanielCo
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
Avatar
Fredo(67)
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
Avatar
DanielCo
Il ne surligne pas de ligne ?
Daniel
Avatar
Fredo(67)
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..
1 2