Insertion de certaines lignes de texte vers excel

Résolu
Bonjour,

je voudrais insérer certaines lignes d'un fichier texte qui est trop volumineux , (plus de 1200000 lignes) vers excel exemple de ligne à récupérer :
axw22005-a3,dbg25881_numéro_serie
axw15001-a3,dop25001_quantité
axw21101-a2,dcp25844_poids
je ne dois récupérer que les lignes qui ont comme fin de référence numéro _série, quantité et poids.
Quelqu'un pourrais t' il m'aider.

Merci d' avance

5 réponses

  1. Contributeur
    Bonjour,

    Voir ceci:

    http://www.cjoint.com/data3/3LBh0bsQ84g.htm
    1. Bonjour,
      merci pour la réponse. le programme est rapide mais il ne me sélectionne pas uniquement les références:
      numéro_serie / quantité / poids
      les autres lignes ne doivent pas êtres récupérées ex: quantité1 / quantité2 / poids1 / poids2 / outil1 / outil2 / outil3 etc...

      Merci
  2. Contributeur
    je ne suis pas devin, je ne connais pas ton fichier. il faut être plus explicite dans tes explications.

    Avant de faire les rectifications. Il faut me donner tous les données.
    Par exemple: outil1 / outil2 / outil3 etc... je ne les vois pas dans ton 1er post

    Cela va être compliqué sans toutes les données.

    Tu peux aussi le rectifier toi même en cherchant sur Google:

    Split en vba Excel
    1. Contributeur
      Essaie ceci:

      Option Explicit
      Dim valeur, mot As String
      Dim count As Integer
      Private Sub CommandButton1_Click()
      Importer_texte
      End Sub
      Private Sub CommandButton2_Click()
      For_X_to_Next_Ligne
      End Sub
      Sub For_X_to_Next_Ligne()
      Dim FL1 As Worksheet, Cell As Range, NoCol As Integer
      Dim NoLig As Long
      Dim DernLigne As Long
      DernLigne = Range("A65536").End(xlUp).Row
          'Instance de la feuille qui permet d'utiliser FL1 partout dans
          'le code à la place du nom de la feuille
          Set FL1 = Worksheets("Feuil1")
       'Fixe le N° de la colonne à lire
          NoCol = 1
       'Utilisation du N° de ligne dans une boucle For ... Next
          For NoLig = 1 To DernLigne
              valeur = FL1.Cells(NoLig, NoCol)
      Count_Words 'nombre de mots
      If count > 1 Then
      Break_String
      Select Case mot
      Case Is = "poids"
      Case Is = "numéro"
      Case Is = "quantité"
      Case Else
      'on supprime
       Rows(NoLig & ":" & NoLig).Select
          Selection.Delete Shift:=xlUp
      End Select
      Else
      'on supprime
       Rows(NoLig & ":" & NoLig).Select
          Selection.Delete Shift:=xlUp
      End If
       Next
          Set FL1 = Nothing
      End Sub
      Sub Count_Words()
      Dim WrdArray() As String
      Dim text_string As String
      text_string = valeur
      WrdArray() = Split(text_string, "_")
      count = UBound(WrdArray()) + 1
      End Sub
      Sub Break_String()
      Dim WrdArray() As String
      Dim text_string As String
      text_string = valeur
      WrdArray() = Split(text_string, "_")
      mot = WrdArray(1)
      End Sub
      
      'site à consulter pour split
      'http://www.exceltrick.com/formulas_macros/vba-split-function/
      
      
      

    2. Contributeur
      voilà, avec le fichier c'est plus facile. Les données s'inscrivent dans la colonne B .
      Il y a juste les quantité qui ne sont pas différenciées

      Option Explicit
      Private Declare Sub Sleep Lib "kernel32" (ByVal dwMilliseconds As Long)
      Dim valeur, mot As String
      Dim count As Integer
      Private Sub CommandButton1_Click()
      Importer_texte
      End Sub
      Private Sub CommandButton2_Click()
      For_X_to_Next_Ligne
      End Sub
      Sub For_X_to_Next_Ligne()
      Dim FL1 As Worksheet, Cell As Range, NoCol As Integer
      Dim NoLig As Long
      Dim DernLigne As Long
      DernLigne = Range("A65536").End(xlUp).Row
          'Instance de la feuille qui permet d'utiliser FL1 partout dans
          'le code à la place du nom de la feuille
          Set FL1 = Worksheets("Feuil1")
       'Fixe le N° de la colonne à lire
          NoCol = 1
       'Utilisation du N° de ligne dans une boucle For ... Next
          For NoLig = 1 To DernLigne
              valeur = FL1.Cells(NoLig, NoCol)
      Count_Words 'nombre de mots
      If count > 1 Then
      Break_String
      mot = Left(mot, 5) '5 premier caractères
      Select Case mot
      Case Is = "numér"
      Range("A" & NoLig).Select
            Selection.Copy
          ActiveCell.Offset(0, 1).Select  'sélection cellule  colonne B(0 meme ligne , 1  colonne suivante)
          ActiveSheet.Paste
      Case Is = "quant"
      Range("A" & NoLig).Select
            Selection.Copy
          ActiveCell.Offset(0, 1).Select  'sélection cellule  colonne B(0 meme ligne , 1  colonne suivante)
          ActiveSheet.Paste
          Case Is = "poids"
       Range("A" & NoLig).Select
            Selection.Copy
          ActiveCell.Offset(0, 1).Select  'sélection cellule  colonne B(0 meme ligne , 1  colonne suivante)
          ActiveSheet.Paste
      End Select
      End If
       Next
          Set FL1 = Nothing
      End Sub
      Sub Count_Words()
      Dim WrdArray() As String
      Dim text_string As String
      text_string = valeur
      WrdArray() = Split(text_string, "_")
      count = UBound(WrdArray()) + 1
      End Sub
      Sub Break_String()
      Dim WrdArray() As String
      Dim text_string As String
      text_string = valeur
      WrdArray() = Split(text_string, "_")
      mot = WrdArray(1)
      End Sub
      
      'http://www.exceltrick.com/formulas_macros/vba-split-function/
      
      
      


      Le problème avec split, c'est qu'il sortait:
      poids , 1.52769
      au lieu de poids
      ce qui m'a fait mettre les 5 premier caractères
      pour quantité cela prend toutes les quantités 1,2,3,4 etc.

      J'espère que tu as compris!
      1. Contributeur
        et pour ne garder que les données dans la colonne A, mettre ceci:

        Sub Supprime_lignes_vides()
         Dim I As Long
           For I = ActiveSheet.UsedRange.Rows.count To 1 Step -1
               If Application.CountA(Rows(I)) = 1 Then Rows(I).Delete 'colonne B
           Next I
           Columns("A:A").Delete Shift:=xlToLeft 'colonne A
            Worksheets("Feuil1").Range("A:A").Columns.AutoFit
            End Sub
        Private Sub CommandButton3_Click()
        Supprime_lignes_vides
        End Sub
        

        1. Un très grand merci, cela fonctionne très bien.