Insertion de certaines lignes de texte vers excel

Résolu
kit24be Messages postés 48 Statut Membre -  
kit24be Messages postés 48 Statut Membre -
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. cs_Le Pivert Messages postés 8437 Statut Contributeur 730
     
    Bonjour,

    Voir ceci:

    http://www.cjoint.com/data3/3LBh0bsQ84g.htm
    0
    1. kit24be Messages postés 48 Statut Membre 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
      0
  2. cs_Le Pivert Messages postés 8437 Statut Contributeur 730
     
    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
    0
  3. cs_Le Pivert Messages postés 8437 Statut Contributeur 730
     
    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/
    
    
    

    0
    1. kit24be Messages postés 48 Statut Membre 1
       
      la macro ne supprime pas toutes les lignes indésirables, ci-joint le fichier texte
      Merci

      https://www.cjoint.com/c/DLBlty6whiT
      0
  4. cs_Le Pivert Messages postés 8437 Statut Contributeur 730
     
    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!
    0
  5. Vous n’avez pas trouvé la réponse que vous recherchez ?

    Posez votre question
  6. cs_Le Pivert Messages postés 8437 Statut Contributeur 730
     
    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
    

    0
    1. kit24be Messages postés 48 Statut Membre 1
       
      Un très grand merci, cela fonctionne très bien.
      0