Macro recherche/remplacement

ironangel

XLDnaute Occasionnel
Bonjour le forum,

Je sollicite encore une fois votre gracieuse aide, qui me permet d'avancer dans mon boulot.
La situation : chaque fichier à un code défini (ex: DA-02386)
dans chaque fichier des informations se recoupent ( des codes identiques)
ex: j'ai 4 fichiers DA-02386/87/88/89, et dans chacun d'eux, on retrouve l'infos "creme"
J'aimerais pouvoir creer une macro qui me permettent, après indication des codes (DA-02386 par ex) d'effectuer une recherche du mot "creme" dans les fiches indiquées et de me le remplacer par le mot "aérosol"

J'ai pensé à un userform pour l'interface, avec par ex, une zone ou on indique les codes, puis une autre le mot recherché et enfin une avec le mot à remplacer.

Est-ce possible? mes connaissances excel ne me permettent pas d'élucider cela

Un grand merci d'avance
Seb
 

mromain

XLDnaute Barbatruc
Re : Macro recherche/remplacement

oups,

Code:
Sub test()
Dim texteCherche As String, texteRemplace As String, curSheet As Worksheet, tmpWbk As Workbook

' récupérer le texte à remplacer
texteCherche = CStr(Application.InputBox("texte cherché"))
' récupérer le nouveau texte
texteRemplace = CStr(Application.InputBox("nouveau texte"))

' boucler sur les classeurs ouverts
For Each tmpWbk In Application.Workbooks
    ' ne pas traiter ce classeur
    If tmpWbk.Name <> ThisWorkbook.Name Then
        ' boucler sur chaque feuille du classeur
        For Each curSheet In tmpWbk.Worksheets
            ' remplacer les deux textes
            curSheet.Cells.Replace what:=texteCherche, replacement:=texteRemplace, lookat:=xlPart
        Next curSheet
    End If
Next tmpWbk
End Sub

Sub test2()
Dim theSheet As Worksheet, tmpWbk As Workbook, nomOnglet As String
nomOnglet = "caisse et palettisation"


' boucler sur les classeurs ouverts
For Each tmpWbk In Application.Workbooks
    ' ne pas traiter ce classeur
    If tmpWbk.Name <> ThisWorkbook.Name Then
    
        ' si la feuille existe,...
        On Error Resume Next
        ThisWorkbook.Sheets(nomOnglet).Select
        If Err.Number = 0 Then
            '...on la supprime
            Application.DisplayAlerts = False
            ThisWorkbook.Sheets(nomOnglet).Delete
            Application.DisplayAlerts = True
        End If
        On Error GoTo 0
        
        'copier la feuille dans le classeur
        ThisWorkbook.Sheets(nomOnglet).Copy after:=tmpWbk.Sheets(1)
    End If
Next tmpWbk
End Sub

j'espère que ça ira :)

a+
 

ironangel

XLDnaute Occasionnel
Re : Macro recherche/remplacement

Hello mromain,

Pour le premier cas, à savoir rechercher/remplacer
ça marche nickel ;-) trop fort , merci

Par contre pour le tableau à insérer, à savoir la 2nd macro, ya un bug dans la macro car quand je l'éxécute, il me supprime l'onglet de la feuille initiliale puis il me met erreur de compilation à l'avant derniere phrase tmpworkbook...

Une idée pour me venir en aide?

Merci à toi
 

mromain

XLDnaute Barbatruc
Re : Macro recherche/remplacement

re,

si ça buggue à cette ligne
ThisWorkbook.Sheets(nomOnglet).Copy after:=tmpWbk.Sheets(1)

essaye de la remplacer par
ThisWorkbook.Sheets(nomOnglet).Copy after:=tmpWbk.Sheets(tmpWbk.Sheets.Count)

a+
 

ironangel

XLDnaute Occasionnel
Re : Macro recherche/remplacement

Hello mromain,

ça bug toujours, je pense uqe ça vient de plus haut, car en fait la macro supprime l'onglet "caisse et palettisation" et quand elle arrive à la ligne que tu viens de me donner, ça bug, erreur de compilation/

Je pense que ça ne devrait pas supprimer l'onglet dans la feuille de saisie mais le copier non?

Merci a toi
 

mromain

XLDnaute Barbatruc
Re : Macro recherche/remplacement

re salut,

voici le code modifié :
Code:
Sub test2()
Dim theSheet As Worksheet, tmpWbk As Workbook, nomOnglet As String
nomOnglet = "caisse et palettisation"


