extraire des doublons d'une chaine de caractères

finarobert

XLDnaute Nouveau
Bonjour
J'ai une chaine de caractères qui peut être très longue de type :AZEDZEZSDAZEDZFREZQSSUAAZEDZAAAEZQSSU

je cherche un programme vba pour extraire de cette chaines les doublons (ou plus) d'au moins 5 caractères:
Par exemple dans mon exemple, j'ai 3 fois AZEDZ et 2 fois EZQSSSU
pouvez vous me donner une solution à ce problème?
merci
Boby
 
Solution
Bonsoir
perso 2 boucles imbriquées et un dico tu a ton truc pour 5,6,7,etc....
reste a savoir ce que tu veux faire des chaines de longeur inférieure a d'autres qui sont contenues dans les plus grandes
et cela peut se régler facilement
exemple
VB:
Sub test()
    Dim Dic As Object, A&, B&, Elem, Chaine$

    Chaine = "AZEDZEZSDAZEDZFREZQSSUAAZEDZAAAEZQSSU"

    Set Dic = CreateObject("scripting.dictionary")

    For i = 1 To Len(Chaine)
        For B = 5 To Len(Chaine) - (i - 1)
            Dic(Mid(Chaine, i, B)) = Dic(Mid(Chaine, i, B)) + 1
        Next
    Next
    'lecture du dico
    For Each Elem In Dic
        If Dic(Elem) > 1 Then Debug.Print Elem & "--->" & Dic(Elem)
    Next
End Sub
et on peut transformer ça en fonction et...

Jacky67

XLDnaute Barbatruc
j'ai un problème car e n'ai pas ces fonctions _xlfn
Bonjour,

Une proposition par vba (toute version)
VB:
Sub cinq()
    Dim i&, lig&, tmp
    lig = 1: [b:c].Clear
    For i = 1 To Len([a1])
        If Len(Mid([a1], i, 5)) = 5 Then
            tmp = Split([a1], Mid([a1], i, 5))
            If UBound(tmp) > 1 Then
                If IsError(Application.Match(Mid([a1], i, 5), [b:b], 0)) Then
                    Cells(lig, 2) = Mid([a1], i, 5): Cells(lig, 3) = UBound(tmp)
                    lig = lig + 1
               End If
            End If
        End If
    Next
End Sub
 

Pièces jointes

  • ExtraireV1.xlsm
    25 KB · Affichages: 2
Dernière édition:

mapomme

XLDnaute Barbatruc
Supporter XLD
Re,

Une version v2 :
  • corrigée par rapport à la v1
  • qui colore le texte des doublons pour mieux les repérer (limité à 15 doublons différents)
Le code est dans module1. Cliquer sur le bouton Hop!

nota : la recherche des doublons se fait depuis les chaines de caractères les plus longues jusqu'aux chaines de caractères les plus courtes (soit 5 caractères).

Quand une chaine doublon a été trouvée, on la retire du texte source pour les recherches suivantes.

Ainsi si la chaine "123soleil" est un doublon (x 2) et qu'ensuite on recherche la chaine "soleil", on ne recherchera pas "soleil" à nouveau dans les deux occurrences déjà trouvées "123soleil".
Autrement dit les chaines composants les chaines doublons déjà trouvées ne sont plus pris en compte par les recherches suivantes.

Ainsi pour la chaine 12345soleil---12345--12345soleil-12345toto, on trouvera d'abord le doublon 12345soleil- avec une fréquence de 2 et ensuite le doublon 12345 avec une fréquence de 2 aussi.
On ne trouvera pas 12345 avec une fréquence de 4.

Voir le fichier ICI .
 
Dernière édition:

finarobert

XLDnaute Nouveau
Re,

Une version v2 :
  • corrigée par rapport à la v1
  • qui colore le texte des doublons pour mieux les repérer (limité à 15 doublons différents)
