Importation de données d'un fichier txt sous condition

13sinistres-mini.txt (265.00 Octets)

Bonjour à tous,

J'ai besoin de votre aide.

Je souhaite savoir si il est possible de requêter sur un fichier txt à partir de vba.

Je m'explique j'ai un fichier txt avec comme séparateur un espace, je souhaiterais extraire uniquement les lignes où par exemple le CODE_PRODUIT(ma colonne 3) est égal à 152 et me les mettre en forme dans une feuille excel. Je ne peux pas importer tout mon fichier car c'est un fichier très volumineux de base(+ de 4 millions de lignes).

Je vous mets en pj un extrait de mon fichier txt.

Merci d'avance de votre aide.

Bonjour à tous !

Une proposition via Power Query :

Remarque : Merci de préciser, dans votre profil, la nature de votre produit Excel (2010 ? 2016 ? 365 ? Etc...)

Bonjour JFL,

Merci pour ta proposition qui fonctionne très bien, mais je voulais savoir si c'était possible de faire la même chose en vba? Comme Power Query n'est pas compatible avec toutes les versions d'excel, je voulais essayer de le faire en vba.

Ps: j'ai bien pris en compte ta remarque, je viens de modifier mon profil, merci.

Bonjour à tous de nouveau !

Pour l'usage VBA, je laisse la main aux spécialistes du forum !

D'accord pas de soucis, si je peux me permettre de t'embêter encore un peu sur Power Query comme je m'y connais pas du tout, je voulais savoir si c'était possible de mettre en dynamique le code_produit c'est-à-dire si on change dans la cellule C4 le numéro de produit, est-ce-qu'on peut avoir les lignes correspondantes en sorti?

Merci d'avance de prendre le temps de m'aider.

Je viens de me rendre compte que le fichier que tu m'as envoyé le fait peut-être déjà mais je n'arrive pas à le faire fonctionner car je n'ai pas la même version que toi d'Excel.

Bonjour à tous de nouveau !

Je viens de me rendre compte que le fichier que tu m'as envoyé le fait peut-être déjà mais je n'arrive pas à le faire fonctionner car je n'ai pas la même version que toi d'Excel.

Comme indiqué dans ma proposition, si une source (Code produit ou fichier) évolue, il est nécessaire d'actualiser les données pour une prise ne compte par Power Query.

Avez-vous un message d'erreur ? Si oui, lequel.

Oui je m'en suis rendue compte et j'essaie de refaire ce que tu as fais de mon côté mais j'y arrive pas ce qui n'est pas étonnant puisque je connaissais pas Power Query avant que tu m'en parles. En fait j'ai modifié le chemin de mon fichier texte dans ton fichier et si j'actualise tout cela me donne ce message d'erreur :

Requêtes < sinistres-mini > (étape < AutoRemovedColumns1 >) référence d'autres requêtes ou étapes et ne peut donc pas accéder directement à une source de données. Reconstruisez cette combinaison de données.

ce qui est normal car il n'arrive pas à charger la source de données j'ai l'impression.

Mais si cela ne te dérange pas je préfèrerais comprendre comment tu as fais pour faire le fichier. En fait moi j'arrive à sortir le tableau mais pas à le mettre en dynamique c'est-à-dire que je vais dans Données -> Nouvelle requête -> A partir d'un fichier -> A partir d'un fichier texte et là je fais mes modifs puis je fais fermer et charger et je voulais savoir comment tu fais pour mettre en dynamique le code produit et le chemin du fichier. Désolée de la longueur du message.

Parce que

Bonjour à tous de nouveau !

Pour le message d'erreur voir ici !

Pour prendre connaissance des différentes requêtes (et des traitements appliqués), il est nécessaire d'ouvrir l'éditeur Power Query. Pour ce faire : Clic droit dans le tableau retourné par Power Query puis "Table..../ ....Modifier la requête".
Les différentes requêtes sont à gauche de la fenêtre. Les étapes d'une requête sont à droite.

Bonjour,

Essaie la macro :

Sub test()
  Dim Fichier As String, Enrgt As String, Ligne As Long
  Fichier = "d:\Users\dcola\Downloads\sinistres-mini.txt"
  Open Fichier For Input As #1
    Do While Not EOF(1)
      Line Input #1, Enrgt
      If Split(Enrgt, " ")(2) = 152 Then
        Ligne = Ligne + 1
        Cells(Ligne, 1) = Split(Enrgt, " ")(0)
        Cells(Ligne, 2) = Split(Enrgt, " ")(1)
        Cells(Ligne, 3) = Split(Enrgt, " ")(2)
      End If
    Loop
  Close #1
End Sub

En changeant le chemin du fichier.

Daniel

Merci JFL pour ton aide, ça fonctionne bien.

Bonjour DanielC, merci pour ton code qui fonctionne parfaitement, à l'exception que cela ne m'affiche pas les noms de mes colonnes. Sais-tu ce qu'il faut rajouter?

Merci de ton aide.

Bonjour à tous de nouveau !

Je vous remercie de ce retour.

Essaie :

Sub test()
  Dim Fichier As String, Enrgt As String, Ligne As Long
  Fichier = "d:\Users\dcola\Downloads\sinistres-mini.txt"
  Open Fichier For Input As #1
    Do While Not EOF(1)
      Line Input #1, Enrgt
      If Split(Enrgt, " ")(2) = 152 Or Ligne = 0 Then
        Ligne = Ligne + 1
        Cells(Ligne, 1) = Split(Enrgt, " ")(0)
        Cells(Ligne, 2) = Split(Enrgt, " ")(1)
        Cells(Ligne, 3) = Split(Enrgt, " ")(2)
      End If
    Loop
  Close #1
End Sub

Daniel

Merci beaucoup, c'est parfait !

Rechercher des sujets similaires à "importation donnees fichier txt condition"