' boucler sur les classeurs ouverts
For Each tmpWbk In Application.Workbooks
    ' ne pas traiter ce classeur
    If tmpWbk.Name <> ThisWorkbook.Name Then
            
        'copier la feuille dans le classeur
        ThisWorkbook.Sheets(nomOnglet).Copy after:=tmpWbk.Sheets(tmpWbk.Sheets.Count)
        Set theSheet = tmpWbk.Sheets(tmpWbk.Sheets.Count)
        
        If Not theSheet.Name = nomOnglet Then
            Application.DisplayAlerts = False
            tmpWbk.Sheets(nomOnglet).Delete
            Application.DisplayAlerts = True
            theSheet.Name = nomOnglet
        End If
        
    End If
Next tmpWbk
End Sub

a+
 

ironangel

XLDnaute Occasionnel
Re : Macro recherche/remplacement

Salut mromain,

ça bug toujours, cette fois ci la feuille n'a pas été supprimée mais la macro m'a amené sur un autre classeur qui lui était aussi ouvert mais n'a pas copié l'onglet "caisse et palettisation", elle me met erreur de compilation à thesheet=onglet, une des dernieres lignes.

Une idée pour moi?
Merci à toi pour ton temps et ton aide
 

mromain

XLDnaute Barbatruc
Re : Macro recherche/remplacement

salut,

la macro a l'air de fonctionner chez moi.
je t'ai fait un exemple dans le fichier zip.

tu as 5 fichiers :
- "caisse et palettisation.xls", qui contient la feuille-modèle et la macro
- "Classeur1.xls" à "Classeur4.xls" qui sont des classeurs à modifier (divers cas)

ouvre les 5 et lance la macro de "caisse et palettisation.xls" et dis-moi si ça marche chez toi stp.

PS: tu aurais déjà du faire un exemple de la sorte pour qu'on puisse travailler directement dessus.

a+
 

Pièces jointes

  • Classeur1.zip
    28.5 KB · Affichages: 21
  • Classeur1.zip
    28.5 KB · Affichages: 23
  • Classeur1.zip
    28.5 KB · Affichages: 20

ironangel

XLDnaute Occasionnel
Re : Macro recherche/remplacement

Salut mromain,

Désolé, j'envoie souvent des fichiers dans mes posts mais la je ne voyais pas trop comment faire.
C'est bon j'ai compris d'ou provenait le problème, je t'explique:
L'onglet s'appelait "Caisse et Palettisation" et non "caisse et palettisation", je ne pensais pas du tout que les majuscules pouvaient jouer dans l'éxécution des macro mais apparemment c'est le cas, car en les enlevant ça marche ;-)

Merci à toi pour ton aide, c'est cool de m'avoir donné un peu de ton temps,
dit moi tu boss dans quel domaine?info?

A bientot et encore merci
 

ironangel

XLDnaute Occasionnel
Re : Macro recherche/remplacement

Salut mromain, le forum,

J'ai encore besoin de ton aide, dans le code ou je copie l'onglet "caisse et palettisation" dans les autres classeurs ouvert, j'aimerais si possible que la macro ne copie pas le bouton que j'ai inséré dans l'onglet initiale.
Donc en gros, il faudrait qu'elle copie juste les infos et pas les macros, c'est possible?

Merci à toi
 

mromain

XLDnaute Barbatruc
Re : Macro recherche/remplacement

bonjour,

pour supprimer le bouton (pas les macros), rajoutes cette ligne :
Code:
...
...
            tmpWbk.Sheets(nomOnglet).Delete
            Application.DisplayAlerts = True
            theSheet.Name = nomOnglet
        End If
        [B]theSheet.Shapes("[I][COLOR=Red]nomBouton[/COLOR][/I]").Delete[/B]
    End If
Next tmpWbk
End Sub
a+
 

ironangel

XLDnaute Occasionnel
Re : Macro recherche/remplacement

Salut mromain,
bizarement, ça a marché une fois mais maintenant ça me met erreur: "objet introuvable" alors que pourtant le bouton porte bien ce nom.
theSheet.Shapes("Transferer").Delete et mon bouton s'appelle "Transferer"
tu aurais une idée?

Merci d'avance à toi
 

mromain

XLDnaute Barbatruc
Re : Macro recherche/remplacement

bonjour,

à tester

Code:
...
...
            tmpWbk.Sheets(nomOnglet).Delete
            Application.DisplayAlerts = True
            theSheet.Name = nomOnglet
        End If
        [COLOR=Red][B]On Error Resume Next[/B][/COLOR]
        [COLOR=Black]theSheet.Shapes("[I]nomBouton[/I]").Delete[/COLOR]
        [B][COLOR=Red]On Error GoTo 0[/COLOR][/B]
    End If
Next tmpWbk
End Sub
a+
 

Discussions similaires

Statistiques des forums

Discussions
312 508
Messages
2 089 143
Membres
104 050
dernier inscrit
Pepito93100