Patch en vba...!

L

Lecardip

Guest
Bonjour à tous,

Problème :

J'ai une procédure Vb associée à un classeur et je voudrais modifier celle-ci par une autre procedure indépendante (Changer l'orthographe d'une variable ("Critères") par ("Criteres")). En quelque sorte créer un patch de modification en VBA.

Merci à tous
 
L

LaurentTBT

Guest
Bonjour,

Si c'est une modification ponctuelle, tu peux utiliser la fonction "Remplacer..." qui se trouvedans le menu Edition de VBA. Cette fonction te donne le choix de l'appliquer à la procédure en cours, au module en cours, voire à tous les module.

Si tu veux faire une macro, c'est bien plus compliqué.
Laurent.
 
L

Lecardip

Guest
Merci Laurent, mais le problème c'est que je dois faire cette modif sur pleins de sites différents et donc je voudrais pouvoir envoyer un patch en vba de modif par mail aux utilisateurs XP de ma macro.
Pascal
 
M

michel

Guest
Bonjour Laurent , bonjour Lecardip

j'espere que l'exemple joint pourra t'aider , meme s'il ne répond pas totalement à ta demande

le principe est d'ouvrir une boite de dialogue qui liste tous les classeurs ouverts
tu sélectionnes le classeur à modifier ( qui doit donc etre ouvert )
la macro remplace le mot "critères" par le mot "criteres" dans toutes les procedures du classeur : module ,worksheet , workbook et userform
je ne suis pas vraiment content de moi , mais je n'ai pas trouvé de solution pour effectuer les modifications sans passer par une cellule intermédiaire( en A1 )

il faudra ensuite l'adapter pour ton projet ( restreindre le lancement de la macro sur le classeur bien identifié...etc ...)

bon apres midi
michel
lapin4.gif
 

Pièces jointes

  • modifierVBA.zip
    17.6 KB · Affichages: 53
L

Lecardip

Guest
Merci Michel,

Je viens d'essayer de passer ta procédure mais oh malheur je ne t'avais pas tout dit ...le programme à modifier est un *.xlm et pas *.xls alors la procédure s'est planté(Voir ci-dessous).Par contre ta procédure a très bien marché sur mon projet Perso.xls...! Je te joins la BD sur laquelle je voudrais modifier ma variable et te remercie sincèrement pour ton aide.
Bon week-end
Pascal



Private Sub ListBox1_Click()
'http://www.excel-downloads.com/html/French/forum/messages/1_59900_59900.htm
'michel
'le 05.12.2003
Dim i As Integer
Dim Ajout As Integer, X As Integer
Dim Fichier As String, Msg As String
Dim VBComp As Object

Fichier = ListBox1.Value
Unload Me

Ajout = 1
Application.ScreenUpdating = False
For Each VBComp In Workbooks(Fichier).VBProject.VBComponents
Msg = VBComp.Name

X = Workbooks(Fichier).VBProject.VBComponents(Msg).codemodule.CountOfLines
For i = 1 To X


'J'ai eu un Plantage sur la ligne suivante...
ThisWorkbook.sheets(1).Range("A1") = Workbooks(Fichier).VBProject.VBComponents(Msg).codemodule.Lines(i, 1)
ThisWorkbook.sheets(1).Range("A1").Replace What:="critères", Replacement:="criteres", LookAt:=xlPart, MatchCase:=False
Workbooks(Fichier).VBProject.VBComponents(Msg).codemodule.ReplaceLine i, ThisWorkbook.sheets(1).Range("A1")
Next

Ajout = Ajout + X + 2
Next VBComp
Application.ScreenUpdating = True
Range("A1") = ""
MsgBox "modification terminée dans le classeur " & Fichier
End Sub
 

Pièces jointes

  • SeleDoma.zip
    1.8 KB · Affichages: 30
  • SeleDoma.zip
    1.8 KB · Affichages: 37
  • SeleDoma.zip
    1.8 KB · Affichages: 35
M

michel

Guest
bonsoir Lecardip

