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 :

Récupérer la plus grande chaîne de caractères commune [XL-2010]


Sujet :

Macros et VBA Excel

  1. #21
    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 073
    Points
    12 073
    Billets dans le blog
    8
    Par défaut re
    bonjour puré de puré

    voila un fichier xls simple

    il y a une sub "truc" pour remplir la colonne sur 10000 cellules au hasard avec des "A" en nombre aléatoire + un chiffre au hasard

    et une sub "test" qui va te donner la chaine commune la plus longue en moins de 1 seconde sur 10000 lignes

    la sub test utilise la fonction que je t'ai donné précédemment

    je le dit haut et fort vous ne ferez jamais mieux qu'avec un regex


    fait moi plaisir test cela et si cela t'intéresse je peut t'expliquer chaque ligne de code

    ps: Robert j'aime bien ton nouveau pseudo comme ca on t'embêtera plus avec ca

    fichier en pièce jointe
    Fichiers attachés Fichiers attachés
    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

  2. #22
    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 073
    Points
    12 073
    Billets dans le blog
    8
    Par défaut re
    re
    demo
    Nom : demo2.gif
Affichages : 152
Taille : 307,5 Ko
    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

  3. #23
    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 073
    Points
    12 073
    Billets dans le blog
    8
    Par défaut
    re
    je rajoute même une précision

    si vous voulez que la chaine prise en compte commence par le début
    il faut mettre l'argument " " a join pour espacer les chaines et mettre "/s" au début du pattern
    voila

    si la chaine peut comporter plus de 5 caractères (lettres) et plus de 5 caractères chiffres) alors augmenter les limites des boucles for

    Bon je viens de télécharger ton zip et a ma grande surprise je découvre ton vrai besoins

    alors je rejoins Marc qui au début t'a conseiller le split et autre fonction string

    non mais sérieux !!!!! ca n'a rien a voir avec ce que tu demande tout du moins pourquoi passer par la ?????????

    en gros tu cherche le code dans la chaine de col A pour le mettre en B

    qu'est ce qui t' a pris d'aller chercher a comparer la présence multiple ou pas ca sert strictement a rien du tout !!!!!!!!!

    voila 1 ligne qui fait la meme chose

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Function Domaine(txt As String) As String
        Domaine = Split(Split(txt, "- ")(1), " ")(1)
    End Function
    d'autant plus que tes code sont formatés pareil!!!!!
    une chaine un nombre un tiret une ou plusieur lettres

    des fois j'te jure!!!!!!
    2 heure de colle après les classes ca t'apprendras !!!!

    au cas ou tu comprendrais pas la ligne

    traduction:
    Domaine = Split(Split(txt, "- ")(1), " ")(1)

    rouge= coupe la partie qui suit l'espace et le tiret
    vert= garde la partie qui est avant le premier espace du rouge
    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

  4. #24
    Expert éminent sénior Avatar de mercatog
    Homme Profil pro
    Inscrit en
    Juillet 2008
    Messages
    9 435
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Autre

    Informations forums :
    Inscription : Juillet 2008
    Messages : 9 435
    Points : 31 877
    Points
    31 877
    Par défaut
    Sur le fichier exemple, les données sont bien formatées pour utiliser les fonctions basiques d'Excel

    exemple:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    =STXT(A2;TROUVE("- ";A2)+3;TROUVE("-M";A2;TROUVE("- ";A2))-TROUVE("- ";A2)-3)
    Cordialement.
    J'utilise toujours le point comme séparateur décimal dans mes tests.

  5. #25
    Membre régulier
    Homme Profil pro
    Inscrit en
    Février 2012
    Messages
    273
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Février 2012
    Messages : 273
    Points : 91
    Points
    91
    Par défaut
    Citation Envoyé par dysorthographie Voir le message
    ceci dit tu as raison c'est hyper long!

    Pièce jointe 221838
    Chez moi ça fait planté excel ( "en attente de réponse") pendant plusieurs minutes.

    Citation Envoyé par patricktoulon Voir le message
    Bon je viens de télécharger ton zip et a ma grande surprise je découvre ton vrai besoins

    alors je rejoins Marc qui au début t'a conseiller le split et autre fonction string

    non mais sérieux !!!!! ca n'a rien a voir avec ce que tu demande tout du moins pourquoi passer par la ?????????

    en gros tu cherche le code dans la chaine de col A pour le mettre en B

    qu'est ce qui t' a pris d'aller chercher a comparer la présence multiple ou pas ca sert strictement a rien du tout !!!!!!!!!

    voila 1 ligne qui fait la meme chose

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Function Domaine(txt As String) As String
        Domaine = Split(Split(txt, "- ")(1), " ")(1)
    End Function
    d'autant plus que tes code sont formatés pareil!!!!!
    une chaine un nombre un tiret une ou plusieur lettres

    des fois j'te jure!!!!!!
    2 heure de colle après les classes ca t'apprendras !!!!
    Justement je ne souhaite pas m'appuyé sur un caractère présent en A. (s'il vient à disparaître ma fonction serait obsolète et je souhaite que la solution sois durable.)

  6. #26
    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 073
    Points
    12 073
    Billets dans le blog
    8
    Par défaut re
    re
    bonjour Mercatog
    oui absolument c'est la même chose en formule
    j'hallucine complètement je n'arrive pas a comprendre comment il a pu en arriver a la conclusion de devoir faire Paris Brest pour aller en Italie manger des tortellinis
    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

  7. #27
    Membre régulier
    Homme Profil pro
    Inscrit en
    Février 2012
    Messages
    273
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Février 2012
    Messages : 273
    Points : 91
    Points
    91
    Par défaut
    Citation Envoyé par mercatog Voir le message
    Sur le fichier exemple, les données sont bien formatées pour utiliser les fonctions basiques d'Excel

    exemple:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    =STXT(A2;TROUVE("- ";A2)+3;TROUVE("-M";A2;TROUVE("- ";A2))-TROUVE("- ";A2)-3)
    Même réponse que précédemment, je ne souhaite pas appuyer sur un caractère pour trouver ma chaîne.

  8. #28
    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 073
    Points
    12 073
    Billets dans le blog
    8
    Par défaut
    Justement je ne souhaite pas m'appuyé sur un caractère présent en A. (s'il vient à disparaître ma fonction serait obsolète et je souhaite que la solution sois durable.)
    et alors???????????

    si tes codes sont formater par tiret + espace +(une ou plusieur lettre )+(un ou plusieur chiffre) un tiret +(un ou plusieur lettre) + espace , ca matchera toujours !!!!!!!

    la bonne blague c'est le principe du regex sans regex

    durable !????? et ben dis donc il y a du chemin

    si tu va encore ajouter des cellule avec formule faisant appel a des fonctions perso comme la tienne dans ton app tu va avoir heu....... une définition légèrement différente de la notre du mot "attente"

    pense conception!!! avant
    ou je veux aller et comment en dépensant le moins d'énergie en économisant pas bécane de façon a aller le plus loin et cela ca passe par une bonne compréhension de son environnement

    sérieux
    12.45 seconde pour 300 lignes c'est tout bonnement pas possible tu le comprends bien

    en plus a y regarder de plus prêt c'est pire que ce que je croyais

    tu a un autre sheets avec justement ces références (code)
    pourquoi alors ne pas utiliser find tout simplement avec argument(xlpart)

    juste par ce que je m'amuse avec ce truc
    voila la même chose avec le regex
    tu constatera que je ne teste null part une cel a une autre c'est pas la peine

    tu constatera aussi que certain de tes codes (produit/prestation) ne sont pas tout a fait formater pareil et bien mon reg les prends quand même
    a noter que tu peut tester X pattern dans la même fonction
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    Function Domaine(txt As String) As Variant
        Dim Matches, ReG
        Set ReG = CreateObject("VBScript.RegExp")
        With ReG
            .Global = True: .Pattern = "(  )(\D+)+[(\d+)|(\D+)]+[/|-]+(\D+)": .IgnoreCase = True
            Set Matches = .Execute(txt)
            Domaine = Split(Trim(Matches(0)), " ")(0)
        End With
        Set ReG = Nothing
    End Function
    fait moi plaisir teste et dis moi que ca dure 12 secondes
    elle va plaire a unparia celle la

    allez une derniere en cadeau
    je reprend exactement ton principe mais dans une variable tableau
    ca accélère un peu chez moi 1.7 seconde pour la feuille
    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
    Function Domaine(Description As String)
           Dim i As Long, cara As Long, tableau As Variant
        With Feuil9: tableau = .Range(.Cells(2, 1), .Cells(.Rows.Count, 1).End(xlUp)).Value: End With ' on recupere la colonne dans tableau 2 dim
        tableau = Application.Transpose(Application.Index(tableau, , 1)) 'on transforme tableau 2 dim en array(1 dim)
        'Debug.Print Join(tableau, ",")'juste pour controler( facultatif)
        cara = 0
        For i =1 To UBound(tableau)
            If Description Like "*" & tableau(i) & "*" Then
                If Len(tableau(i)) > cara Then
                    cara = Len(tableau(i))
                    Domaine = tableau(i)
                End If
            End If
        Next
    End Function
    et allez encore une!!!
    celle ci respecte ta conception aussi mais j'ai fait Peter le besoin de récursivité

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    Function Domaine(Description As String)
           Dim i As Long, cara As Long, tableau As Variant
        With Feuil9: tableau = .Range(.Cells(2, 1), .Cells(.Rows.Count, 1).End(xlUp)).Value: End With ' on recupere la colonne dans tableau 2 dim
        tableau = Application.Transpose(Application.Index(tableau, , 1)) 'on transforme tableau 2 dim en array(1 dim)
        'Debug.Print Join(tableau, ",")'juste pour controler( facultatif)
        c = ""
        For i = 1 To UBound(tableau)
            If Len(Replace(Description, tableau(i), "")) <> Len(Description) Then
            If Len(tableau(i)) > Len(c) Then c = tableau(i)
           End If
        Next
    Domaine = c
    End Function
    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

  9. #29
    Membre régulier
    Homme Profil pro
    Inscrit en
    Février 2012
    Messages
    273
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Février 2012
    Messages : 273
    Points : 91
    Points
    91
    Par défaut
    Citation Envoyé par patricktoulon Voir le message
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    Function Domaine(txt As String) As Variant
        Dim Matches, ReG
        Set ReG = CreateObject("VBScript.RegExp")
        With ReG
            .Global = True: .Pattern = "(  )(\D+)+[(\d+)|(\D+)]+[/|-]+(\D+)": .IgnoreCase = True
            Set Matches = .Execute(txt)
            Domaine = Split(Trim(Matches(0)), " ")(0)
        End With
        Set ReG = Nothing
    End Function
    Le résultat obtenu n'est pas correct car il n’appartient pas à ma table de validation. exemple PLUM23-M au lei de PLUM23


    Pour les deux dernières solutions elles fonctionnent parfaitement toute les deux, je ne vois pas de différence de rapidité d’exécution entre les deux.

    par contre je ne comprends pas comment fonctionne la dernière solution.

    Laquelle serait la mieux?

    Citation Envoyé par patricktoulon Voir le message
    et alors???????????

    pense conception!!! avant
    ou je veux aller et comment en dépensant le moins d'énergie en économisant pas bécane de façon a aller le plus loin et cela ca passe par une bonne compréhension de son environnement

    C'est exactement pour quoi je viens sur ce forum, parce que la plus part du temps j'arrive à faire des trucs qui fonctionnent mais ce n'est pas optimisé. Ça me permet d'apprendre et de poser moins de questions bête la prochaine fois.

  10. #30
    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 073
    Points
    12 073
    Billets dans le blog
    8
    Par défaut re
    re
    par contre je ne comprends pas comment fonctionne la dernière solution.
    qu'est ce que tu comprends pas?
    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

  11. #31
    Membre régulier
    Homme Profil pro
    Inscrit en
    Février 2012
    Messages
    273
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Février 2012
    Messages : 273
    Points : 91
    Points
    91
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Len(Replace(Description, tableau(i), "")) <> Len(Description)
    Je suppose que c'est ça qui compare la cellule au tableau mais je ne comprend pas comment.

  12. #32
    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 073
    Points
    12 073
    Billets dans le blog
    8
    Par défaut reponse au post 29
    Bonjour
    en réponse au post 29
    j'ai supprimé les "-M" je pensait avant d'avoir vu ton zip qu'il faisait parti du code

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    Function Domaine(txt As String) As Variant
        Dim Matches, ReG
        Set ReG = CreateObject("VBScript.RegExp")
        With ReG
            .Global = True: .Pattern = "(  )(\D+)+[(\d+)|(\D+)]+[/|-]+(\D+)": .IgnoreCase = True
            Set Matches = .Execute(txt)
            Domaine = Split(Trim(Matches(0)), "-")(0)
        End With
        Set ReG = Nothing
    End Function
    comprends tu pourquoi c'est plus rapide ??
    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. #33
    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 073
    Points
    12 073
    Billets dans le blog
    8
    Par défaut re
    Citation Envoyé par Mrfreeze117 Voir le message
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Len(Replace(Description, tableau(i), "")) <> Len(Description)
    Je suppose que c'est ça qui compare la cellule au tableau mais je ne comprend pas comment.
    traduction

    if Len(Replace(Description, tableau(i), "")) <> Len(Description) then

    sila longueur de chaine description avec le remplacement de tableau(i) par rien est diférente de la longeur de chaine description alors

    en effet si tu fait
    replace("totoettiti","toto","") forcement la longueur de la chaine est différente

    par contre si tu fait

    replace("totoettiti","tutu","") la longueur de chaine ne changera pas puisque il a aucun replacement

    voila

    mais entre nous la plus rapide c'est le regex su tu comprends pas pourquoi je peux t'expliquer
    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

  14. #34
    Membre émérite
    Inscrit en
    Octobre 2010
    Messages
    1 401
    Détails du profil
    Informations forums :
    Inscription : Octobre 2010
    Messages : 1 401
    Points : 2 684
    Points
    2 684
    Par défaut
    Citation Envoyé par Mrfreeze117 Voir le message
    J'ai trouvé ça comme 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
    Function Domaine(Description As String)
        Dim cell As Range
        Dim Derli_dom As Long, i As Long, cara As Long
     
        Derli_dom = Feuil9.Columns(1).Find("*", , , , , xlPrevious).Row
        cara = 0
        For i = 2 To Derli_dom
            If Description Like "*" & Feuil9.Range("A" & i).Value & "*" Then
                If Len(Feuil9.Range("A" & i).Value) > cara Then
                    cara = Len(Feuil9.Range("A" & i).Value)
                    Domaine = Feuil9.Range("A" & i).Value
                End If
            End If
        Next
     
    End Function
    Qu'en pensez-vous?
    Ca semble fonctionner comme tu le souhaites.

    L'usage d'un tableau peut l'accelerer sensiblement.

    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
    Function Domaine(Description As String)
     
        Dim Derli_dom As Long, i As Long, cara As Long
        Dim t
     
        Derli_dom = Feuil9.Columns(1).Find("*", , , , , xlPrevious).Row
     
        t = Feuil9.Range(Feuil9.Cells(1, 2), Feuil9.Cells(Derli_dom, 1))
     
        cara = 0
     
     
        For i = 2 To Derli_dom
     
            'If Description.Value Like "*" & Feuil9.Range("A" & i).Value & "*" Then
            If Description Like "*" & t(i, 1) & "*" Then
                'If Len(Feuil9.Range("A" & i).Value) > cara Then
                If Len(t(i, 1)) > cara Then
     
                    cara = Len(t(i, 1))
     
                    'Domaine = Feuil9.Range("A" & i).Value
                     Domaine = t(i, 1)
     
                End If
            End If
        Next
     
    End Function
    Cordialement

    Docmarti.

  15. #35
    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 073
    Points
    12 073
    Billets dans le blog
    8
    Par défaut re
    bonsoir docmarti
    déjà vu les tableaux a partir du post 28
    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

  16. #36
    Membre émérite
    Inscrit en
    Octobre 2010
    Messages
    1 401
    Détails du profil
    Informations forums :
    Inscription : Octobre 2010
    Messages : 1 401
    Points : 2 684
    Points
    2 684
    Par défaut
    Patrick.

    WOW. Je n'avais pas vu. Super.
    Cordialement

    Docmarti.

  17. #37
    Membre régulier
    Homme Profil pro
    Inscrit en
    Février 2012
    Messages
    273
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Février 2012
    Messages : 273
    Points : 91
    Points
    91
    Par défaut
    Citation Envoyé par patricktoulon Voir le message
    traduction

    if Len(Replace(Description, tableau(i), "")) <> Len(Description) then

    sila longueur de chaine description avec le remplacement de tableau(i) par rien est diférente de la longeur de chaine description alors

    en effet si tu fait
    replace("totoettiti","toto","") forcement la longueur de la chaine est différente

    par contre si tu fait

    replace("totoettiti","tutu","") la longueur de chaine ne changera pas puisque il a aucun replacement

    voila

    mais entre nous la plus rapide c'est le regex su tu comprends pas pourquoi je peux t'expliquer
    Merci je comprends comment celle-ci fonctionne.

    Citation Envoyé par patricktoulon Voir le message

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    Function Domaine(txt As String) As Variant
        Dim Matches, ReG
        Set ReG = CreateObject("VBScript.RegExp")
        With ReG
            .Global = True: .Pattern = "(  )(\D+)+[(\d+)|(\D+)]+[/|-]+(\D+)": .IgnoreCase = True
            Set Matches = .Execute(txt)
            Domaine = Split(Trim(Matches(0)), "-")(0)
        End With
        Set ReG = Nothing
    End Function
    Par contre celle-ci je ne comprends pas un seul morceau, si ce n'est le with.

  18. #38
    Invité
    Invité(e)
    Par défaut
    Bonjour,
    le (RegExp) est un outil très puissant! pour le comprendre il faut mètre les mains dans le cambouis !

    https://www.lucaswillems.com/fr/arti...ons-regulieres

  19. #39
    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 073
    Points
    12 073
    Billets dans le blog
    8
    Par défaut re
    Citation Envoyé par Mrfreeze117 Voir le message
    Merci je comprends comment celle-ci fonctionne.

    Par contre celle-ci je ne comprends pas un seul morceau, si ce n'est le with.
    sous cette forme l'object reg va chercher l'occurrence correspondant a un motif(pattern)
    le motif(patern c'est quoi? c'est l'argument en tre guillemet qui marait n'avoir ni queue ni sens
    (\D+) ca D en majuscule veut dire un ou plusieurs caractere lettre
    (\d+) ca d en minuscule veut dire un ou plusieurs caractere chiffre
    3°[(\d+)|(\D+)] ca veut dire un ou plusieur caractere chiffre et / ou plusieurs caractères lettres
    ( ) ca veut dire un espace
    ([/|-]) ca veut dire un ou plusieurs caractere particulier comme les tirets


    donc dans la fonction on cherche toutes chaine correspondant a ces arguments réunis pas besoins d'en connaitre la valeur

    ce sont les arguments de base et il y en a bien d'autre et d'autre combinaisons
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    Function Domaine(txt As String) As Variant
        Dim Matches, ReG
        Set ReG = CreateObject("VBScript.RegExp")
        With ReG
            .Global = True: .Pattern = "(  )(\D+)+[(\d+)|(\D+)]+[/|-]+(\D+)": .IgnoreCase = True
            Set Matches = .Execute(txt)'les matches sont les occurrences
            Domaine = Split(Trim(Matches(0)), "-")(0)
        End With
        Set ReG = Nothing
    End Function
    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

  20. #40
    Membre régulier
    Homme Profil pro
    Inscrit en
    Février 2012
    Messages
    273
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Février 2012
    Messages : 273
    Points : 91
    Points
    91
    Par défaut
    Merci beaucoup de votre aide Messieurs, je regarderais cela à tête reposé.

+ Répondre à la discussion
Cette discussion est résolue.
Page 2 sur 2 PremièrePremière 12

Discussions similaires

  1. Réponses: 5
    Dernier message: 21/09/2011, 12h43
  2. Récupérer la plus grande valeur (select max)
    Par Johnny English dans le forum Requêtes
    Réponses: 5
    Dernier message: 12/01/2009, 17h46
  3. Problème adresse plus grande que 256 caractères
    Par melouille56 dans le forum Macros et VBA Excel
    Réponses: 0
    Dernier message: 04/06/2008, 17h32
  4. Réponses: 2
    Dernier message: 16/04/2007, 12h53
  5. Réponses: 2
    Dernier message: 20/02/2007, 11h29

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