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
    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.
  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
      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
      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
        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