je revenais pour te proposer la macro modifiée , sans passer par une cellule intermediaire
Private Sub ListBox1_Click()
'http://www.excel-downloads.com/html/French/forum/messages/1_59900_59900.htm
'michel
'le 05.12.2003
Dim i As Integer
Dim Ajout As Integer, X As Integer, k As Integer
Dim Fichier As String, Msg As String, Val As String, Resultat As String
Dim VBComp As Object

Fichier = ListBox1.Value
Unload Me

Ajout = 1
Application.ScreenUpdating = False
For Each VBComp In Workbooks(Fichier).VBProject.VBComponents
Msg = VBComp.Name

X = Workbooks(Fichier).VBProject.VBComponents(Msg).codemodule.CountOfLines
For i = 1 To X ' à adapter si le mot à remplacer n'a pas le meme nombre de caracteres
Val = Workbooks(Fichier).VBProject.VBComponents(Msg).codemodule.Lines(i, 1)
For k = 1 To Len(Val)
If Mid(Val, k, 8) = "critères" Then
Resultat = Left(Val, k - 1) & "criteres" & Right(Val, Len(Val) - k - 7)
Workbooks(Fichier).VBProject.VBComponents(Msg).codemodule.ReplaceLine i, Resultat
End If
Next k
Next i

Ajout = Ajout + X + 2
Next VBComp
Application.ScreenUpdating = True
MsgBox "modification terminée dans le classeur " & Fichier
End Sub


...par contre maintenant je suis embété , car je ne sais meme pas à quoi correspond un fichier .xlm ( de plus dans ton zip il y a un fichier .frm...)

je n'aurai donc qu'un mot ....Help !!!!!!....
là , ça dépasse largement mes connaissances

bonne soirée
michel
lapin4.gif
 
M

michel

Guest
rebonsoir Lecardip

je viens de tester ton fichier et je n'ai pas eu de probleme particulier

il faut bien faire attention , car la macro est sensible aux minuscules et aux majuscules pour la recherche du mot à remplacer

par contre je ne vois par le rapport entre ton dernier fichier et le .xlm

bonne soirée
michel
lapin4.gif
 
L

LaurentTBT

Guest
Bonsoir Michel, Lecardip et tout le forum

Michel, j'étais justement sur la même idée que toi, avec le travail sur la recherche du classeur en moins.
Cependant, pour remplacer les mots, j'utilise ce que tu prenais dans ta première version, la fonction Replace. Pas besoin de faire une boucle sur tous les caractères.

Sub Patch()
Dim AncienNom As String
Dim NouveauNom As String
Dim val As String
Dim Feuille As Object
Dim i As Integer
Dim Fichier As String

Fichier = "NomDuClasseur"
AncienNom = "Critères"
NouveauNom = "Critère"
For Each Feuille In Workbooks(Fichier").VBProject.VBComponents
For i = 1 To Feuille.codemodule.CountOfLines
val = Feuille.codemodule.Lines(i, 1)
val = Replace(val, AncienNom, NouveauNom)
Feuille.codemodule.ReplaceLine i, val
Next i
Next Feuille
End Sub

Voilà, je n'apporte pas grand chose de plus que toi.

Bonne soirée
Laurent.
 
M

michel

Guest
bonsoir Laurent

quelques fois je me complique la vie alors qu'il existe des solutions simples et efficaces ...
Laurent , je pense que ta solution est plus rapide que la mienne et je vais de ce pas l'enregistrer dans ma database

bonne soirée et bon de weekend à toi
michel
lapin4.gif
 
L

Lecardip

Guest
Laurent, Michel,

Excusez-moi pour le retard mais comme je n'ai pas d'accès au web le week-end et que je suis parti très tôt vendredi soir (ramasser du bois ...moins prise de tête mais bon dieu quelle prise de reins ...!), je n'ai put prendre connaissance de vos messages que ce matin, le temps d'essayer vos conseils avisés me revoilà sur le forum. Comme on dit souvent l'union fait la force alors je vous remercie sincèrement tout les deux pour votre aide très précieuse et surtout pour la pertinence et la rapidité de vos réponses.
A bientôt et salutations à tout le forum.

Pascal
 

Discussions similaires

Réponses
6
Affichages
396
Réponses
12
Affichages
454

Statistiques des forums

Discussions
312 971
Messages
2 094 045
Membres
105 926
dernier inscrit
Odyssea