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 :

mise en surbrillance d'un caractère dans une chaine


Sujet :

Macros et VBA Excel

  1. #1
    Candidat au Club
    Homme Profil pro
    Enseignant
    Inscrit en
    Février 2016
    Messages
    3
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Enseignant

    Informations forums :
    Inscription : Février 2016
    Messages : 3
    Points : 2
    Points
    2
    Par défaut mise en surbrillance d'un caractère dans une chaine
    Bonjour!
    J'ai cherché moi-même, puis dans divers forums, mais je n'ai rien trouvé. Qui peut m'aider?
    En VBA Excel, je veux comparer 2 chaines de caractères et mettre en surbrillance ou en gras, ou en souligné (peu importe) le ou les caractères différents.
    Je ne sais pas faire... Merci pour votre aide!

  2. #2
    Invité
    Invité(e)
    Par défaut
    Bonjour,


    Une solution possible avec cette fonction :

    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
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    Function ComparerLesChaines(ByVal ChaineReference As String, ByVal ChaineAComparer As String) As String
     
    Dim I As Integer
    Dim Substitut As String
    Dim ChaineExacte As Boolean
     
             Application.Volatile
     
             ComparerLesChaines = "Commun : "
             Substitut = "-"
             ChaineExacte = True
     
     
             Select Case Len(ChaineAComparer)
                    Case Is > Len(ChaineReference)
                         For I = 1 To Len(ChaineReference)
                             If Mid(ChaineReference, I, 1) = Mid(ChaineAComparer, I, 1) Then
                                ComparerLesChaines = ComparerLesChaines & Substitut
                             Else
                                ComparerLesChaines = ComparerLesChaines & Mid(ChaineAComparer, I, 1)
                             End If
                         Next I
                         ComparerLesChaines = ComparerLesChaines & "   En trop : " & Mid(ChaineAComparer, Len(ChaineReference) + 1)
                         ChaineExacte = False
                    Case Len(ChaineReference)
                         For I = 1 To Len(ChaineReference)
                             If Mid(ChaineReference, I, 1) = Mid(ChaineAComparer, I, 1) Then
                                ComparerLesChaines = ComparerLesChaines & Substitut
                             Else
                                ComparerLesChaines = ComparerLesChaines & Mid(ChaineAComparer, I, 1)
                                ChaineExacte = False
                             End If
                         Next I
                    Case Is < Len(ChaineReference)
                         For I = 1 To Len(ChaineAComparer)
                             If Mid(ChaineReference, I, 1) = Mid(ChaineAComparer, I, 1) Then
                                ComparerLesChaines = ComparerLesChaines & Substitut
                             Else
                                ComparerLesChaines = ComparerLesChaines & Mid(ChaineAComparer, I, 1)
                            End If
                         Next I
                         ComparerLesChaines = ComparerLesChaines & "   En moins : " & Mid(ChaineReference, Len(ChaineAComparer) + 1)
                         ChaineExacte = False
             End Select
     
             If ChaineExacte = True Then ComparerLesChaines = "Exact"
     
     
    End Function
    Le résultat de la comparaison ne modifie pas la chaîne comparée comme vous le demandiez. En revanche, vous avez le choix de visualiser le résultat dans une cellule les écarts ou de l'utiliser dans un traitement (valeur égale ou différente d' "Exact").
    Le résultat de la chaîne composée du même nombre de caractères est indiqué derrière le mot : "Commun". En cas d'écart en plus ou en moins sur le nombre de caractères, les caractères sont collectés derrière les mots "En trop" ou "En moins".
    Les caractères communs sont remplacés par un caractère de substitution défini en début de fonction.

    Cordialement.

  3. #3
    Candidat au Club
    Homme Profil pro
    Enseignant
    Inscrit en
    Février 2016
    Messages
    3
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Enseignant

    Informations forums :
    Inscription : Février 2016
    Messages : 3
    Points : 2
    Points
    2
    Par défaut
    Merci Kergresse!
    Mais ça n'est pas simple!!!
    Mais ça marche! merci encore.

  4. #4
    Membre confirmé
    Homme Profil pro
    conseiller
    Inscrit en
    Janvier 2013
    Messages
    367
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Vaucluse (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : conseiller
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Janvier 2013
    Messages : 367
    Points : 649
    Points
    649
    Par défaut
    Bonjour,
    à tester, compléter et adapter à ton fichier :
    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
    Sub CompareChaines()
    Dim Pl As Range, i As Long, j As Long
    Set Pl = Range("A11:B" & Range("A" & Rows.Count).End(xlUp).Row) 'plage contenant les valeurs à adapter
    Pl.Columns(2).Font.Bold = False
     
    For i = 1 To Pl.Rows.Count
     
      For j = 1 To Len(Pl.Cells(i, 1))
        If Mid(Pl.Cells(i, 1), j, 1) <> Mid(Pl.Cells(i, 2), j, 1) Then
          Pl.Cells(i, 2).Characters(Start:=j, Length:=1).Font.Bold = True
        End If
      Next j
     
      If Len(Pl.Cells(i, 2)) > Len(Pl.Cells(i, 1)) Then _
      Pl.Cells(i, 2).Characters(Start:=j, Length:=Len(Pl.Cells(i, 2)) - Len(Pl.Cells(i, 1))).Font.Bold = True
    Next i
     
    End Sub
    A+

  5. #5
    Candidat au Club
    Homme Profil pro
    Enseignant
    Inscrit en
    Février 2016
    Messages
    3
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Enseignant

    Informations forums :
    Inscription : Février 2016
    Messages : 3
    Points : 2
    Points
    2
    Par défaut
    Merci Davido84!

  6. #6
    Inactif  

    Homme Profil pro
    cuisiniste
    Inscrit en
    Avril 2009
    Messages
    15 379
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : cuisiniste
    Secteur : Bâtiment

    Informations forums :
    Inscription : Avril 2009
    Messages : 15 379
    Points : 12 075
    Points
    12 075
    Billets dans le blog
    8
    Par défaut heu
    et pour ganier en reactivité on ajoute le test si = dans la boucle j
    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 CompareChaines()
    Dim Pl As Range, i As Long, j As Long
    Set Pl = Range("A11:B" & Range("A" & Rows.Count).End(xlUp).Row) 'plage contenant les valeurs à adapter
    Pl.Columns(2).Font.Bold = False
     
    For i = 1 To Pl.Rows.Count
     
      For j = 1 To Len(Pl.Cells(i, 1))
        if Pl.Cells(i, 1)=Pl.Cells(i, 2) then exit for 
    If Mid(Pl.Cells(i, 1), j, 1) <> Mid(Pl.Cells(i, 2), j, 1) Then
          Pl.Cells(i, 2).Characters(Start:=j, Length:=1).Font.Bold = True
        End If
      Next j
     
      If Len(Pl.Cells(i, 2)) > Len(Pl.Cells(i, 1)) Then _
      Pl.Cells(i, 2).Characters(Start:=j, Length:=Len(Pl.Cells(i, 2)) - Len(Pl.Cells(i, 1))).Font.Bold = True
    Next i
     
    End Sub
    mes fichiers dans les contributions:
    mail avec CDO en vba et mail avec CDO en vbs dans un HTA
    survol des bouton dans userform
    prendre un cliché d'un range

    si ton problème est résolu n'oublie pas de pointer : : ça peut servir aux autres
    et n'oublie pas de voter

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

Discussions similaires

  1. Réponses: 2
    Dernier message: 26/11/2005, 13h44
  2. [VS.net] Vérifier le présence d'un caractère dans une chaine
    Par arnolem dans le forum Windows Forms
    Réponses: 15
    Dernier message: 10/09/2005, 15h19
  3. Recuper un caractère dans une chaine. (novice)
    Par Thierry8 dans le forum Général JavaScript
    Réponses: 4
    Dernier message: 22/08/2005, 09h07
  4. Réponses: 8
    Dernier message: 08/06/2004, 01h29

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