Trouver les doublons dans un Textbox

Résolu
thyphonfalcon Messages postés 41 Date d'inscription vendredi 27 octobre 2006 Statut Membre Dernière intervention 12 mai 2007 - 21 nov. 2006 à 21:26
mortalino Messages postés 6786 Date d'inscription vendredi 16 décembre 2005 Statut Membre Dernière intervention 21 décembre 2011 - 21 nov. 2006 à 23:34
Bonjour,

Je remonte un texte via le port com d'un outils d'inventaire. Jusque là pas de problème mais j'aimerai analyser le fichier texte
que j'affiche dans un textbox et recopier dans un autre textbox toutes les lignes identiques.

Je dois dire que là, je sèche un peu. Quelqu'un peut me dire comment trouver les lignes identiques dans un textbox et les
copier dans un autre textbox ?

Merci d'avance

Thyphon

(Je suis sous VB6)

14 réponses

mortalino Messages postés 6786 Date d'inscription vendredi 16 décembre 2005 Statut Membre Dernière intervention 21 décembre 2011 18
21 nov. 2006 à 22:01
Salut,

essaie comme ceci, pour le tester, j'ai ouvert un nouveau projet, inséré 2 ListBox :

Private Sub Form_Load()
        Dim cCol As New Collection, i As Integer
        
    With List1
        .AddItem "un"
        .AddItem "deux"
        .AddItem "trois"
        .AddItem "quatre"
        .AddItem "cinq"
        .AddItem "un"
        .AddItem "un"
        .AddItem "deux"
        .AddItem "cinq"
        .AddItem "cinq"
    End With
    
On Error Resume Next
    For i = 0 To List1.ListCount - 1
        cCol.Add List1.List(i), CStr(List1.List(i))
        If Err.Number = 457 Then List2.AddItem List1.List(i)
    Next i
    
    Set cCol = Nothing
    Err.Clear
On Error GoTo 0
End Sub

--Mortalino-- 

@++

<hr size="2" width="100%" />
  --Mortalino--
Le mystérieux chevalier, "Provençal, le Gaulois"
<!--
3
mortalino Messages postés 6786 Date d'inscription vendredi 16 décembre 2005 Statut Membre Dernière intervention 21 décembre 2011 18
21 nov. 2006 à 23:09
J'ai pas testé mais essaie ce code, il a pour but de lire toute ta textbox, de faire des split tout les sauts de lignes, afin de trier que les 12 derniers caractères de chaque lignes :

        Dim cCol As New Collection, cCol2 As New Collection
        Dim i As Integer
        Dim sSplitListe() As String, sTempString As String
        
    sSplitListe =  Split(txtEdition.Text, vbCrLf)
    
On Error Resume Next
    For i = 0 To UBound(sSplitListe)
        sTempString = Right(sSplitListe(i), 12)
        cCol.Add sTempString, sTempString
        If Err.Number = 457 Then
            Err.Clear
            cCol2.Add sTempString, sTempString
            If Not Err.Number = 457 Then List2.AddItem sTempString: Err.Clear
        End If
    Next i
    
    Set cCol = Nothing
    Set cCol2 = Nothing
    Erase sSplitListe
    Err.Clear
On Error GoTo 0

~<small> Mortalino </small>~

@++

<hr width ="100%" size="2" />
  --Mortalino--
Le mystérieux chevalier, "Provençal, le Gaulois"
/DIV>
3
jmfmarques Messages postés 7666 Date d'inscription samedi 5 novembre 2005 Statut Membre Dernière intervention 22 août 2014 27
21 nov. 2006 à 21:43
Si tes lignes sont réelles (séparées par un vbcrlf), pas de problème :

tu utilises split en te servant des vbcrlf
0
thyphonfalcon Messages postés 41 Date d'inscription vendredi 27 octobre 2006 Statut Membre Dernière intervention 12 mai 2007
21 nov. 2006 à 21:50
En fait je remonte un texte d'une application dos (un GUN infrarouge que l'on utilise pour les inventaires)

