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 :

Comparaison de deux cellules Textes [XL-2010]


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Nouveau membre du Club
    Homme Profil pro
    Ingénieur Supply Chain
    Inscrit en
    Février 2018
    Messages
    49
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Ingénieur Supply Chain
    Secteur : Industrie

    Informations forums :
    Inscription : Février 2018
    Messages : 49
    Points : 31
    Points
    31
    Par défaut Comparaison de deux cellules Textes
    Bonjour,

    J'aimerai faire une comparaison entre deux cellules qui contiennent un texte, mais j'arrive pas à le faire.
    Exemple : Je veux vérifier que la cellule C3 qui contient le mot JANVIER qui est en Gras égal à la cellule C20 qui contient le mot janvier comme je viens de l'écrire.
    La condition se réalise pour moi que quand les deux cellules contiennent le mot JANVIER en Gras et en MAJISCULE, ou bien l'inverse.
    Voici mon Script VBA :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    If Worksheets("Test").Range("C3").Text = Worksheets("Test").Range("C20").Text Then
            MsgBox "Vrai"
        Else
            MsgBox "Faux"
    End If
    N.B : Le Code que je vous est montré n'est qu'un test pour moi.

    Merci

  2. #2
    Membre expérimenté

    Homme Profil pro
    linux, pascal, HTML
    Inscrit en
    Mars 2002
    Messages
    649
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 75
    Localisation : Belgique

    Informations professionnelles :
    Activité : linux, pascal, HTML
    Secteur : Enseignement

    Informations forums :
    Inscription : Mars 2002
    Messages : 649
    Points : 1 493
    Points
    1 493
    Billets dans le blog
    1
    Par défaut
    bonjour
    avec
    UCase() cela devait aller mieux

  3. #3
    Expert éminent sénior Avatar de Menhir
    Homme Profil pro
    Ingénieur
    Inscrit en
    Juin 2007
    Messages
    16 037
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Finistère (Bretagne)

    Informations professionnelles :
    Activité : Ingénieur
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2007
    Messages : 16 037
    Points : 32 866
    Points
    32 866
    Par défaut
    Il y a plusieurs informations que tu ne précises pas :
    Est-ce que la mise en majuscule reflète le contenu saisi dans la cellule ou est-ce obtenu par Format ?
    La mise en gras concerne-t-elle toutes la cellule ou est-ce le texte à l'intérieur qui a été mis en gras ?

    En supposant que les majuscules ont été saisies ainsi et que le gras est un format de cellule :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    If Worksheets("Test").Range("C3").Text = Worksheets("Test").Range("C20").Text And _
       Worksheets("Test").Range("C3").Font.Bold = Worksheets("Test").Range("C20").Font.Bold Then
            MsgBox "Vrai"
        Else
            MsgBox "Faux"
    End If

  4. #4
    Nouveau membre du Club
    Homme Profil pro
    Ingénieur Supply Chain
    Inscrit en
    Février 2018
    Messages
    49
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Ingénieur Supply Chain
    Secteur : Industrie

    Informations forums :
    Inscription : Février 2018
    Messages : 49
    Points : 31
    Points
    31
    Par défaut
    Menhir, J'aimerai que la vérification se fait et soit valide si cette cellule contient le mot janvier, peut importe qu'elle soit en majuscule en gras ou avec une autre taille.
    Pour mon cas, c'est la cellule qui est en gras.

    Merci.

  5. #5
    Expert éminent

    Homme Profil pro
    Curieux
    Inscrit en
    Juillet 2012
    Messages
    5 138
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Curieux
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Juillet 2012
    Messages : 5 138
    Points : 9 972
    Points
    9 972
    Billets dans le blog
    5
    Par défaut
    Bonjour,

    plutôt que de manipuler des UCASE(), préfixe ton module avec

    ainsi, les comparaisons de chaînes seront insensibles à la casse

    attention, les lettres accentuées ne seront pas détectées, il faut passer par une fonction personnalisée.

    de même les espaces devant et derrière le mot peuvent parasiter, on optera pour la fonction VBA.Trim()


    Ce qui va donner par exemple cette proposition :

    - une fonction pour supprimer les accents
    - une fonction qui va comparer deux cellules
    - une procédure qui va appeler la fonction de comparaison

    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
    50
    51
    52
    53
    Option Compare Text
     
    Sub traitement()
     
    ' Range("A1") contient le mot "février"
    ' Range("A2") contient le mot "FeVRIER"
     
     
    ' renverra "VRAI"
    MsgBox CellulesIdentiques(Range("A1"), Range("A2"))
     
    ' Range("A3") contient le mot "fevrier "  avec un espace à la fin
    ' Range("A4") contient le mot "février"
     
    ' renverra "VRAI"
    MsgBox CellulesIdentiques(Range("A3"), Range("A4"))
     
    End Sub
     
     
    Function CellulesIdentiques(Cellule1 As Range, Cellule2 As Range) As Boolean
        CellulesIdentiques = VBA.Trim(Sans_accent(Cellule1.Text)) = VBA.Trim(Sans_accent(Cellule2.Text))
    End Function
     
     
     
    Function Sans_accent(chaine As String) As String  ' R. Dezan + Michel Pierron || adaptée et commentée par D. IBKA
    ' remplacement des caractères accentués par leur équivalent sans accent
     
     Dim ListeDesAccents As String
     Dim ListeSansAccent As String
     Dim i As Integer
     Dim u As Integer
     
     ' on va utiliser deux listes de correspondance (avec et sans accent)
     ' chaque caractère accentué a une position définie dans la liste des accents
     ' son équivalent sans accent a la même position dans la liste sans accent
     ListeDesAccents = "ÀÁÂÃÄÅÈÉÊËÌÍÎÏÑÒÓÔÕÖÙÚÛÜÝàáâãäåèéêëìíîïðñòóôõöùúûüýÿ"
     ListeSansAccent = "AAAAAAEEEEIIIINOOOOOUUUUYaaaaaaeeeeiiiionooooouuuuyy"
     
     
     ' pour chaque caractère de la chaine testée
     For i = 1 To Len(chaine)
        ' on cherche si le caractère fait partie de la liste des caractères accentués
        u = InStr(1, ListeDesAccents, Mid(chaine, i, 1), 0)
        ' si c'est le cas, on le remplace par son équivalent non accentué
        If u Then
            Mid(chaine, i, 1) = Mid(ListeSansAccent, u, 1)
        End If
     Next i
     ' on retrouve à la fin : une chaîne convertie sans les accents
     Sans_accent = chaine
    End Function
    Bien entendu, à adapter et à sécuriser (notamment vérifier que Cellule1 et Cellule2 sont bien des cellules unitaires)

  6. #6
    Expert éminent sénior Avatar de Menhir
    Homme Profil pro
    Ingénieur
    Inscrit en
    Juin 2007
    Messages
    16 037
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Finistère (Bretagne)

    Informations professionnelles :
    Activité : Ingénieur
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2007
    Messages : 16 037
    Points : 32 866
    Points
    32 866
    Par défaut
    Citation Envoyé par Ihaben Voir le message
    Je veux vérifier que la cellule C3 qui contient le mot JANVIER qui est en Gras égal à la cellule C20 qui contient le mot janvier comme je viens de l'écrire.
    La condition se réalise pour moi que quand les deux cellules contiennent le mot JANVIER en Gras et en MAJISCULE, ou bien l'inverse.
    Citation Envoyé par Ihaben Voir le message
    J'aimerai que la vérification se fait et soit valide si cette cellule contient le mot janvier, peut importe qu'elle soit en majuscule en gras ou avec une autre taille.
    Tes demandes sont contradictoires.
    Je ne m'y intéresserai que lorsque tu l'auras précisée clairement.

  7. #7
    Nouveau membre du Club
    Homme Profil pro
    Ingénieur Supply Chain
    Inscrit en
    Février 2018
    Messages
    49
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Ingénieur Supply Chain
    Secteur : Industrie

    Informations forums :
    Inscription : Février 2018
    Messages : 49
    Points : 31
    Points
    31
    Par défaut
    Menhir, voila ce que je veux "J'aimerai que la vérification se fait et soit valide si cette cellule contient le mot janvier, peut importe qu'elle soit en majuscule en gras ou avec une autre taille."
    Par ce que la cellule référence sur laquelle la vérification sera basé, sera en majuscule et en gras "JANVIER", mais l'autre cellule sera personalisé par l'utilisateur.

  8. #8
    Expert éminent sénior Avatar de Menhir
    Homme Profil pro
    Ingénieur
    Inscrit en
    Juin 2007
    Messages
    16 037
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Finistère (Bretagne)

    Informations professionnelles :
    Activité : Ingénieur
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2007
    Messages : 16 037
    Points : 32 866
    Points
    32 866
    Par défaut
    Citation Envoyé par Ihaben Voir le message
    J'aimerai que la vérification se fait et soit valide si cette cellule contient le mot janvier, peut importe qu'elle soit en majuscule en gras ou avec une autre taille.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    If InStr("JANVIER", UCase(Worksheets("Test").Range("C3").Text)) > 0 Then
            MsgBox "Vrai"
        Else
            MsgBox "Faux"
    End If

  9. #9
    Nouveau membre du Club
    Homme Profil pro
    Ingénieur Supply Chain
    Inscrit en
    Février 2018
    Messages
    49
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Ingénieur Supply Chain
    Secteur : Industrie

    Informations forums :
    Inscription : Février 2018
    Messages : 49
    Points : 31
    Points
    31
    Par défaut
    Merci pour vos propositions, mais j'ai trouvé une solution plus optimale.
    Le code suivant permet de mettre automatiquement le texte saisi en Majuscule pour une feuille Excel en utilisant la fonction Ucase.
    Comme ça, moi je peux faire la comparaison entre la cellule base qui est en majuscule et les autres cellulles qui seront maintenant avec ce code en majuscule automatiquement.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    Private Sub Worksheet_SelectionChange(ByVal Target As Range)
     
    Dim Plage As Range
    Dim Cell As Range
     
    Set Plage = Range("J2:J2000")
     
    For Each Cell In Plage
     Cell = UCase(Cell)
     Next
    End Sub

  10. #10
    Expert éminent

    Homme Profil pro
    Curieux
    Inscrit en
    Juillet 2012
    Messages
    5 138
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Curieux
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Juillet 2012
    Messages : 5 138
    Points : 9 972
    Points
    9 972
    Billets dans le blog
    5
    Par défaut
    Bonjour,

    donc si tu acceptes de rejeter (à tort) le mois de "février" (avec accent) ou "janvier " (avec un espace parasite), la discussion est effectivement résolue avec ton code .... même si un simple

    faisait rigoureusement le même travail sans devoir convertir l'ensemble de tes chaînes dans une boucle chronophage

  11. #11
    Nouveau membre du Club
    Homme Profil pro
    Ingénieur Supply Chain
    Inscrit en
    Février 2018
    Messages
    49
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Ingénieur Supply Chain
    Secteur : Industrie

    Informations forums :
    Inscription : Février 2018
    Messages : 49
    Points : 31
    Points
    31
    Par défaut
    Joe, je vais essayer de mettre en place le code que tu m'avais proposé pour supprimer les accents aussi.
    Le problème que j'ai maintenant avec le code que j'avais mis dans ma réponse précedente, c'est que Excel prends beaucoup de temps pour exécuter le macro VBA.

  12. #12
    Expert éminent sénior Avatar de Menhir
    Homme Profil pro
    Ingénieur
    Inscrit en
    Juin 2007
    Messages
    16 037
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Finistère (Bretagne)

    Informations professionnelles :
    Activité : Ingénieur
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2007
    Messages : 16 037
    Points : 32 866
    Points
    32 866
    Par défaut
    Citation Envoyé par Ihaben Voir le message
    Merci pour vos propositions, mais j'ai trouvé une solution plus optimale.
    Je vois difficilement comment on pourrait qualifier de "optimale" une macro qui, à chaque clic dans une feuille Excel, va remettre systématiquement à jour 20000 cellules...
    Ca va sérieusement alourdir l'utilisation de la feuille.

    Surtout pour créer une action qui existe déjà par défaut comme commande dans le ruban Accueil.

  13. #13
    Expert éminent sénior Avatar de Menhir
    Homme Profil pro
    Ingénieur
    Inscrit en
    Juin 2007
    Messages
    16 037
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Finistère (Bretagne)

    Informations professionnelles :
    Activité : Ingénieur
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2007
    Messages : 16 037
    Points : 32 866
    Points
    32 866
    Par défaut
    Citation Envoyé par Ihaben Voir le message
    Menhir, j'avais fais l'essai sur une cellule au début et j'ai vue que ça fonctionnait, mais par la suite je me suis rendus compte que c'est compliqué pour 2000 cellules.
    Et là je suis entrain de chercher s'il y a une fonction qui permettra d’accélérer le macro.
    Tu commences par passer l'existant en majuscules (puisque c'est à priori ce que tu souhaites) en lançant une seule fois ta macro (et ensuite tu la supprimes ou, au moins, tu changes son nom) pour qu'elle ne soit plus activée systématiquement.

    Ensuite, tu fais en sorte que les nouvelles données saisies soient systématiquement en majuscules avec une macro plus light comme :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    Private Sub Worksheet_Change(ByVal Target As Range)
       If (Not Target.Column = 10) Or Target.Count > 1 Then Exit Sub
       Target.Value = UCase(Target.Value)
    End Sub
    Tout ce que tu saisiras ou copieras en colonne J passera en majuscule.

  14. #14
    Nouveau membre du Club
    Homme Profil pro
    Ingénieur Supply Chain
    Inscrit en
    Février 2018
    Messages
    49
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Ingénieur Supply Chain
    Secteur : Industrie

    Informations forums :
    Inscription : Février 2018
    Messages : 49
    Points : 31
    Points
    31
    Par défaut
    Merci Menhir.

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

Discussions similaires

  1. comparaison de deux fichiers textes avec un script python
    Par zekruss dans le forum Général Python
    Réponses: 1
    Dernier message: 10/11/2009, 05h52
  2. comparaison de deux cellules
    Par bosk1000 dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 03/03/2009, 20h18
  3. Probleme de comparaison entre deux cellules identiques
    Par GlamIS dans le forum Macros et VBA Excel
    Réponses: 4
    Dernier message: 04/07/2008, 14h50
  4. comparaison de deux cellules
    Par khayate dans le forum VB.NET
    Réponses: 6
    Dernier message: 03/08/2007, 14h55
  5. comparaison de deux fichiers textes
    Par chmaichel dans le forum Delphi
    Réponses: 1
    Dernier message: 28/07/2006, 11h35

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