Pb dans un programme de remplacement dans une macro d'hervé
1 réponse
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 !
Cette action est irreversible, confirmez la suppression du commentaire ?
Signaler le commentaire
Veuillez sélectionner un problème
Nudité
Violence
Harcèlement
Fraude
Vente illégale
Discours haineux
Terrorisme
Autre
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
Bonjour.
Outils Macro Sécurité Sources fiables
Cocher Faire confiance au projet Visual Basic
Alain CROS
"poypoy" <poypoy@discussions.microsoft.com> a écrit dans le message de news: CCFBEDB9-3F49-4635-A1A5-B91F159A197A@microsoft.com...
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 !
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 !