çà donne ceci

AMMMMM21/11/200600:05:480ETB00ME10009010100001
AMMMMM21/11/200600:05:480ETB00ME10009010100002
AMMMMM21/11/200600:05:480ETB00ME10009010100009
AMMMMM21/11/200600:05:480ETB00ME10009010100004
AMMMMM21/11/200600:05:480ETB00ME10009010100005
AMMMMM21/11/200600:05:480ETB00ME10009010100006
AMMMMM21/11/200600:05:480ETB00ME10009010100007
AMMMMM21/11/200600:05:480ETB00ME10009010100038
AMMMMM21/11/200600:05:480ETB00ME10009010100009
AMMMMM21/11/200600:05:480ETB00ME10009010100010
AMMMMM21/11/200600:05:480ETB00ME10009010100021
AMMMMM21/11/200600:05:480ETB00ME10009010100045
AMMMMM21/11/200600:05:480ETB00ME10009010100038

D'abitude j'importe dans excel et je fais mes bidouilles mais j'aimerai bien avoir un état avant l'exportation vers excel
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
thyphonfalcon Messages postés 41 Date d'inscription vendredi 27 octobre 2006 Statut Membre Dernière intervention 12 mai 2007
21 nov. 2006 à 22:15
Bonjour,

Je teste çà de suite et je te dis ce qu'il en résulte

Mais déjà merci beaucoup pour la réponse

Thyphon
0
thyphonfalcon Messages postés 41 Date d'inscription vendredi 27 octobre 2006 Statut Membre Dernière intervention 12 mai 2007
21 nov. 2006 à 22:29
Ca correspond pas vraiment à mes attentes. Mais Il y a de l'idée dans ce code qui viens de titiller mes cellules grises !!
En fait il recopie le mot de la list 1 dans la list2 chaque fois qu'il le rencontre. Je vais essayé de l'adapter à
mes deux textbox. Sachant que dans mon cas les données sont existantes au départ.

Je vais, sur l'action d'un bouton, recopier uniquement les données du textbox1 vers le textbox2 en me basant sur ton exemple.

Merci Chevalier, je posterai dans un exemple de source la solution dès que possible.
0
mortalino Messages postés 6786 Date d'inscription vendredi 16 décembre 2005 Statut Membre Dernière intervention 21 décembre 2011 18
21 nov. 2006 à 22:43
Je m'y attendais, je regarde ça, avec 2 collections, c'est faisable.
Je te tiens au courant dans 5 min.

@++

<hr width="100%" size="2" />
  --Mortalino--
Le mystérieux chevalier, "Provençal, le Gaulois"
/DIV>
0
thyphonfalcon Messages postés 41 Date d'inscription vendredi 27 octobre 2006 Statut Membre Dernière intervention 12 mai 2007
21 nov. 2006 à 22:43
En fait je vais faire autre chose même. La structure du document remonté est toujours la même sauf les 12 dernières position qui sont des chiffres correspondants à un code barre.

Je vais donc faire une recherche sur les 12 derniers numéros de chaque ligne et recopier uniquement les numéros identiques.

Voilà
0
thyphonfalcon Messages postés 41 Date d'inscription vendredi 27 octobre 2006 Statut Membre Dernière intervention 12 mai 2007
21 nov. 2006 à 22:44
Mais j'attends quand même ta prochaine trouvaille ;-)
0
thyphonfalcon Messages postés 41 Date d'inscription vendredi 27 octobre 2006 Statut Membre Dernière intervention 12 mai 2007
21 nov. 2006 à 22:51
un truc du genre me semble t'il pourrait fonctionner

For i = Len(Text1.Text) To 1 Step -1
    If Mid(Text1.Text, i, 1) &lt;&gt; " " Then MsgBox Mid(Text1.Text, i, 1): Exit For
Next i

