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 deux parties de chaines de texte [XL-2013]


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé
    Profil pro
    Inscrit en
    Septembre 2007
    Messages
    776
    Détails du profil
    Informations personnelles :
    Âge : 55
    Localisation : France, Nord (Nord Pas de Calais)

    Informations forums :
    Inscription : Septembre 2007
    Messages : 776
    Par défaut comparaison deux parties de chaines de texte
    bonjour le phorum

    j'aurai besoin d'un peu d'aide sur une macro qui me permette de comparer des valeurs de chaines
    j'ai utilisé ces deux codes voir ci dessous mais je n'ai pas les résultats attendus
    ce code me recherche dans la colonne 5 des éléments communs de la colonne 6 et cela ne convient pas
    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 Test()
     
        Dim PlageCol_1 As Range
        Dim PlageCol_2 As Range
        Dim CelCol_1 As Range
        Dim CelCol_2 As Range
     
        With ActiveSheet
            'à partir de A2 et B2
            Set PlageCol_1 = .Range(.Cells(2, 5), .Cells(.Rows.Count, 5).End(xlUp))
            Set PlageCol_2 = .Range(.Cells(2, 6), .Cells(.Rows.Count, 6).End(xlUp))
        End With
     
        For Each CelCol_2 In PlageCol_2
            Set CelCol_1 = PlageCol_1.Find(CelCol_2, , xlValues, xlPart)
            'inverser OK et KO pour avoir le résultat conforme à l'exemple
            If Not CelCol_1 Is Nothing Then
                CelCol_2.Offset(, 1) = "OK" 'si trouvé
            Else
                 CelCol_2.Offset(, 1) = "KO"
            End If
        Next CelCol_2
    End Sub
    ce code compare les deux chaines mais me retourne uniquement les cellules identiques
    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 Cherche()
    'déclaration des variables :
    Dim Trouve As Range, PlageDeRecherche As Range
    Dim Valeur_Cherchee As String, AdresseTrouvee As String
     
    Set PlageDeRecherche = ActiveSheet.Columns(5)
    '*******************************
    ligne = Cells(Rows.Count, 3).End(xlUp).Row '
    For i = 1 To ligne
     
    If Cells(i, 5).Value Like Cells(i, 6) Then
    Cells(i, 7) = "OK"
    Else
    Cells(i, 7) = "KO"
    End If
     
    Next
    End Sub

    en effet j'aimerai pouvoir avoir une comparaison entre deux chaines qui comportent au moins un mot en commun
    par exemple

    COL1 COL2
    TOTO TATA TATA TITI
    TOTO TOTO
    TITI TOTO
    TOTO TATA TITI TITI

    dans les cas ci dessus, je souhaiterai avoir ok dans la COL3 pour les lignes 1, 2 et 4

    quelqu'un aurait il une idée ?

    merci d'avance

    david

  2. #2
    Modérateur

    Homme Profil pro
    Inscrit en
    Octobre 2005
    Messages
    15 410
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations forums :
    Inscription : Octobre 2005
    Messages : 15 410
    Par défaut
    Bonjour.

    Ici du code qui fait cela :

    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
    Public Function EstSembable(prmCellule1 As Range, prmCellule2 As Range) As Boolean
        Dim result As Boolean: result = False
     
        Dim t1() As String: t1 = Split(prmCellule1.Value, " ")
        Dim t2() As String: t2 = Split(prmCellule2.Value, " ")
     
        Dim m1 As Variant
        Dim m2 As Variant
     
        For Each m1 In t1
     
            For Each m2 In t2
     
                If m1 = m2 Then
                    result = True
                    Exit For
                End If
     
            Next m2
     
            If result = True Then
                Exit For
            End If
     
        Next m1
     
        EstSembable = result
    End Function
    Dans ta colonne 3 il faut que tu mettes Retourne VRAI si les cellules ont au moins un mot en commun et FAUX dans le cas contraire.

    A+
    Vous voulez une réponse rapide et efficace à vos questions téchniques ?
    Ne les posez pas en message privé mais dans le forum, vous bénéficiez ainsi de la compétence et de la disponibilité de tous les contributeurs.
    Et aussi regardez dans la FAQ Access et les Tutoriaux Access. C'est plein de bonnes choses.

  3. #3
    Membre éclairé
    Profil pro
    Inscrit en
    Septembre 2007
    Messages
    776
    Détails du profil
    Informations personnelles :
    Âge : 55
    Localisation : France, Nord (Nord Pas de Calais)

    Informations forums :
    Inscription : Septembre 2007
    Messages : 776
    Par défaut
    Citation Envoyé par marot_r Voir le message
    Bonjour.

    Ici du code qui fait cela :

    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
    Public Function EstSembable(prmCellule1 As Range, prmCellule2 As Range) As Boolean
        Dim result As Boolean: result = False
     
        Dim t1() As String: t1 = Split(prmCellule1.Value, " ")
        Dim t2() As String: t2 = Split(prmCellule2.Value, " ")
     
        Dim m1 As Variant
        Dim m2 As Variant
     
        For Each m1 In t1
     
            For Each m2 In t2
     
                If m1 = m2 Then
                    result = True
                    Exit For
                End If
     
            Next m2
     
            If result = True Then
                Exit For
            End If
     
        Next m1
     
        EstSembable = result
    End Function
    Dans ta colonne 3 il faut que tu mettes Retourne VRAI si les cellules ont au moins un mot en commun et FAUX dans le cas contraire.

    A+
    bonjour marot_r

    j'ai un petit souci avec la fonction
    il me met FAUX dans tous les cas


    david

  4. #4
    Expert confirmé
    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 : 68
    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
    Billets dans le blog
    7
    Par défaut
    Bonjour à vous, bonjour au Forum,

    Peut-être une autre solution.

    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
    Option Explicit
     
    Public Function Estsemblable(lacell1 As Range, lacell2 As Range) As Boolean
     
    Dim sp() As String
    Dim s As Variant
     
    sp = Split(lacell1.Value, " ")
     
    Estsemblable = False
     
    For Each s In sp
            If InStr(lacell2, s) > 0 Then
                    Estsemblable = True
                    Exit For
            End If
    Next s
     
     
    End Function
    Utilisation.
    Menu Formules\Insérer une fonction
    Choisir "fonctions personnalisées".
    Les 2 arguments (range) seront informées dans les zones de texte proposées.

    Ou bien

    Ecrire directement la formule en pointant les 2 cellules à rapprocher

    Ensuite, étirer la formule vers le bas.

  5. #5
    Membre éclairé
    Profil pro
    Inscrit en
    Septembre 2007
    Messages
    776
    Détails du profil
    Informations personnelles :
    Âge : 55
    Localisation : France, Nord (Nord Pas de Calais)

    Informations forums :
    Inscription : Septembre 2007
    Messages : 776
    Par défaut
    Citation Envoyé par MarcelG Voir le message
    Bonjour à vous, bonjour au Forum,

    Peut-être une autre solution.

    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
    Option Explicit
     
    Public Function Estsemblable(lacell1 As Range, lacell2 As Range) As Boolean
     
    Dim sp() As String
    Dim s As Variant
     
    sp = Split(lacell1.Value, " ")
     
    Estsemblable = False
     
    For Each s In sp
            If InStr(lacell2, s) > 0 Then
                    Estsemblable = True
                    Exit For
            End If
    Next s
     
     
    End Function
    Utilisation.
    Menu Formules\Insérer une fonction
    Choisir "fonctions personnalisées".
    Les 2 arguments (range) seront informées dans les zones de texte proposées.

    Ou bien

    Ecrire directement la formule en pointant les 2 cellules à rapprocher

    Ensuite, étirer la formule vers le bas.
    bonjour Marcel
    merci pour ce code
    celui ci compare les mots ou les lettres?
    car j'ai beaucoup de valeur vraies qui ne devraient pas l'être
    ex

    TNP ADRS1
    M DUPUY ROUTE DE MACHAULT
    M SAUVE 21 CHEMIN DE LA GRANDE COMMUNE
    M BOGO XAVIER 55 ROUTE DE MONTEREAU
    M PRADIER 06 DE LA VILLE DE NEMOURS
    M NADIR OU BRUNO 41 AVENUE D ORMESSON
    M E GUETTE 8 R GAUTHIERS LE COUDRAY

  6. #6
    Expert confirmé
    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 : 68
    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
    Billets dans le blog
    7
    Par défaut
    Salut,

    Je répondais à ton premier cas.
    Dans ce dernier, évidemment, le code de marot est le mieux adapté.

    Dans ma fonction, certes, il faudrait alors choisir quelle cellule est elle découpée, mais ce serait source d'erreur.
    Le code de marot est plus généraliste.

  7. #7
    Membre éclairé
    Profil pro
    Inscrit en
    Septembre 2007
    Messages
    776
    Détails du profil
    Informations personnelles :
    Âge : 55
    Localisation : France, Nord (Nord Pas de Calais)

    Informations forums :
    Inscription : Septembre 2007
    Messages : 776
    Par défaut
    marc
    désolé, le code est parfait
    j'ai du faire une fausse manipulation

    toutes mes confuses

    merci encore

  8. #8
    Expert confirmé
    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 : 68
    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
    Billets dans le blog
    7
    Par défaut
    munity,

    Pourrais-tu tester la fonction que j'ai proposée, s'il te plaît.

  9. #9
    Inactif  

    Homme Profil pro
    cuisiniste
    Inscrit en
    Avril 2009
    Messages
    15 374
    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 374
    Billets dans le blog
    8
    Par défaut RE
    re

    je pense que tu précise mal ta demande
    car il y a plusieurs cas de figures

    supposons

    toto | titi toto

    ou

    toto titi | titi

    le principe d'analyse ne sera pas même si tu cherche la col2 dans col1 et/ou inversement

    sinon pour rendre générique la chose
    boucle sur les lignes
    boucle sur les mots de cellule (1 ou 2)
    teste like ou instr sur cellule (1 ou 2)
    et cela qu'importe la quelle colonnes tu prends pour base
    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

  10. #10
    Rédacteur/Modérateur

    Avatar de Jean-Philippe André
    Homme Profil pro
    Architecte Power Platform, ex-Développeur VBA/C#/VB.Net
    Inscrit en
    Juillet 2007
    Messages
    14 682
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : Canada

    Informations professionnelles :
    Activité : Architecte Power Platform, ex-Développeur VBA/C#/VB.Net
    Secteur : Finance

    Informations forums :
    Inscription : Juillet 2007
    Messages : 14 682
    Par défaut
    Salut,

    Patrick, si tu lisais correctement l'intégralité de la demande tu verrais que tes suppositions ont déjà été traitées dans la demande initiale

    par exemple

    COL1 COL2
    TOTO TATA TATA TITI

    dans les cas ci dessus, je souhaiterai avoir ok dans la COL3 pour les lignes 1, 2 et 4
    donc la solution proposée par marot_r est tout à fait valable
    Cycle de vie d'un bon programme :
    1/ ça fonctionne 2/ ça s'optimise 3/ ça se refactorise

    Pas de question technique par MP, je ne réponds pas

    Mes ouvrages :
    Migrer les applications VBA Access et VBA Excel vers la Power Platform
    Apprendre à programmer avec Access 2016, Access 2019 et 2021

    Apprendre à programmer avec VBA Excel
    Prise en main de Dynamics 365 Business Central

    Coffrets disponibles de mes ouvrages : https://www.editions-eni.fr/jean-philippe-andre
    Pensez à consulter la FAQ Excel et la FAQ Access

    Derniers tutos
    Excel et les paramètres régionaux
    Les fichiers Excel binaires : xlsb,

    Autres tutos

  11. #11
    Membre éclairé
    Profil pro
    Inscrit en
    Septembre 2007
    Messages
    776
    Détails du profil
    Informations personnelles :
    Âge : 55
    Localisation : France, Nord (Nord Pas de Calais)

    Informations forums :
    Inscription : Septembre 2007
    Messages : 776
    Par défaut
    Bonsoir
    Merci a tous
    Je mets en place ca demain
    David

  12. #12
    Inactif  

    Homme Profil pro
    cuisiniste
    Inscrit en
    Avril 2009
    Messages
    15 374
    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 374
    Billets dans le blog
    8
    Par défaut re
    bonjour jean Philipe André
    et toi si tu regardais le timeline de nos post tu aurais compris que nous nous sommes croisés avec marot
    quand j'ai ouvert la réponse marot n'avais pas encore répondu
    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

  13. #13
    Rédacteur/Modérateur

    Avatar de Jean-Philippe André
    Homme Profil pro
    Architecte Power Platform, ex-Développeur VBA/C#/VB.Net
    Inscrit en
    Juillet 2007
    Messages
    14 682
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : Canada

    Informations professionnelles :
    Activité : Architecte Power Platform, ex-Développeur VBA/C#/VB.Net
    Secteur : Finance

    Informations forums :
    Inscription : Juillet 2007
    Messages : 14 682
    Par défaut
    Bonjour,
    Que la réponse de René soit bonne n'a pas d'incidence sur le fait que ta remarque sur la demande initiale le soit
    Cycle de vie d'un bon programme :
    1/ ça fonctionne 2/ ça s'optimise 3/ ça se refactorise

    Pas de question technique par MP, je ne réponds pas

    Mes ouvrages :
    Migrer les applications VBA Access et VBA Excel vers la Power Platform
    Apprendre à programmer avec Access 2016, Access 2019 et 2021

    Apprendre à programmer avec VBA Excel
    Prise en main de Dynamics 365 Business Central

    Coffrets disponibles de mes ouvrages : https://www.editions-eni.fr/jean-philippe-andre
    Pensez à consulter la FAQ Excel et la FAQ Access

    Derniers tutos
    Excel et les paramètres régionaux
    Les fichiers Excel binaires : xlsb,

    Autres tutos

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

Discussions similaires

  1. [Débutant] Prendre une chaine de texte entre deux balises d'un code source.
    Par megavigore33 dans le forum VB.NET
    Réponses: 7
    Dernier message: 09/12/2014, 23h05
  2. comparaison deux chaines
    Par infoprogramation dans le forum Débuter
    Réponses: 5
    Dernier message: 07/09/2010, 14h59
  3. Comparaison sur partie d'une chaine de caractère
    Par petit-ours dans le forum SAS Base
    Réponses: 2
    Dernier message: 13/07/2010, 11h24
  4. problème de comparaison deux chaines de caractères
    Par jean sami dans le forum Débuter
    Réponses: 2
    Dernier message: 15/06/2008, 23h47
  5. Comparaison deux chaine de caractère arabe en java
    Par vetchang dans le forum Général Java
    Réponses: 9
    Dernier message: 08/10/2007, 23h53

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