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

Modifier une macro par rechercher/remplacer VBA

7 réponses
Avatar
alain Lebayle
Bonjour,
J'ai un classeur A avec dans la feuille 1 dans la cellule A1
un nom de serveur soit "toto".
Dans la cellule A2 le nom de remplacement soit "titi"
Je souhaite en cliquant sur un bouton macro qui se trouve sur cette feuille.
Que le projet soit déprotégé, et que le module soit modifié puis refermé.
Je vous remercie
P.S. J'ai bien entendu cherché sur les nombreux sites, mais je ne parviens
pas à trouver la solution.
Alain


--

7 réponses

Avatar
LSteph
Bonjour,

ta question n'est pas claire tu parles du contenu de deux cellules et
veux modifier un module , où est le rapport ou que veux tu changer
comme code dans ce module?

@+

--
lSteph

On 21 oct, 12:37, "alain Lebayle"
wrote:
Bonjour,
J'ai un classeur A avec dans la feuille 1 dans la cellule A1
un nom de serveur soit "toto".
Dans la cellule A2 le nom de remplacement soit "titi"
Je souhaite en cliquant sur un bouton macro qui se trouve sur cette feuil le.
Que le projet soit déprotégé, et que le module soit modifié puis refermé.
Je vous remercie
P.S. J'ai bien entendu cherché sur les nombreux sites, mais je ne parvi ens
pas à trouver la solution.
Alain

--


Avatar
alain Lebayle
Bonjour,
en fait, je souhaite modifier un nom dans le module 2
le nom à modifier est "Alpha" à remplacer par "Béta"
Ancien = Alpha
Nouveau = Béta
J'ai essayé avec un début de code, mais cela plante au niveau de :
.CodeModule.Replace , Recherche
Merci pour l'aide apportée
Alain

Sub tre()
Ancien = Range("A1").Value
Nouveau = Range("A2").Value
Set VBComp = ActiveWorkbook.VBProject.VBComponents("Module2")
With VBComp
Recherche = "Alpha"
MsgBox "Valeur à modifier " & Recherche
Recherche = Replace(Recherche, Ancien, Nouveau)
MsgBox "Valeur après la modif " & Recherche
.CodeModule.Replace , Recherche
' End With
End Sub

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

Bonjour,

ta question n'est pas claire tu parles du contenu de deux cellules et
veux modifier un module , où est le rapport ou que veux tu changer
comme code dans ce module?

@+

--
lSteph

On 21 oct, 12:37, "alain Lebayle"
wrote:
Bonjour,
J'ai un classeur A avec dans la feuille 1 dans la cellule A1
un nom de serveur soit "toto".
Dans la cellule A2 le nom de remplacement soit "titi"
Je souhaite en cliquant sur un bouton macro qui se trouve sur cette
feuille.
Que le projet soit déprotégé, et que le module soit modifié puis refermé.
Je vous remercie
P.S. J'ai bien entendu cherché sur les nombreux sites, mais je ne parviens
pas à trouver la solution.
Alain

--


Avatar
FS
Bonjour,

Ce genre de code devrait faire le travail :

'======================= Sub ModifCodeModule()
Dim S$
With ThisWorkbook.VBProject.VBComponents("Module2").CodeModule
S = .Lines(1, .CountOfLines)
End With
S = Join(Split(S, "Alpha"), "Béta")
With ThisWorkbook.VBProject.VBComponents("Module2").CodeModule
.DeleteLines 1, .CountOfLines
.AddFromString S
End With
End Sub 'fs
'========================
Attention : Join et Split sont sensibles à la casse (alpha n'est pas
équivalent à Alpha).

FS
--
Frédéric SIGONNEAU
Modules et modèles pour Excel :
http://frederic.sigonneau.free.fr/

alain Lebayle a écrit :
Bonjour,
en fait, je souhaite modifier un nom dans le module 2
le nom à modifier est "Alpha" à remplacer par "Béta"
Ancien = Alpha
Nouveau = Béta
J'ai essayé avec un début de code, mais cela plante au niveau de :
..CodeModule.Replace , Recherche
Merci pour l'aide apportée
Alain

