IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Macros et VBA Excel Discussion :

Macro rechercher Remplacer [XL-2003]


Sujet :

Macros et VBA Excel

  1. #1
    Membre régulier
    Homme Profil pro
    Inscrit en
    Octobre 2007
    Messages
    270
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Octobre 2007
    Messages : 270
    Points : 123
    Points
    123
    Par défaut Macro rechercher Remplacer
    Bonjour quelqu'un pourrait-il m'expliquer comment utiliser la fonction rechercher remplacer avec une macro??
    Merci

  2. #2
    Expert éminent
    Homme Profil pro
    Inscrit en
    Août 2010
    Messages
    3 453
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Août 2010
    Messages : 3 453
    Points : 6 871
    Points
    6 871
    Par défaut
    Oups,appui sur la mauvaise touche.
    Donc, je disais rempli quelques cellules de la colonne A avec du texte et des espaces puis teste. Tu place le curseur sur le mot "Replace" puis F1 et tu aura toute l'aide dont tu as besoin :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    Sub Test()
     
        Dim I As Integer
     
        'parcour les cellules de la colonne A et remplace
        'tous les espaces par des tirets bas
        For I = 1 To Range("A" & Rows.Count).End(xlUp).Row
           Range("A" & I) = Replace(Range("A" & I), " ", "_")
        Next I
     
    End Sub
    Hervé.

  3. #3
    Membre régulier
    Homme Profil pro
    Inscrit en
    Octobre 2007
    Messages
    270
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Octobre 2007
    Messages : 270
    Points : 123
    Points
    123
    Par défaut
    Ca marche, mais le problème c'est que ca remplace tout et pas juste une partie.
    En fait le but de ma demande c'est de corriger des formule fausse via une macro.
    ex: j'ai une formule : =si(A1=B1;B2)
    et que je veux qu'il me remplace B2 par B3
    si je fait
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    Sub Test()
     
        Dim I As Integer
     
        'parcour les cellules de la colonne A et remplace
        'tous les espaces par des tirets bas
        For I = 1 To Range("A" & Rows.Count).End(xlUp).Row
           Range("A" & I) = Replace(Range("A" & I), "A1=B1;B2", "A1=B1;B3")
        Next I
     
    End Sub
    et bien il me remplace tout. une idée?

  4. #4
    Expert éminent
    Homme Profil pro
    Inscrit en
    Août 2010
    Messages
    3 453
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Août 2010
    Messages : 3 453
    Points : 6 871
    Points
    6 871
    Par défaut
    Re,

    Dans ce cas, il faut que tu fasse la recherche dans la formule :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    Sub Test()
     
        Dim I As Integer
     
        'parcour les cellules de la colonne A et remplace
        'tous les espaces par des tirets bas
        For I = 1 To Range("A" & Rows.Count).End(xlUp).Row
           Range("A" & I).Formula = Replace(Range("A" & I).Formula, "B2", "B3")
        Next I
     
    End Sub
    Hervé.

  5. #5
    Membre régulier
    Homme Profil pro
    Inscrit en
    Octobre 2007
    Messages
    270
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Octobre 2007
    Messages : 270
    Points : 123
    Points
    123
    Par défaut
    En fait plus que de me remplacer tout par exemple si le resultat de ma formule
    si(A1=A2;B1) est 10 ben la macro eleve la formule et il ne reste que 10

  6. #6
    Expert éminent Avatar de casefayere
    Homme Profil pro
    RETRAITE
    Inscrit en
    Décembre 2006
    Messages
    5 138
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 70
    Localisation : France, Ardennes (Champagne Ardenne)

    Informations professionnelles :
    Activité : RETRAITE
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Décembre 2006
    Messages : 5 138
    Points : 9 548
    Points
    9 548
    Par défaut
    Bonjour à tou(te)s,
    je reprends la formule de theze

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    Sub Test()
    Dim I As Integer
     
    For I = 1 To Range("A" & Rows.Count).End(xlUp).Row
       Range("A" & I).Formula = Replace(Range("A" & I).Formula, "B2", "B3")
       Range("A" & I).Copy
       Range("A" & I).PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
          :=False, Transpose:=False
    Next I
    End Sub

  7. #7
    Membre régulier
    Homme Profil pro
    Inscrit en
    Octobre 2007
    Messages
    270
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Octobre 2007
    Messages : 270
    Points : 123
    Points
    123
    Par défaut
    Merci ca fonctionne par contre si je laisse le copier coller il effectue l'opération et ne garde pas la formule.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    Sub Test()
    Dim I As Integer
     
    For I = 1 To Range("D" & Rows.Count).End(xlUp).Row
       Range("D" & I).Formula = Replace(Range("D" & I).Formula, "B1", "B2")
    Next I
    End Sub
    Comme ceci il garde la formule.
    Merci à vous !!

  8. #8
    Membre régulier
    Homme Profil pro
    Inscrit en
    Octobre 2007
    Messages
    270
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Octobre 2007
    Messages : 270
    Points : 123
    Points
    123
    Par défaut
    J'essaye de réaliser cette méthode pour toute ma feuille mais il n'y as rien a faire pourriez vous me dire ce qu'il ne va pas
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
        For Each cell In ActiveWorkbook.Sheets("Feuil1").Range("A1:O50")
           cell.Formula = Replace(cell.Formula, "A1", "A2")
        Next
    Merci

  9. #9
    Expert éminent
    Homme Profil pro
    Inscrit en
    Août 2010
    Messages
    3 453
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Août 2010
    Messages : 3 453
    Points : 6 871
    Points
    6 871
    Par défaut
    Bonjour bakman,

    Ceci convient ? Adapte la référence dans la proc Replace (ici B1 et B2) :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
    Sub Test()
     
        Dim Plage As Range
        Dim Cel As Range
     
        Set Plage = Worksheets("Feuil1").[A1:O50]
     
        For Each Cel In Plage
           Cel.Formula = Replace(Cel.Formula, "B1", "B2")
        Next Cel
     
    End Sub
    Hervé.

  10. #10
    Membre régulier
    Homme Profil pro
    Inscrit en
    Octobre 2007
    Messages
    270
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Octobre 2007
    Messages : 270
    Points : 123
    Points
    123
    Par défaut
    j'ai remarque qu'il faut que je mette .formulaLocal pour que ca fonctionne mais par contre sur un grand nombe de cellules c'est très lourd comme méthode.
    j'ai alors décidé d'enregistré une marco voila ce que ca donne
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    Cells.Replace What:=");31)>", Replacement:=")+1;0)>", LookAt:=xlPart, _
            SearchOrder:=xlByRows, MatchCase:=False, SearchFormat:=False, _
            ReplaceFormat:=False
    si je lui deande le me remplace A1 par A2 ca marche impek mais par contre pour remplacer ");31)>" par ")+1;0)>" il ne fait rien je soupçonne le même problème qu'avec le formulaLocal mais ou le placer dans la macro

  11. #11
    Expert éminent
    Homme Profil pro
    Inscrit en
    Août 2010
    Messages
    3 453
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Août 2010
    Messages : 3 453
    Points : 6 871
    Points
    6 871
    Par défaut
    Bonjour,

    Je ne suis pas sûr qu'un FormulaLocal soir nécessaire, il faudrait que tu montre une des formules à modifier pour voir comment elle est construite. J'ai fait un test de remplacement et ça fonction, le remplacement a bien été fait.

    Hervé.

    Bonsoir bakman,

    Effectivement, ça ne marche pas sur une formule aussi complexe, il va falloir te résoudre à utiliser ce que je t'ai posté en remplaçant "Cel.Formula" par "Cel.FormulaLocal". C'est plus lent mais ça marche et je pense que tu ne fait pas des modifs en permanence sur tes formules ?

    Hervé.

  12. #12
    Expert éminent
    Avatar de MarcelG
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juillet 2009
    Messages
    3 449
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 67
    Localisation : France, Maine et Loire (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Finance

    Informations forums :
    Inscription : Juillet 2009
    Messages : 3 449
    Points : 7 149
    Points
    7 149
    Billets dans le blog
    7
    Par défaut simplification
    Bonsoir la Forum,

    Pour casefayere,


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    Sub Test()
    Dim I As Integer
     
    For I = 1 To Range("A" & Rows.Count).End(xlUp).Row
       Range("A" & I).Formula = Replace(Range("A" & I).Formula, "B2", "B3")
       Range("A" & I).Copy
       Range("A" & I).PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
          :=False, Transpose:=False
    Next I
    End Sub
    Je me permets de proposer cette simplification

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    Sub Test2()
    Dim I As Integer
     
    For I = 1 To Range("A" & Rows.Count).End(xlUp).Row
        With Range("A" & I)
            .Formula = Replace(.Formula, "B2", "B3")
            .Value = .Value
        End With
    Next I
    End Sub
    Outre l'instruction with qui n'apporte pas grand chose, on peut noter que le collage special valeur d'une cellule avec formule sur elle-même, peut se coder

    C'est une astuce de silkyroad ou mercatog, je crois.
    Court et pratique.

  13. #13
    Membre régulier
    Homme Profil pro
    Inscrit en
    Octobre 2007
    Messages
    270
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Octobre 2007
    Messages : 270
    Points : 123
    Points
    123
    Par défaut
    Non effectivement je ne vais pas changé mes formules très souvent! mais le pourquoi de ma requette c'est que je développe un utilitaire de mise à jour et correction de bug d'une appli excel, cette appli est utilisé par une bonne cinquantaine de personne. A raison en moyenne de 3 fichiers par personnes ca fait beaucoup de modif . Et c'est vraiment un problème car il faut que je modifie des formule sur plusieurs feuille et le fichiers et très lourd si je lance cette macro juste pour changer les formules de la colonne N 10min après la macro n'a pas fini alors qu'il faut que je corrige le problème de N à HX
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    For Each cell In ActiveWorkbook.Sheets("Feuil1").Range("N:N")
           cell.FormulaLocal = Replace(cell.FormulaLocal , ");31)>", ")+1;0)>"
        Next
    Je suis plus trop comment faire là
    MERCI

  14. #14
    Expert éminent
    Avatar de MarcelG
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juillet 2009
    Messages
    3 449
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 67
    Localisation : France, Maine et Loire (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Finance

    Informations forums :
    Inscription : Juillet 2009
    Messages : 3 449
    Points : 7 149
    Points
    7 149
    Billets dans le blog
    7
    Par défaut
    Bonjour Darkman, Bonjour le Forum,

    A mon avis, ta macro connaît un temps d'exécution ssez long du fait qu'elle balaye toute ta colonne N.

    Il te faut définir d'abord ton champ d'intervention.

    Je te propose

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    Public Sub ESSAI()
    Dim celform As Range, c As Range
    'Recherche de la dernière ligne informée
    derlign = Range("N" & Rows.Count).End(xlUp).Row
    Set celform = Sheets("Feuil1").Range("N2:N" & derlign)
    'Balayage des Formules et remplacement
    For Each c In celform
        c.FormulaLocal = Replace(c.FormulaLocal, ");31)>", ")+1;0)>")
    Next c
    Set celform = Nothing
    End Sub
    Cela dit,

    Personnellement, je n'apprécie pas le balayage de chaque cellule d'un objet Range.

    En utilisant la référence L1C1, il te audrait regarder si l'emploi de la méthode (forme matricielle) ne serait pas plus performante, vu la dimension du champ concerné. Je pense que oui.

    L'aide en ligne te donnera un exemple.

  15. #15
    Membre expérimenté Avatar de mayekeul
    Inscrit en
    Août 2005
    Messages
    1 369
    Détails du profil
    Informations forums :
    Inscription : Août 2005
    Messages : 1 369
    Points : 1 665
    Points
    1 665
    Par défaut
    bonjour,

    pour gagner du temps
    tu peux faire comme ceci simplement

    en prenant le code de MarcelG comme référence
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    Public Sub ESSAI()
    Dim celform As Range, c As Range, derlign
     
    Application.Calculation = xlCalculationManual
     
    'Recherche de la dernière ligne informée
    derlign = Range("N" & Rows.Count).End(xlUp).Row
    Set celform = Sheets("Feuil1").Range("N2:N" & derlign)
    'Balayage des Formules et remplacement
    For Each c In celform
        c.FormulaLocal = Replace(c.FormulaLocal, ";4", ";3")
    Next c
    Set celform = Nothing
     
     
    Application.Calculation = xlCalculationAutomatic
     
    End Sub
    sinon, il recalcule à chaque fois que tu change une cellule

  16. #16
    Membre régulier
    Homme Profil pro
    Inscrit en
    Octobre 2007
    Messages
    270
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Octobre 2007
    Messages : 270
    Points : 123
    Points
    123
    Par défaut
    Merci beaucoup par contre comment puis-je intégrer la référence L1C1 pour effectuer les changement dans toute ma feuille?

  17. #17
    Membre averti
    Profil pro
    Inscrit en
    Mai 2008
    Messages
    364
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2008
    Messages : 364
    Points : 350
    Points
    350
    Par défaut
    Bonsoir

    et ainsi ?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    Public Sub ESSAI()
        Dim c As Range
     
        Application.Calculation = xlCalculationManual
        For Each c In Sheets("Feuil1").Cells.SpecialCells(xlCellTypeFormulas)
            c.Replace What:=");31)>", Replacement:=")+1;0)>"
        Next
        Application.Calculation = xlCalculationAutomatic
     
    End Sub

  18. #18
    Membre régulier
    Homme Profil pro
    Inscrit en
    Octobre 2007
    Messages
    270
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Octobre 2007
    Messages : 270
    Points : 123
    Points
    123
    Par défaut
    Je vous remercie tous pour votre contribution! à bientot

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Macro automatique pour rechercher/remplacer
    Par Flaguette dans le forum VBA Word
    Réponses: 16
    Dernier message: 13/05/2020, 13h32
  2. [Toutes versions] créer une macro " rechercher remplacer "
    Par christiandu10 dans le forum Excel
    Réponses: 27
    Dernier message: 04/07/2015, 09h20
  3. macro rechercher/remplacer sur toutes les feuilles
    Par gti64 dans le forum Macros et VBA Excel
    Réponses: 6
    Dernier message: 03/03/2015, 11h25
  4. Macro rechercher remplace multiple
    Par supai dans le forum Macros et VBA Excel
    Réponses: 1
    Dernier message: 19/02/2010, 08h34
  5. Macro de recherche/remplace automatique
    Par phil011 dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 12/08/2007, 11h00

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo