Importer données fichier texte excel [Résolu/Fermé]

Signaler
Messages postés
208
Date d'inscription
dimanche 15 juillet 2007
Statut
Membre
Dernière intervention
15 mars 2018
-
ath80
Messages postés
208
Date d'inscription
dimanche 15 juillet 2007
Statut
Membre
Dernière intervention
15 mars 2018
-
Bonjour,

A partir d’un fichier excel, je souhaiterai ouvrir un fichier texte et copier l’ensemble des données dans une feuille.
J’ai commencé la macro en m’appuyant de ce que j’ai trouvé sur internet, voici le lien de mon fichier :
http://www.cjoint.com/c/FBpwa1sf2ma

Ce code à l’air de poser problème : Worksheets("test").QueryTables.Add("TEXT;" & Fichier, [A1]).Refresh

En espérant que vous pourrez m’aider …
Merci d’avance.

Cordialement.

10 réponses

Messages postés
6490
Date d'inscription
jeudi 13 septembre 2007
Statut
Contributeur
Dernière intervention
25 janvier 2020
439
ath80
Messages postés
208
Date d'inscription
dimanche 15 juillet 2007
Statut
Membre
Dernière intervention
15 mars 2018
7 > cs_Le Pivert
Messages postés
6490
Date d'inscription
jeudi 13 septembre 2007
Statut
Contributeur
Dernière intervention
25 janvier 2020

Bonjour,
Merci pour la procédure mais j'avais déjà essayé cette méthode. Lorsque j'appuie sur le bouton, le programme s'éxecute mais il me met une erreur en me disant que la plage de destination doit être sur la même feuille or je souhaite mettre le boutton sur une autre feuille. Voici l'erreur:
Worksheets("PV").QueryTables.Add("TEXT;" & Fichier, [A1]).Refresh 'à adapter

Voici le lien de mon fichier:
http://www.cjoint.com/c/FBrkgiXdY75
cs_Le Pivert
Messages postés
6490
Date d'inscription
jeudi 13 septembre 2007
Statut
Contributeur
Dernière intervention
25 janvier 2020
439 > ath80
Messages postés
208
Date d'inscription
dimanche 15 juillet 2007
Statut
Membre
Dernière intervention
15 mars 2018

Il faut mettre un bouton Formulaire pour que cela fonctionne
cs_Le Pivert
Messages postés
6490
Date d'inscription
jeudi 13 septembre 2007
Statut
Contributeur
Dernière intervention
25 janvier 2020
439
Pour la seconde question je n'ai pas tout compris. Essaie avec cela:

Sub Recup()
Dim DernLigne As Long
DernLigne = Range("A" & Rows.Count).End(xlUp).Row
 Dim Fichier
    Fichier = Application.GetOpenFilename("Text Files (*.txt), *.txt")
    If Fichier <> False Then
    'crée une requête sur le fichier texte et insère les champs
       'dans la feuille "Feuil1" en partant de "A1" à adapter
       Worksheets("Feuil1").QueryTables.Add("TEXT;" & Fichier, Range("A" & DernLigne)).Refresh 'à adapter
        Range("A1:A" & DernLigne).Select
    Selection.Delete Shift:=xlToLeft
   Else
        MsgBox "Pour importer des données dans Excel, vous devez choisir un fichier texte !"
    End If
End Sub


Sinon tu peux essayer avec l'enregistreur de macro, cela fonctionne bien

@+ Le Pivert
ath80
Messages postés
208
Date d'inscription
dimanche 15 juillet 2007
Statut
Membre
Dernière intervention
15 mars 2018
7
Avant d'essayer le code concernant ma deuxième question, je rencontre un petit problème. Hier j'ai testé la solution de ton lien:
http://www.commentcamarche.net/forum/affich-33039694-recuperation-donnees-avec-macro#p33168496

J'ai réussi à la faire fonctionner en appuyant sur la touche F5. Cependant, aujourd'hui j'ai essayé de refaire un classeur avec ce code sur un autre pc et lorsque j'appuie sur F5 la boite de dialogue ne s'éxécute pas.
Voici la fenêtre affichée:
http://image.noelshack.com/fichiers/2016/07/1455704632-capture.png
cs_Le Pivert
Messages postés
6490
Date d'inscription
jeudi 13 septembre 2007
Statut
Contributeur
Dernière intervention
25 janvier 2020
439 > ath80
Messages postés
208
Date d'inscription
dimanche 15 juillet 2007
Statut
Membre
Dernière intervention
15 mars 2018

On se sert de la touche F5 dans l'éditeur par sur la feuille!
Bonjour
si tu peux donne un fichier TXT
A+
Maurice
Messages postés
208
Date d'inscription
dimanche 15 juillet 2007
Statut
Membre
Dernière intervention
15 mars 2018
7
Déjà merci de votre aide.

