thyphonfalcon
Messages postés41Date d'inscriptionvendredi 27 octobre 2006StatutMembreDernière intervention12 mai 2007
-
21 nov. 2006 à 21:26
mortalino
Messages postés6786Date d'inscriptionvendredi 16 décembre 2005StatutMembreDernière intervention21 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 ?
mortalino
Messages postés6786Date d'inscriptionvendredi 16 décembre 2005StatutMembreDernière intervention21 décembre 201118 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"
<!--
mortalino
Messages postés6786Date d'inscriptionvendredi 16 décembre 2005StatutMembreDernière intervention21 décembre 201118 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
thyphonfalcon
Messages postés41Date d'inscriptionvendredi 27 octobre 2006StatutMembreDernière intervention12 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.
thyphonfalcon
Messages postés41Date d'inscriptionvendredi 27 octobre 2006StatutMembreDernière intervention12 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.
thyphonfalcon
Messages postés41Date d'inscriptionvendredi 27 octobre 2006StatutMembreDernière intervention12 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) <> " " 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 ?
mortalino
Messages postés6786Date d'inscriptionvendredi 16 décembre 2005StatutMembreDernière intervention21 décembre 201118 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
thyphonfalcon
Messages postés41Date d'inscriptionvendredi 27 octobre 2006StatutMembreDernière intervention12 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
thyphonfalcon
Messages postés41Date d'inscriptionvendredi 27 octobre 2006StatutMembreDernière intervention12 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"