Autres Macro pour rechercher et remplacer dans une feuille

lilooouuu

XLDnaute Nouveau
Bonjour,

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.

Merci d'avance à quiconque pourra m'aider :)
 

Pièces jointes

  • Test.macro-find.replace.xlsx
    15.5 KB · Affichages: 18
Solution
Re Lilou

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...

lilooouuu

XLDnaute Nouveau
Bonjour @lilooouuu , le Forum

Voici un essai en pièce jointe.

Bonne journée
@+Thierry

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 ?

Lilou
 

_Thierry

XLDnaute Barbatruc
Repose en paix
Re Bonjour Lilou,

Pour :
j'ai un peu de mal à comprendre où vous avez défini que les textes de remplacements sont dans la colonne B

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 :
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...

Bonne découverte du monde VBA
@+Thierry
 

Pièces jointes

  • XLD_ lilooouuu_Test.macro-find.replace_Loop_On_Sheets_v01.xlsm
    35.7 KB · Affichages: 8
Dernière édition:

lilooouuu

XLDnaute Nouveau
Re Bonjour Lilou,

Pour :


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...

Bonne découverte du monde VBA
@+Thierry


Merci beaucoup @_Thierry pour les explications !
Oui je me doute que ca va prendre du temps mais c'est pas grave :)
Merci encore et bon week-end !
 

_Thierry

XLDnaute Barbatruc
Repose en paix
Re Lilou

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...

Bien à toi, à vous
@+Thierry
 

Discussions similaires

Réponses
26
Affichages
361
Réponses
1
Affichages
160
Réponses
0
Affichages
133