Ci-dessous, j'ai joint mon fichier:
http://www.cjoint.com/c/FBrkphD13j5

Dans la feuille "PV", on voit comment sont copiées les données. Dans la feuille exemple, on retrouve la manière dont je voudrais qu'elles soient copiées ("Assistant importation de texte" de manière automatique).

Voici un exemple de fichier texte que je voudrais copier:
http://www.cjoint.com/c/FBrkogJqJk5
Messages postés
6490
Date d'inscription
jeudi 13 septembre 2007
Statut
Contributeur
Dernière intervention
25 janvier 2020
439
Voilà le classeur opérationnel:

http://www.cjoint.com/c/FBrnOtYDaiQ
ath80
Messages postés
208
Date d'inscription
dimanche 15 juillet 2007
Statut
Membre
Dernière intervention
15 mars 2018
7
Merci pour le fichier. Je trouve cette méthode plus simple.

Par contre, sais tu copier les données de la même manière que sur la feuille exemple ?Pour chaque ligne du code, je voudrais que les données suivant un espace soient inscrites dans la cellule de droite. En manuel, la fonction utilisée est "Assistant importation de texte".
cs_Le Pivert
Messages postés
6490
Date d'inscription
jeudi 13 septembre 2007
Statut
Contributeur
Dernière intervention
25 janvier 2020
439
Normalement si tu cliques sur Importer texte, ça le fait!
ath80
Messages postés
208
Date d'inscription
dimanche 15 juillet 2007
Statut
Membre
Dernière intervention
15 mars 2018
7
Ça ne fonctionne pas chez moi.
cs_Le Pivert
Messages postés
6490
Date d'inscription
jeudi 13 septembre 2007
Statut
Contributeur
Dernière intervention
25 janvier 2020
439 > ath80
Messages postés
208
Date d'inscription
dimanche 15 juillet 2007
Statut
Membre
Dernière intervention
15 mars 2018

Tu cliques sur Développeur dans le ruban, ensuite en haut à gauche tu cliques sur Enregistrer une macro.
Ensuite tu exécutes la procédure que tu fais habituellement avec "Assistant importation de texte". Quand tu as fini, tu cliques sur Arrêter macro. Tu vas dans l'éditeur dans module à gauche tu as ta macro. Tu la copies et tu la postes. Je l'automatiserais.

pour afficher l'onglet Développeur dans le ruban:

https://support.office.com/fr-fr/article/Afficher-l-onglet-D%C3%A9veloppeur-ou-ex%C3%A9cuter-le-mode-d%C3%A9veloppeur-1b4a8529-3094-432a-9a7f-53935089e5ed
ath80
Messages postés
208
Date d'inscription
dimanche 15 juillet 2007
Statut
Membre
Dernière intervention
15 mars 2018
7
J'avais déjà essayé en enregistrant une macro et j'obtiens uniquement ce code:

Sub Macro1()
Range("A1").Select
ActiveSheet.PasteSpecial Format:="Texte Unicode", Link:=False, _
DisplayAsIcon:=False
End Sub
Messages postés
6490
Date d'inscription
jeudi 13 septembre 2007
Statut
Contributeur
Dernière intervention
25 janvier 2020
439
Bon je l'ai fait, voilà à mettre à la place de l'ancienne:

Option Explicit
Sub Bouton6_Clic()
Dim Fichier
Worksheets("PV").Select
    Fichier = Application.GetOpenFilename("Text Files (*.txt), *.txt")
    If Fichier <> False Then
     With ActiveSheet.QueryTables.Add(Connection:= _
        "TEXT;" & Fichier, Destination:=Range("A1"))
        .Name = "essai"
        .FieldNames = True
        .RowNumbers = False
        .FillAdjacentFormulas = False
        .PreserveFormatting = True
        .RefreshOnFileOpen = False
        .RefreshStyle = xlInsertDeleteCells
        .SavePassword = False
        .SaveData = True
        .AdjustColumnWidth = True
        .RefreshPeriod = 0
        .TextFilePromptOnRefresh = False
        .TextFilePlatform = 850
        .TextFileStartRow = 1
        .TextFileParseType = xlDelimited
        .TextFileTextQualifier = xlTextQualifierDoubleQuote
        .TextFileConsecutiveDelimiter = True
        .TextFileTabDelimiter = True
        .TextFileSemicolonDelimiter = False
        .TextFileCommaDelimiter = False
        .TextFileSpaceDelimiter = True
        .TextFileColumnDataTypes = Array(1, 1, 1, 1, 1, 1, 1)
        .TextFileTrailingMinusNumbers = True
        .Refresh BackgroundQuery:=False
    End With
    Else
        MsgBox "Pour importer des données dans Excel, vous devez choisir un fichier texte !"
    End If