Sub tre()
Ancien = Range("A1").Value
Nouveau = Range("A2").Value
Set VBComp = ActiveWorkbook.VBProject.VBComponents("Module2")
With VBComp
Recherche = "Alpha"
MsgBox "Valeur à modifier " & Recherche
Recherche = Replace(Recherche, Ancien, Nouveau)
MsgBox "Valeur après la modif " & Recherche
.CodeModule.Replace , Recherche
' End With
End Sub

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

Bonjour,

ta question n'est pas claire tu parles du contenu de deux cellules et
veux modifier un module , où est le rapport ou que veux tu changer
comme code dans ce module?

@+

--
lSteph

On 21 oct, 12:37, "alain Lebayle"
wrote:
Bonjour,
J'ai un classeur A avec dans la feuille 1 dans la cellule A1
un nom de serveur soit "toto".
Dans la cellule A2 le nom de remplacement soit "titi"
Je souhaite en cliquant sur un bouton macro qui se trouve sur cette
feuille.
Que le projet soit déprotégé, et que le module soit modifié puis refermé.
Je vous remercie
P.S. J'ai bien entendu cherché sur les nombreux sites, mais je ne parviens
pas à trouver la solution.
Alain

--






Avatar
alain Lebayle
Salut Fs,
C'est parfait, cela fonctionne très bien !
Je fais un test demain avec Excel 97, car au travail, c'est Excel 97, et te
tiens au courant
Très bonne soirée
Alain

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

Bonjour,

Ce genre de code devrait faire le travail :

'======================= > Sub ModifCodeModule()
Dim S$
With ThisWorkbook.VBProject.VBComponents("Module2").CodeModule
S = .Lines(1, .CountOfLines)
End With
S = Join(Split(S, "Alpha"), "Béta")
With ThisWorkbook.VBProject.VBComponents("Module2").CodeModule
.DeleteLines 1, .CountOfLines
.AddFromString S
End With
End Sub 'fs
'======================== >
Attention : Join et Split sont sensibles à la casse (alpha n'est pas
équivalent à Alpha).

FS
--
Frédéric SIGONNEAU
Modules et modèles pour Excel :
http://frederic.sigonneau.free.fr/

alain Lebayle a écrit :
Bonjour,
en fait, je souhaite modifier un nom dans le module 2
le nom à modifier est "Alpha" à remplacer par "Béta"
Ancien = Alpha
Nouveau = Béta
J'ai essayé avec un début de code, mais cela plante au niveau de :
..CodeModule.Replace , Recherche
Merci pour l'aide apportée
Alain

Sub tre()
Ancien = Range("A1").Value
Nouveau = Range("A2").Value
Set VBComp = ActiveWorkbook.VBProject.VBComponents("Module2")
With VBComp
Recherche = "Alpha"
MsgBox "Valeur à modifier " & Recherche
Recherche = Replace(Recherche, Ancien, Nouveau)
MsgBox "Valeur après la modif " & Recherche
.CodeModule.Replace , Recherche
' End With
End Sub

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

Bonjour,

ta question n'est pas claire tu parles du contenu de deux cellules et
veux modifier un module , où est le rapport ou que veux tu changer
comme code dans ce module?

@+

--
lSteph

On 21 oct, 12:37, "alain Lebayle"
wrote:
Bonjour,
J'ai un classeur A avec dans la feuille 1 dans la cellule A1
un nom de serveur soit "toto".
Dans la cellule A2 le nom de remplacement soit "titi"
Je souhaite en cliquant sur un bouton macro qui se trouve sur cette
feuille.
Que le projet soit déprotégé, et que le module soit modifié puis
refermé.
Je vous remercie
P.S. J'ai bien entendu cherché sur les nombreux sites, mais je ne
parviens
pas à trouver la solution.
Alain

--







Avatar
FS
Ah, aucune chance avec Excel 97 (qui ne connait ni Join ni Split).
Il y a cependant des roues de secours possibles. Je t'envoie ça demain.

FS
--
Frédéric SIGONNEAU
Modules et modèles pour Excel :
http://frederic.sigonneau.free.fr/