Le code est dans module1. Cliquer sur le bouton Hop!

nota : la recherche des doublons se fait depuis les chaines de caractères les plus longues jusqu'aux chaines de caractères les plus courtes (soit 5 caractères).

Quand une chaine doublon a été trouvée, on la retire du texte source pour les recherches suivantes.

Ainsi si la chaine "123soleil" est un doublon (x 2) et qu'ensuite on recherche la chaine "soleil", on ne recherchera pas "soleil" à nouveau dans les deux occurrences déjà trouvées "123soleil".
Autrement dit les chaines composants les chaines doublons déjà trouvées ne sont plus pris en compte par les recherches suivantes.

Ainsi pour la chaine 12345soleil---12345--12345soleil-12345toto, on trouvera d'abord le doublon 12345soleil- avec une fréquence de 2 et ensuite le doublon 12345 avec une fréquence de 2 aussi.
On ne trouvera pas 12345 avec une fréquence de 4.

Voir le fichier ICI .
MERCI MAPOMME. Coté coloriage ça ne marche pas (indice inexstant) mais l'affichage est bon
par contre je voudrai commencer l'affichage en C3 au lieu de C1 et je ne trouve pas
encore merci!
 

mapomme

XLDnaute Barbatruc
Supporter XLD

finarobert

XLDnaute Nouveau
J'ai tout fermé et c'est ok ensuite. Me reste deux points à vor : j'aimeraii que les résultats n'apparaissent pas sur la ligne 1 pour conserver le code original visible et question 2 : peut on modifier le programme pour que n'apparaisses les doublons que quand ils sont au moins 5 d'affilés sot pour l'exemple :
azertazertazertazertazertyhjuiknbbsdfgqsdfgqsdfgq dans ce cas on n'aurait que azert qui sort puisqu'auu moins 5 fois de suite d'affilé.
encore 1000 fois merci!
 

mapomme

XLDnaute Barbatruc
Supporter XLD
j'aimeraii que les résultats n'apparaissent pas sur la ligne 1 pour conserver le code original visible et question 2 :
Les résultats sont affichés à partir de C3
que n'apparaisses les doublons que quand ils sont au moins 5 d'affilés
Les doublons ne seront comptés que si :
  • la séquence comprend au moins 5 caractères
  • la séquence apparait 5 fois ou plus (soit à la suite soit dispersée au sein du texte source)
Voir le fichier. Les modifications ont été faites rapidement. Vérifier si cela correspond à vos souhaits.
 

Pièces jointes

  • finarobert- Extraire- v2b.xlsm
    25.1 KB · Affichages: 6

finarobert

XLDnaute Nouveau
Les résultats sont affichés à partir de C3

Les doublons ne seront comptés que si :
  • la séquence comprend au moins 5 caractères
  • la séquence apparait 5 fois ou plus (soit à la suite soit dispersée au sein du texte source)
Voir le fichier. Les modifications ont été faites rapidement. Vérifier si cela correspond à vos souhaits.
Merci pour votre travail rapide. J'ai testé vos propositions. Tout est OK mais l'exemple 12345soleil donne 0 alors que je pensais trouver 2 fois 12345soleil. J'ai essayé d'enlever les - mais cela fait pareil. y a t il possibilité de faire apparaitre que si au moins 5 fois à la suite en oubliant les dispersés? Après je ne vous embete plus!
mille fois merci!
 

mapomme

XLDnaute Barbatruc
Supporter XLD
y a t il possibilité de faire apparaitre que si au moins 5 fois à la suite en oubliant les dispersés?
je pense que ça va demander une sérieuse adaptation. On verra tout ça demain. Maintenant dodo 🥱😴 !
Bonne-nuit .
Tired Good Night GIF by Max
 

Discussions similaires

Réponses
2
Affichages
282

Statistiques des forums

Discussions
315 094
Messages
2 116 153
Membres
112 670
dernier inscrit
Flow87