Je débute complètement avec les macros et je me suis un peu perdue en cours de route je pense...
Je m'explique, j'ai un fichier où le premier onglet regroupe les changements a effectuer dans les autres feuilles. Il s'agit principalement de TAG donc une suite de lettres et de chiffres.
Dans les autres feuilles j'ai des cellules de texte qui contienne la chaine de caractère a modifier sans aucune redondance entre les cellules.
J'ai joint un fichier test pour que ce soit plus clair.
J'aimerais que la macro cherche dans toute la feuille 2, le texte de la cellule A1 de la feuille 1 et le remplace par le texte de la cellule A2 de la feuille 1. Et ainsi de suite sur tous les changements a effectuer dans la feuille 1.
Avant de refermer le fichier, je voyais l'algo, on peut inverser les Loop je pense pour un petit peu optimiser :
VB:
Option Explicit
Sub TheReplacer()
Dim WsSource As Worksheet, WsCible As Worksheet
Dim RngSource As Range, CellSource As Range, RngCible As Range, CellCible
Dim MyTmpString As String
Set WsSource = ThisWorkbook.Worksheets("TAGS")
Set RngSource = WsSource.Range("A1:A" & WsSource.Range("A1000").End(xlUp).Row)
For Each WsCible In ThisWorkbook.Worksheets
Select Case WsCible.Name
Case "TAGS", "THIERRY", "TOTO"
'ON NE FAIT RIEN
Case Else
Set RngCible = WsCible.UsedRange 'On définit la Plage de la Feuille dans le Loop...
C'est un essai transformé ! Je l'ai inséré dans mon fichier test (qui est un peu plus conséquent) et tout fonctionne parfaitement !
Merci beaucoup pour votre aide.
Juste pour ma compréhension personnelle, est ce que c'est possible pour vous d'ajouter des commentaires pour m'expliquer ce que vous avez fait ? (j'ai un peu de mal à comprendre où vous avez défini que les textes de remplacements sont dans la colonne B)
De plus mon fichier final comporte beaucoup plus de feuilles que ça, que dois-je modifier dans cette macro pour que cela fonctionne dans toutes les feuilles ?
De plus mon fichier final comporte beaucoup plus de feuilles que ça, que dois-je modifier dans cette macro pour que cela fonctionne dans toutes les feuilles ?
Voici une v01, qui fait un Loop sur toutes les Feuilles...
Ici tu peux paramétrer les feuilles qui ne doivent PAS être touchées :
VB:
For Each CellSource In RngSource
For Each WsCible In ThisWorkbook.Worksheets
Select Case WsCible.Name
Case "TAGS", "THIERRY", "TOTO"
'ON NE FAIT RIEN
Case Else
TAGS, THIERRY et TOTO ne seront pas modifiées........
PS sur beaucoup de Feuilles ça peut prendre du temps...
C'est ici :
CellSource.Offset(0, 1).Value
Offset 0 Ligne 1 Colonne on tombe sur la colonne "B" pour le text de remplacement.
Pour :
Voici une v01, qui fait un Loop sur toutes les Feuilles...
Ici tu peux paramétrer les feuilles qui ne doivent PAS être touchées :
VB:
For Each CellSource In RngSource
For Each WsCible In ThisWorkbook.Worksheets
Select Case WsCible.Name
Case "TAGS", "THIERRY", "TOTO"
'ON NE FAIT RIEN
Case Else
TAGS, THIERRY et TOTO ne seront pas modifiées........
PS sur beaucoup de Feuilles ça peut prendre du temps...
Avant de refermer le fichier, je voyais l'algo, on peut inverser les Loop je pense pour un petit peu optimiser :
VB:
Option Explicit
Sub TheReplacer()
Dim WsSource As Worksheet, WsCible As Worksheet
Dim RngSource As Range, CellSource As Range, RngCible As Range, CellCible
Dim MyTmpString As String
Set WsSource = ThisWorkbook.Worksheets("TAGS")
Set RngSource = WsSource.Range("A1:A" & WsSource.Range("A1000").End(xlUp).Row)
For Each WsCible In ThisWorkbook.Worksheets
Select Case WsCible.Name
Case "TAGS", "THIERRY", "TOTO"
'ON NE FAIT RIEN
Case Else
Set RngCible = WsCible.UsedRange 'On définit la Plage de la Feuille dans le Loop
For Each CellSource In RngSource
For Each CellCible In RngCible
MyTmpString = Replace(CStr(CellCible.Value), CStr(CellSource.Value), CStr(CellSource.Offset(0, 1).Value))
CellCible.Value = MyTmpString
Next CellCible
Next CellSource
End Select
Next WsCible
End Sub
Par rapport à avant, en Loop Primaire, (extérieur) on scan les Feuilles un fois pour toute... Au lieu de scanner les cellules de Tags d'abord dans la version précédente. Ca évite d'aller voir toutes les feuilles à chaque Tag...