alain Lebayle a écrit :
Salut Fs,
C'est parfait, cela fonctionne très bien !
Je fais un test demain avec Excel 97, car au travail, c'est Excel 97, et te
tiens au courant
Très bonne soirée
Alain

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

Bonjour,

Ce genre de code devrait faire le travail :

'======================= >> Sub ModifCodeModule()
Dim S$
With ThisWorkbook.VBProject.VBComponents("Module2").CodeModule
S = .Lines(1, .CountOfLines)
End With
S = Join(Split(S, "Alpha"), "Béta")
With ThisWorkbook.VBProject.VBComponents("Module2").CodeModule
.DeleteLines 1, .CountOfLines
.AddFromString S
End With
End Sub 'fs
'======================== >>
Attention : Join et Split sont sensibles à la casse (alpha n'est pas
équivalent à Alpha).

FS
--
Frédéric SIGONNEAU
Modules et modèles pour Excel :
http://frederic.sigonneau.free.fr/

alain Lebayle a écrit :
Bonjour,
en fait, je souhaite modifier un nom dans le module 2
le nom à modifier est "Alpha" à remplacer par "Béta"
Ancien = Alpha
Nouveau = Béta
J'ai essayé avec un début de code, mais cela plante au niveau de :
..CodeModule.Replace , Recherche
Merci pour l'aide apportée
Alain

Sub tre()
Ancien = Range("A1").Value
Nouveau = Range("A2").Value
Set VBComp = ActiveWorkbook.VBProject.VBComponents("Module2")
With VBComp
Recherche = "Alpha"
MsgBox "Valeur à modifier " & Recherche
Recherche = Replace(Recherche, Ancien, Nouveau)
MsgBox "Valeur après la modif " & Recherche
.CodeModule.Replace , Recherche
' End With
End Sub

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

Bonjour,

ta question n'est pas claire tu parles du contenu de deux cellules et
veux modifier un module , où est le rapport ou que veux tu changer
comme code dans ce module?

@+

--
lSteph

On 21 oct, 12:37, "alain Lebayle"
wrote:
Bonjour,
J'ai un classeur A avec dans la feuille 1 dans la cellule A1
un nom de serveur soit "toto".
Dans la cellule A2 le nom de remplacement soit "titi"
Je souhaite en cliquant sur un bouton macro qui se trouve sur cette
feuille.
Que le projet soit déprotégé, et que le module soit modifié puis
refermé.
Je vous remercie
P.S. J'ai bien entendu cherché sur les nombreux sites, mais je ne
parviens
pas à trouver la solution.
Alain

--









Avatar
FS
Re,

Testé avec Excel 97 :

'========================== Sub ModifCodeModule()
Dim S$
With ThisWorkbook.VBProject.VBComponents("Module2").CodeModule
S = .Lines(1, .CountOfLines)
End With
S = JoinFor97("Béta", SplitFor97("Alpha", S))
With ThisWorkbook.VBProject.VBComponents("Module2").CodeModule
.DeleteLines 1, .CountOfLines
.AddFromString S
End With
End Sub 'fs

Function SplitFor97(split_string As String, orig_string As String) As
Collection
' Helper function to return a list from a string
' e.g.
' split(" ", "I like banana splits")
' -> "I", "like", "banana", "splits"

' prepare the new list
If split_string = "" Then Exit Function 'fs
Dim coll As New Collection

Dim pos
pos = 1
Dim token As String
Dim my_string As String
my_string = orig_string 'copied so as not to modify the original string

' As long as there's some string left to scan, look for the
' split value in it, then add everything to the left of it
' (using the Left operator) to our new list.
' Then Redefine the string as the bit to the right of that
' (using the Mid operator)

While my_string <> "" And pos <> 0
pos = InStr(1, my_string, split_string)
If pos > 0 Then
token = Left(my_string, pos - 1)
If token <> "" Then coll.Add token
my_string = Mid(my_string, pos + Len(split_string))
End If
Wend
' By default, only add the string if it's not blank.
' this means that multiple delimiters don't create
' multiple fields.
' e.g.
' split("-", "Hello-----World")
' -> "Hello", "World"
'
' This might not be what you want ("Hello","","","","","World")
' but it's the correct default for this particular application.

If my_string <> "" Then coll.Add my_string
Set SplitFor97 = coll
End Function

