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

Pb dans un programme de remplacement dans une macro d'hervé

1 réponse
Avatar
poypoy
Bonjour,
je cherche à remplacer une adresse dans une macro par une autre adresse si
la première macro n'arrive pas à ouvrir le fichier à cette adresse.
J'ai demandé de l'aide et Hervé m'a répondu ceci :

Sub MaProc()
Dim Chemin As String
Dim Nouveau As String

Chemin = "D:\LeDossier\Coucou.xls"
'tente l'ouverture. Si erreur, le
'chemin ci-dessus sera remplacé
On Error Resume Next
Workbooks.Open Chemin
If Err.Number <> 0 Then
ChangeChemin Chemin, Nouveau
'seconde tentative
Workbooks.Open Nouveau
End If
On Error GoTo 0

'ici suite de ton code...

End Sub


Sub ChangeChemin(Chemin As String, _
NouvChemin As String)
Dim Trouver As Integer
Dim I As Integer
Dim Module As Object

NouvChemin = InputBox("Indiquez le chemin complet " _
& "du classeur Coucou.xls")

If NouvChemin = "" Then Exit Sub

Set Module = ActiveWorkbook.VBProject _
.VBComponents("Module1")
With Module.CodeModule
For I = .CountOfLines To 1 Step -1
Trouver = InStr(.Lines(I, 1), Chemin)
If Trouver <> 0 Then
.ReplaceLine I, Left(.Lines(I, 1) _
, Trouver - 1) & NouvChemin
End If
Next I
End With

Set Module = Nothing
End Sub

Quand je la tente, tout se passe bien jusqu'au moment de setté le module.
Là, VBA rouvre le premier module et continue comme si de rien n'était, sans
efféctué la fin de la sub changechemin... Je n'ai aucune idée de pourquoi,
mais je me suis dit que j'allais tester la macro de remplacement sans la
lancer par la macro principale ( au cas où le problème viendrait de leur
lien). Alors en cherchant un peu je suis tombé sur le site web de misange qui
propose une autre version du code d'hervé :

sub remplacer()
'Le module où se trouve cette proc
'doit s'appeler "ModuleDeMiseAJour"

Rechercher = "MonMotQueJeN'aimePlus"
Remplacer = "MonMotQueJ'aime"
For Each Classeur In Workbooks
For Each Module In Classeur.VBProject.VBComponents
With Module.CodeModule
If Module.Name <> "ModuleDeMiseAJour" 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
Next Classeur
Set Classeur = Nothing
Set Module = Nothing
End Sub

Je l'ai testé et elle me renvoie ceci :
Method 'VB project' of _'Workbook' failed
à la ligne de For each Module in classeur.VBProject.VBComponents

Est ce quelqu'un aurait une idée de pourquoi ca ne marche pas...
Est ce que c'est mon pc qui est mal configuré ou y a t il une erreure
quelquepart ?
Pourquoi vba ne finit il pas la macro dans le premier cas ?...
Bref, je me noie ! Help !

Merci d'avance
Benjamin

1 réponse

Avatar
Alain CROS
Bonjour.

Outils Macro Sécurité Sources fiables
Cocher Faire confiance au projet Visual Basic

Alain CROS

"poypoy" a écrit dans le message de news:

Quand je la tente, tout se passe bien jusqu'au moment de setté le module.
Là, VBA rouvre le premier module et continue comme si de rien n'était, sans
efféctué la fin de la sub changechemin... Je n'ai aucune idée de pourquoi,
mais je me suis dit que j'allais tester la macro de remplacement sans la
lancer par la macro principale ( au cas où le problème viendrait de leur
lien). Alors en cherchant un peu je suis tombé sur le site web de misange qui
propose une autre version du code d'hervé :

Je l'ai testé et elle me renvoie ceci :
Method 'VB project' of _'Workbook' failed
à la ligne de For each Module in classeur.VBProject.VBComponents

Est ce quelqu'un aurait une idée de pourquoi ca ne marche pas...
Est ce que c'est mon pc qui est mal configuré ou y a t il une erreure
quelquepart ?
Pourquoi vba ne finit il pas la macro dans le premier cas ?...
Bref, je me noie ! Help !

Merci d'avance
Benjamin