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 :

remplacements caractères avec format ? [XL-2003]


Sujet :

Macros et VBA Excel

  1. #1
    Membre à l'essai
    Profil pro
    Inscrit en
    Janvier 2008
    Messages
    5
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2008
    Messages : 5
    Par défaut remplacements caractères avec format ?
    Bonjour,

    J'utilise une macro trouvée sur le net qui remplace dans ma feuille certains caractères par des autres qui sont stockés dans les cellules N1 à O1 mais je n'arrive pas à copier les formats de ces cellules .

    En fait je voudrais faire apparaitre en gras et rouge ces modifications.
    J'aimerais aussi limiter le remplacement aux colonnes E et F .
    Malgré mes recherches je ne trouve pas et j'ai besoin de votre aide .....

    Ci dessous mon code :
    Merci d'avance.


    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
    19
    Sub remplacement()
     
    Cells.Replace What:="PVA", Replacement:=[N1], LookAt:=xlPart, _
    SearchOrder:=xlByRows, MatchCase:=False, SearchFormat:=False, _
    ReplaceFormat:=False
     
    Cells.Replace What:="KSC", Replacement:=[M1], LookAt:=xlPart, _
    SearchOrder:=xlByRows, MatchCase:=False, SearchFormat:=False, _
    ReplaceFormat:=False
     
    Cells.Replace What:="RTE", Replacement:=[O1], LookAt:=xlPart, _
    SearchOrder:=xlByRows, MatchCase:=False, SearchFormat:=False, _
    ReplaceFormat:=False
     
    Cells.Replace What:="KMT", Replacement:=[P1], LookAt:=xlPart, _
    SearchOrder:=xlByRows, MatchCase:=False, SearchFormat:=False, _
    ReplaceFormat:=False
     
    End Sub

  2. #2
    Membre Expert
    Homme Profil pro
    Retraité
    Inscrit en
    Avril 2011
    Messages
    1 858
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Avril 2011
    Messages : 1 858
    Par défaut
    Bonjour,

    Essaie avec
    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
    19
    20
    21
    22
    23
    24
    25
    26
    Sub remplacement()
    Dim MaPlage As Range
     
        With Application.ReplaceFormat.Font
            .ColorIndex = 3
            .FontStyle = "Bold"
        End With
     
        Set MaPlage = Columns("E:F")
        MaPlage.Replace What:="PVA", Replacement:=[N1], LookAt:=xlPart, _
        SearchOrder:=xlByRows, MatchCase:=False, SearchFormat:=False, _
        ReplaceFormat:=True
     
        MaPlage.Replace What:="KSC", Replacement:=[M1], LookAt:=xlPart, _
        SearchOrder:=xlByRows, MatchCase:=False, SearchFormat:=False, _
        ReplaceFormat:=True
     
        MaPlage.Replace What:="RTE", Replacement:=[O1], LookAt:=xlPart, _
        SearchOrder:=xlByRows, MatchCase:=False, SearchFormat:=False, _
        ReplaceFormat:=True
     
        MaPlage.Replace What:="KMT", Replacement:=[P1], LookAt:=xlPart, _
        SearchOrder:=xlByRows, MatchCase:=False, SearchFormat:=False, _
        ReplaceFormat:=True
     
    End Sub
    Cordialement.

  3. #3
    Membre à l'essai
    Profil pro
    Inscrit en
    Janvier 2008
    Messages
    5
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2008
    Messages : 5
    Par défaut
    Merci gFZT82,

    Cela fonctionne mais il faudrait que seuls les caractères qui ont été remplaçés soient en gras et rouge
    exemple : PCF KSC V2 STD BRUT

    Encore merci de ton aide.

    Cordialement
    Guy

  4. #4
    Membre Expert
    Homme Profil pro
    Retraité
    Inscrit en
    Avril 2011
    Messages
    1 858
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Avril 2011
    Messages : 1 858
    Par défaut
    Mouais , ça change la donne !
    Il me semble plus simple de laisser tomber la méthode Replace.

    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
    19
    20
    21
    22
    23
    24
    25
    Option Base 1
    Option Explicit
    Sub remplacement()
    Dim MaPlage As Range, c As Range
    Dim Liste1, Liste2
    Dim i As Byte, Deb As Byte, Nb As Byte
        Set MaPlage = Columns("E:F")
        Liste1 = Array("PVA", "KSC", "RTE", "KMT")
        Liste2 = Array([N1], [M1], [O1], [P1])
        For i = 1 To UBound(Liste1)
            Set c = MaPlage.Find(Liste1(i), LookIn:=xlValues, lookat:=xlPart)
            If Not c Is Nothing Then
                Do
                    c.Value = Replace(c, Liste1(i), Liste2(i))
                    Deb = InStr(c, Liste2(i))
                    Nb = Len(Liste2(i))
                    With c.Characters(Start:=Deb, Length:=Nb).Font
                        .FontStyle = "bold"
                        .ColorIndex = 3
                    End With
                    Set c = MaPlage.FindNext(c)
                Loop While Not c Is Nothing
            End If
        Next i
    End Sub
    Cordialement.

  5. #5
    Membre à l'essai
    Profil pro
    Inscrit en
    Janvier 2008
    Messages
    5
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2008
    Messages : 5
    Par défaut
    Merci gFZT82,

    Cela commence a être un peu compliqué pour moi .....
    Ma demande initiale était de remplacer parce que je voulais copier le format pour faire ressortir certains mots.
    mais on peut simplifier je pense en modifiant seulement le format des mots recherchés dans "liste1".

    j'ai essayé de modifier le code dans ce sens (voir ci dessous) mais
    cela ne fonctionne pas correctement car la macro boucle sur la ligne
    "Set c = MaPlage.FindNext(c)"

    Merci encore de ton aide
    Cordialement
    Guy


    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
    19
    20
    21
    22
    23
    24
    Sub remplacement1()
     
    Dim MaPlage As Range, c As Range
    Dim Liste1
    Dim i As Byte, Deb As Byte, Nb As Byte
     Set MaPlage = Columns("E")
     
         Liste1 = Array("PVA", "KSC", "RTE", "KMT")
     
        For i = 1 To UBound(Liste1)
            Set c = MaPlage.Find(Liste1(i), LookIn:=xlValues, lookat:=xlPart)
            If Not c Is Nothing Then
                Do
                    Deb = InStr(c, Liste1(i))
                    Nb = Len(Liste1(i))
                    With c.Characters(Start:=Deb, Length:=Nb).Font
                        .FontStyle = "bold"
                        .ColorIndex = 3
                    End With
                    Set c = MaPlage.FindNext(c)
                Loop While Not c Is Nothing
            End If
        Next i
    End Sub

  6. #6
    Membre Expert
    Homme Profil pro
    Retraité
    Inscrit en
    Avril 2011
    Messages
    1 858
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Avril 2011
    Messages : 1 858
    Par défaut
    Bonjour,

    j'ai rajouté la condition c.Address <> FirstAddress pour permettre la sortie de la boucle.
    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
    19
    20
    21
    22
    23
    Sub remplacement1()
    Dim MaPlage As Range, c As Range
    Dim Liste1
    Dim i As Byte, Deb As Byte, Nb As Byte
    Dim FirstAddress As String
        Set MaPlage = Columns("E")
        Liste1 = Array("PVA", "KSC", "RTE", "KMT")
        For i = 0 To UBound(Liste1)
            Set c = MaPlage.Find(Liste1(i), LookIn:=xlValues, lookat:=xlPart)
            If Not c Is Nothing Then
                FirstAddress = c.Address
                Do
                    Deb = InStr(c, Liste1(i))
                    Nb = Len(Liste1(i))
                    With c.Characters(Start:=Deb, Length:=Nb).Font
                        .FontStyle = "bold"
                        .ColorIndex = 3
                    End With
                    Set c = MaPlage.FindNext(c)
                Loop While Not c Is Nothing And c.Address <> FirstAddress
            End If
        Next i
    End Sub
    Cordialement.

  7. #7
    Membre à l'essai
    Profil pro
    Inscrit en
    Janvier 2008
    Messages
    5
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2008
    Messages : 5
    Par défaut
    cela fonctionne impeccablement !!
    merci beaucoup et bon weekend

    Cordialement
    Guy

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

Discussions similaires

  1. Réponses: 1
    Dernier message: 25/03/2014, 14h14
  2. Remplacement de caractères avec un requête
    Par noirot dans le forum Développement
    Réponses: 3
    Dernier message: 26/09/2008, 09h54
  3. Réponses: 7
    Dernier message: 25/04/2008, 22h36
  4. Réponses: 4
    Dernier message: 26/11/2007, 12h25
  5. remplacer une chaine de caractères avec sed
    Par salseropom dans le forum Shell et commandes GNU
    Réponses: 2
    Dernier message: 15/05/2007, 14h56

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