Function JoinFor97(jstring As String, coll As Collection) As String
' a helper sub. Returns the list supplied interspersed with
' the join string.
' e.g.
' join("-", "Hello", "World", 1,2,3) -> Hello-World-1-2-3

Dim token As Variant
For Each token In coll
If JoinFor97 <> "" And token <> "" Then JoinFor97 = JoinFor97 & jstring
JoinFor97 = JoinFor97 & token
Next
End Function
'==========================
FS
--
Frédéric SIGONNEAU
Modules et modèles pour Excel :
http://frederic.sigonneau.free.fr/

alain Lebayle a écrit :
Salut Fs,
C'est parfait, cela fonctionne très bien !
Je fais un test demain avec Excel 97, car au travail, c'est Excel 97, et te
tiens au courant
Très bonne soirée
Alain

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

Bonjour,

Ce genre de code devrait faire le travail :

'======================= >> Sub ModifCodeModule()
Dim S$
With ThisWorkbook.VBProject.VBComponents("Module2").CodeModule
S = .Lines(1, .CountOfLines)
End With
S = Join(Split(S, "Alpha"), "Béta")
With ThisWorkbook.VBProject.VBComponents("Module2").CodeModule
.DeleteLines 1, .CountOfLines
.AddFromString S
End With
End Sub 'fs
'======================== >>
Attention : Join et Split sont sensibles à la casse (alpha n'est pas
équivalent à Alpha).

FS
--
Frédéric SIGONNEAU
Modules et modèles pour Excel :
http://frederic.sigonneau.free.fr/

alain Lebayle a écrit :
Bonjour,
en fait, je souhaite modifier un nom dans le module 2
le nom à modifier est "Alpha" à remplacer par "Béta"
Ancien = Alpha
Nouveau = Béta
J'ai essayé avec un début de code, mais cela plante au niveau de :
..CodeModule.Replace , Recherche
Merci pour l'aide apportée
Alain

Sub tre()
Ancien = Range("A1").Value
Nouveau = Range("A2").Value
Set VBComp = ActiveWorkbook.VBProject.VBComponents("Module2")
With VBComp
Recherche = "Alpha"
MsgBox "Valeur à modifier " & Recherche
Recherche = Replace(Recherche, Ancien, Nouveau)
MsgBox "Valeur après la modif " & Recherche
.CodeModule.Replace , Recherche
' End With
End Sub

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

Bonjour,

ta question n'est pas claire tu parles du contenu de deux cellules et
veux modifier un module , où est le rapport ou que veux tu changer
comme code dans ce module?

@+

--
lSteph

On 21 oct, 12:37, "alain Lebayle"
wrote:
Bonjour,
J'ai un classeur A avec dans la feuille 1 dans la cellule A1
un nom de serveur soit "toto".
Dans la cellule A2 le nom de remplacement soit "titi"
Je souhaite en cliquant sur un bouton macro qui se trouve sur cette
feuille.
Que le projet soit déprotégé, et que le module soit modifié puis
refermé.
Je vous remercie
P.S. J'ai bien entendu cherché sur les nombreux sites, mais je ne
parviens
pas à trouver la solution.
Alain

--









Avatar
alain Lebayle
Bonsoir,
Tout cela fonctionne parfaitement, c'est vraiment très sympa de ta part
d'avoir pris le temps pour moi, vraiment un très grand merci !
Alain

"FS" a écrit dans le message de news:
uy%
Re,

Testé avec Excel 97 :

'========================== > Sub ModifCodeModule()
Dim S$
With ThisWorkbook.VBProject.VBComponents("Module2").CodeModule
S = .Lines(1, .CountOfLines)
End With
S = JoinFor97("Béta", SplitFor97("Alpha", S))
With ThisWorkbook.VBProject.VBComponents("Module2").CodeModule
.DeleteLines 1, .CountOfLines
.AddFromString S
End With
End Sub 'fs

Function SplitFor97(split_string As String, orig_string As String) As
Collection
' Helper function to return a list from a string
' e.g.
' split(" ", "I like banana splits")
' -> "I", "like", "banana", "splits"

' prepare the new list
If split_string = "" Then Exit Function 'fs
Dim coll As New Collection

Dim pos
pos = 1
Dim token As String
Dim my_string As String
my_string = orig_string 'copied so as not to modify the original string

' As long as there's some string left to scan, look for the
' split value in it, then add everything to the left of it
' (using the Left operator) to our new list.
' Then Redefine the string as the bit to the right of that
' (using the Mid operator)

While my_string <> "" And pos <> 0
pos = InStr(1, my_string, split_string)
If pos > 0 Then
token = Left(my_string, pos - 1)
If token <> "" Then coll.Add token
my_string = Mid(my_string, pos + Len(split_string))
End If
Wend
' By default, only add the string if it's not blank.
' this means that multiple delimiters don't create
' multiple fields.
' e.g.
' split("-", "Hello-----World")
' -> "Hello", "World"
'
' This might not be what you want ("Hello","","","","","World")
' but it's the correct default for this particular application.

If my_string <> "" Then coll.Add my_string
Set SplitFor97 = coll
End Function

Function JoinFor97(jstring As String, coll As Collection) As String
' a helper sub. Returns the list supplied interspersed with
' the join string.
' e.g.
' join("-", "Hello", "World", 1,2,3) -> Hello-World-1-2-3

Dim token As Variant
For Each token In coll
If JoinFor97 <> "" And token <> "" Then JoinFor97 = JoinFor97 &
jstring
JoinFor97 = JoinFor97 & token
Next
End Function
'========================== >
FS
--
Frédéric SIGONNEAU
Modules et modèles pour Excel :
http://frederic.sigonneau.free.fr/

alain Lebayle a écrit :
Salut Fs,
C'est parfait, cela fonctionne très bien !
Je fais un test demain avec Excel 97, car au travail, c'est Excel 97, et
te tiens au courant
Très bonne soirée
Alain

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

Bonjour,

Ce genre de code devrait faire le travail :

'======================= >>> Sub ModifCodeModule()
Dim S$
With ThisWorkbook.VBProject.VBComponents("Module2").CodeModule
S = .Lines(1, .CountOfLines)
End With
S = Join(Split(S, "Alpha"), "Béta")
With ThisWorkbook.VBProject.VBComponents("Module2").CodeModule
.DeleteLines 1, .CountOfLines
.AddFromString S
End With
End Sub 'fs
'======================== >>>
Attention : Join et Split sont sensibles à la casse (alpha n'est pas
équivalent à Alpha).

FS
--
Frédéric SIGONNEAU
Modules et modèles pour Excel :
http://frederic.sigonneau.free.fr/

alain Lebayle a écrit :
Bonjour,
en fait, je souhaite modifier un nom dans le module 2
le nom à modifier est "Alpha" à remplacer par "Béta"
Ancien = Alpha
Nouveau = Béta
J'ai essayé avec un début de code, mais cela plante au niveau de :
..CodeModule.Replace , Recherche
Merci pour l'aide apportée
Alain

Sub tre()
Ancien = Range("A1").Value
Nouveau = Range("A2").Value
Set VBComp = ActiveWorkbook.VBProject.VBComponents("Module2")
With VBComp
Recherche = "Alpha"
MsgBox "Valeur à modifier " & Recherche
Recherche = Replace(Recherche, Ancien, Nouveau)
MsgBox "Valeur après la modif " & Recherche
.CodeModule.Replace , Recherche
' End With
End Sub

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

Bonjour,

ta question n'est pas claire tu parles du contenu de deux cellules et
veux modifier un module , où est le rapport ou que veux tu changer
comme code dans ce module?

@+

--
lSteph

On 21 oct, 12:37, "alain Lebayle"
wrote:
Bonjour,
J'ai un classeur A avec dans la feuille 1 dans la cellule A1
un nom de serveur soit "toto".
Dans la cellule A2 le nom de remplacement soit "titi"
Je souhaite en cliquant sur un bouton macro qui se trouve sur cette
feuille.
Que le projet soit déprotégé, et que le module soit modifié puis
refermé.
Je vous remercie
P.S. J'ai bien entendu cherché sur les nombreux sites, mais je ne
parviens
pas à trouver la solution.
Alain

--