Remplacement d'un mot dans un ensemble de fichiers

A

alex

Guest
Re-bonjour tout le monde. N'ayant peut-être pas expliqué de manière très claire mon problème la dernière fois, je réessaie...

J'ai un ensemble de fichiers Excel dans lesquels se trouvent des références à un serveur. Comme nous allons changer le serveur, je dois remplacer toutes les références à ce serveur (qu'elles soient explicitement marquées dans la cellule ou qu'elles se trouvent dans la formule de calcul des cellules) sur l'ensemble des documents du répertoire...

Voilà voilà...

Est-ce que quelqu'un a donc une solution pour moi ?

J'ai trouvé un petit programme qui me semble pas mal (je l'attache) mais qui est destiné à Word... Est-ce que ca fonctionne aussi pour Excel ou est-ce qu'il y a des trucs à changer ?
Et où suis-je sensée indiquer le nom du répertoire dans lequel effectuer les changements ?

Merci à ceux qui pourront me donner un coup de main.
 

Pièces jointes

  • Public_Sub_RemplacementGlobal.zip
    2.5 KB · Affichages: 17
M

michel

Guest
Bonsoir Alex

les procedures ci dessous ( adaptées d'une Démo de @+Thierry et des remarques pertinentes de Veriland dans ton fil precedent ) permettent de remplacer des valeurs dans tous les classeurs d'un répertoire specifique .

il te restera à l'adapter pour ton projet . pas la peine de te dire que les procedures peuvent prendre un temps certain .


Option Explicit
Dim Book As Variant

Sub Ini()

Application.ScreenUpdating = False
Application.DisplayAlerts = False

OpenBook
Application.DisplayAlerts = True
Application.ScreenUpdating = True

End Sub

Sub OpenBook()
With Application.FileSearch
.NewSearch
.LookIn = "C:\Mes documents\test"
.FileType = msoFileTypeExcelWorkbooks
.Execute
On Error Resume Next
For Each Book In .FoundFiles
If Book <> ThisWorkbook.FullName Then
Workbooks.Open Book
Call CheckBook
End If
Next Book
End With
End Sub

Sub CheckBook()
Dim WB As Workbook
Dim i As Byte

Set WB = ActiveWorkbook
For i = 1 To ActiveWorkbook.Sheets.Count
Sheets(i).Cells.Replace What:="AncienneValeur", Replacement:="NouvelleValeur", LookAt:=xlPart, _
SearchOrder:=xlByRows, MatchCase:=False
Next

WB.Save
WB.Close
End Sub

bonne soirée
michel
lapin4.gif
 
J

jacquesderyes

Guest
Bonjour Alex,Michel et les amis du forum
En regardant le code de Michel je me suis posé la question si dans ce genre de procédure il ne serait pas souhaitable de préciser la zone de recherche dans chaque feuille en utilisant"UsedRange":


Sheets(i).UsedRange.Cells.Replace What:="AncienneValeur", Replacement:="NouvelleValeur", LookAt:=xlPart, _
SearchOrder:=xlByRows, MatchCase:=False
Je ne suis pas certain si cette précision accélère la procédure ou non?
Qu'en pensez-vous,

Bien amicalement
jacques de ryes
 
M

michel

Guest
bonjour Jacques

tu as raison
je viens de faire plusieurs essais , sur un repertoire de 4 classeurs contenant 3 onglets ( avec 10 cellules ou formules à modifier sur chaque feuille )
le temps de calcul est sensiblement plus court si on ajoute "usedrange" ( environ 10% de temps de gain )

je te remercies pour ton conseil

bon apres midi
michel
lapin4.gif
 
J

jacquesderyes

Guest
Bonsoir les amis
Merci Michel pour le résultat de ton essai.
Je pensais que le fait d'utiliser UsedRange dans une procédure effectuant des recherches multiples genre Find,Replace ,For Each etc,pouvait faire gagner du temps mais je ne l'avais pas vérifié.Voilà!C'est fait.Donc à l'avenir ne pas perdre celà de vue car sur de très gros fichiers on doit gagner un temps non négligeable.
Bien amicalement
jacques de ryes
 

Discussions similaires

Statistiques des forums

Discussions
312 387
Messages
2 087 856
Membres
103 671
dernier inscrit
rachid1983