End Sub

ath80
Messages postés
208
Date d'inscription
dimanche 15 juillet 2007
Statut
Membre
Dernière intervention
15 mars 2018
7
Oui justement j'allais répondre, j'ai trouvé la solution. J'ai mis ça pour la fin du code:
.TextFileConsecutiveDelimiter = True
.TextFileTabDelimiter = True
.TextFileSemicolonDelimiter = True
.TextFileCommaDelimiter = True
.TextFileSpaceDelimiter = True
.TextFileOtherDelimiter = ""
.TextFileColumnDataTypes = Array(1, 1, 1, 1, 1, 1, 1, 1, 1, 1)
.TextFileTrailingMinusNumbers = True
.Refresh BackgroundQuery:=False

Merci beaucoup en tout cas !!
Messages postés
208
Date d'inscription
dimanche 15 juillet 2007
Statut
Membre
Dernière intervention
15 mars 2018
7
Bonjour,
J'ai une question qui n'a rien à avoir avec ma question initiale.

Voici mon fichier:
http://www.cjoint.com/c/FBsrqUPk1SR

Le module "programme_principal" pilote l'ensemble des autres modules.
A partir de celui-ci, je supprime l'ancienne feuille "PV". Je vais copier le nouveau fichier dans celle-ci. Dans le module "detection_erreur_pv", je regarde si deux cellules sont vides, j'affiche un message si la condition est vérifiée et dans chacun des cas je voudrais arrêter l'éxécution de l'ensemble des modules. C'est à dire aller à la fin du module "programme_principal" sachant qu'après le call detection_erreur_pv, il y aura d'autres macros.

Comment faire ?
cs_Le Pivert
Messages postés
6490
Date d'inscription
jeudi 13 septembre 2007
Statut
Contributeur
Dernière intervention
25 janvier 2020
439
Avec une variable Boolean déclarée Public pour fonctionner dans tous les modules:

Insérer un module et mettre:

Option Explicit

Public continuer As Boolean


Dans le module Sub detection_erreur_pv() parce que c'est le dernier

Sub detection_erreur_pv()

Sheets("PV").Select

If Cells(8, 3).Value = "" Then MsgBox "Numéro de l'OP manquant"
If Cells(9, 4).Value = "" Then MsgBox "Numéro de l'OP manquant"
continuer = False
End Sub


et dans le module principal:

Sub programme_principal()
Application.ScreenUpdating = False
continuer = True
Call suppression_pv
Call ouverture_pv
Call detection_erreur_pv
Sheets("Synthèse").Select
If continuer = False Then
Exit Sub
Else
'tes macros
End If

End Sub


Tu comprends le principe, après tu fais ta sauce, c'est juste une direction à prendre

@+ Le Pivert
ath80
Messages postés
208
Date d'inscription
dimanche 15 juillet 2007
Statut
Membre
Dernière intervention
15 mars 2018
7
Bonjour,
Merci encore une fois pour ton aide !
http://www.cjoint.com/c/FBtlcJOe4ac

En dessous de else j'ai mis la suite du programme à réaliser s'il ne manque pas de paramètres.