Ici c'est la dernière position qui est affichée et le résultat donné dans une message box...mais çà c'est pas un soucis.
J'ettends ma sélection au 12 derniers chiffres et je place le résultat (si le même) dans un autre textbox.

Sauf que j'ai pas le commande comparative sur les lignes...ici je ne travaille qu'une chaine de caractère...mais je suis sur la voie !! enfin je crois tu en penses quoi ?
0
mortalino Messages postés 6786 Date d'inscription vendredi 16 décembre 2005 Statut Membre Dernière intervention 21 décembre 2011 18
21 nov. 2006 à 22:55
Je connais pas tes besoins mais voici ce que je te propose, peu importe le nombre de données dans chaqque List :

        Dim cCol As New Collection, cCol2 As New Collection
        Dim i As Integer
        
    With List1
        .AddItem "un"
        .AddItem "deux"
        .AddItem "trois"
        .AddItem "quatre"
        .AddItem "cinq"
        .AddItem "un"
        .AddItem "un"
        .AddItem "deux"
        .AddItem "cinq"
        .AddItem "cinq"
    End With
    
On Error Resume Next
    For i =  0 To List1.ListCount - 1
        cCol.Add List1.List(i), CStr(List1.List(i))
        If Err.Number = 457 Then
            Err.Clear
            cCol2.Add List1.List(i), CStr(List1.List(i))
            If Not Err.Number = 457 Then List2.AddItem List1.List(i): Err.Clear
        End If
    Next i
    
    Set cCol = Nothing
    Set cCol2 = Nothing
    Err.Clear
On Error GoTo 0

~<small> Mortalino </small>~

@++

<hr width ="100%" size="2" />
  --Mortalino--
Le mystérieux chevalier, "Provençal, le Gaulois"
/DIV>
0
thyphonfalcon Messages postés 41 Date d'inscription vendredi 27 octobre 2006 Statut Membre Dernière intervention 12 mai 2007
21 nov. 2006 à 22:57
si je raccourcis, voilà ce qu'il me donne sur ma dernière ligne de texte

MsgBox Right(txtEdition.text, 12)

résultat : 009010100038

Donc j'ai bien mes 12 derniers chiffres. mais de la dernière ligne uniquement.

Maintenant je dois soit, remonter à la première ligne, soit commencer d'en haut.
et comparer les résultats ligne à ligne.....mwais je me rends compte en le disant que j'aurai plus vite fait avec mon exportation sous excel lol !!!

LEs idées ce n'est pas ce qui manque...pffffffffffffff
0
thyphonfalcon Messages postés 41 Date d'inscription vendredi 27 octobre 2006 Statut Membre Dernière intervention 12 mai 2007
21 nov. 2006 à 23:27
Tu veux que je te dise.....Chapeau bat  !!

Alors là, je suis sur le c....ça fonctionne nickel..... J'ai placé une listbox en lieu et place d'une textbox pour recevoir le résultat et
boum....les doublons ce sont affichés.......Sincérement un grand merci pour le temps passé là dessus

Fais en une source,poste là  car franchement là c'est nickel..

Je te remercie encore une fois pour ce BrainStorming  Mortalino Le mystérieux chevalier, "Provençal, le Gaulois"

Thyphon
0
mortalino Messages postés 6786 Date d'inscription vendredi 16 décembre 2005 Statut Membre Dernière intervention 21 décembre 2011 18
21 nov. 2006 à 23:34
De rien, ça fait plaisir.
"Fais en une source"  >> beh c'est déjà fait et toi qui aime bien bosser avec Excel, peut-être en auras-tu l'utilité ?
Au cas où : http://www.vbfrance.com/codes/TRIEUR-DOUBLONS_38162.aspx

Bonne continuation !

@++





<hr width="100%" size="2" />

  --Mortalino--
Le mystérieux chevalier, "Provençal, le Gaulois"
/DIV>
0
Rejoignez-nous