Quand j'importe un fichier avec des paramètres manquants le programme se stoppe par contre quand il y a l'ensemble des paramètres (Cells(8, 3) et Cells(9, 4) le programme se stoppe également.
Dans mon exepemple, s'il ne manque pas de paramètre je voudrais que les étapes suivantes soient réalisées:
Call fermeture

Sheets("Synthèse").Select

J'ai joint un fichier avec paramètre manquant:
http://www.cjoint.com/c/FBtldqVPAzc

et un sans:
http://www.cjoint.com/c/FBtlekqYLzc
cs_Le Pivert
Messages postés
6490
Date d'inscription
jeudi 13 septembre 2007
Statut
Contributeur
Dernière intervention
25 janvier 2020
439
Voilà,

Sub detection_erreur_pv()
Sheets("PV").Select
If Cells(8, 3).Value = "" Then
MsgBox "Numéro de l'OP manquant"
continuer = False
ElseIf Cells(9, 4).Value = "" Then
MsgBox "Numéro de machine manquant"
continuer = False
Else
continuer = True
End If
End Sub


Petite précision, tu n'es pas obligé de mettre chaque macro dans un module différent, tu peux tout mettre dans le même module. Cela permet de faire des déclarations communes a chaque macro en dehors des macros en dessous de Option Explicit. Cela t'évite aussi de faire une déclaration de variable Public. A toi de voir!
Messages postés
26
Date d'inscription
mardi 16 février 2016
Statut
Membre
Dernière intervention
23 février 2016
1
Bonjour.
Je n'ai pas bien compris aussi ta deuxième question. Et le fichier que tu as joint est corrompu. Ajoute de nouveau ton fichier pour que l’on puisse avoir une bonne idée de ta deuxième question.
Merci.
cs_Le Pivert
Messages postés
6490
Date d'inscription
jeudi 13 septembre 2007
Statut
Contributeur
Dernière intervention
25 janvier 2020
439
Bonjour h3ler,

Le fichier n'est pas corrompu, il fonctionne bien; J'ai déjà répondu à la demande

@+ Le Pivert
Messages postés
208
Date d'inscription
dimanche 15 juillet 2007
Statut
Membre
Dernière intervention
15 mars 2018
7
Bonjour,
Ci-joint le fichier modifié:
http://www.cjoint.com/c/FBwnjGlEEJa

Lorsque j'importe un fichier sans erreur l'ensemble du programme est exécuté c'est donc bon par contre quand j'importe un fichier avec des infos manquantes l'ensemble du programme est également exécuté (le module fermeture est exécuté). Je ne comprends pas pourquoi puisque si continuer = false on doit exécuter:
Exit Sub
Messages postés
6490
Date d'inscription
jeudi 13 septembre 2007
Statut
Contributeur
Dernière intervention
25 janvier 2020
439
Cela fonctionne comme indiqué:

Si le fichier est vrai, cela ferme et sélectionne la feuille Synthèse
Si le fichier est faux un message apparaît et le programme s'arrête. Mais on reste sur la feuille où est situé le bouton, c'est à dire le feuille Synthèse.

C'est cela qui te trompe. A moins que tu veuille faire autre chose?
ath80
Messages postés
208
Date d'inscription
dimanche 15 juillet 2007
Statut
Membre
Dernière intervention
15 mars 2018
7
Mon problème est le suivant:
Si le fichier est faux un message apparaît mais le programme ne s'arrête pas. Il continue d'exécuter la fin du programme c'est à dire:
Call fermeture
Sheets("Synthèse").Select

Je souhaiterai qu'il n'exécute pas ces étapes.
cs_Le Pivert
Messages postés
6490
Date d'inscription
jeudi 13 septembre 2007
Statut
Contributeur
Dernière intervention
25 janvier 2020
439
Changer cela dans les 2 modules

Option Explicit
Public continuer As Boolean
Sub detection_erreur_pv()
Sheets("PV").Select
If Cells(8, 3).Value = "" Then
MsgBox "Numéro de l'OP manquant"
continuer = False
ElseIf Cells(9, 4).Value = "" Then
MsgBox "Numéro de machine manquant"
continuer = False
Else
continuer = True
End If
End Sub


Option Explicit
Sub programme_principal()
Application.ScreenUpdating = False
Call suppression_pv 'continuer = true
Call ouverture_pv 'continuer = true
Call detection_erreur_pv 'continuer = true
If continuer = False Then
Exit Sub 'continuer = false
Else
    Call fermeture 'continuer = true
Sheets("Synthèse").Select 'continuer = true
End If
Application.ScreenUpdating = True
End Sub


@+
ath80
Messages postés
208
Date d'inscription
dimanche 15 juillet 2007
Statut
Membre
Dernière intervention
15 mars 2018
7
Bonjour,
Là c'est le phénomène inverse qui se produit. Lorsque j'importe un fichier faux (avec paramètres manquants) le programme s'arrête. Lorsque j'importe un fichier vrai, le programme s'arrête aussi alors que je souhaiterai que la suite du programme soit réalisée dans cette condition:
Call fermeture
Sheets("Synthèse").Select

J'ai remarqué que le premier code était identique à celui que j'avais déjà.
ath80
Messages postés
208
Date d'inscription
dimanche 15 juillet 2007
Statut
Membre
Dernière intervention
15 mars 2018
7
C'est bon il s'agit d'une erreur de ma part.
Au début du programme principal j'avais ajouté:
Option Explicit
Public continuer As Boolean

Au lieu de:
Option Explicit

Je ne comprends pas pourquoi cela a un impact ...
Messages postés
6490
Date d'inscription
jeudi 13 septembre 2007
Statut
Contributeur
Dernière intervention
25 janvier 2020
439
Voici le classeur corrigé. Pour voir la différence des 2 actions, saisir du texte dans la cellule A1 de la feuille Exemple.


Sub fermeture()
    Sheets("exemple").Select
    Cells.Select
    Range("A1").Activate
    Selection.ClearContents
End Sub


comme le montre cette macro:
Si c'est true la cellule A1 sera effacée, sinon elle restera telle quel

http://www.cjoint.com/c/FBxh2H2qEsQ
ath80
Messages postés
208
Date d'inscription
dimanche 15 juillet 2007
Statut
Membre
Dernière intervention
15 mars 2018
7
Le lien à l'air mort mais comme dit précédemment je suis parvenu à réaliser ce que je voulais faire.

Merci beaucoup !