Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
2287 connectés 

  FORUM HardWare.fr
  Programmation
  VB/VBA/VBS

  [VBA Excel] [Résolu] Pb d'import de données txt dans excel avec VBA.

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

[VBA Excel] [Résolu] Pb d'import de données txt dans excel avec VBA.

n°918197
Manu la Sc​ience
...la science ... pas toujours
Posté le 08-12-2004 à 18:31:37  profilanswer
 

Salut tout le monde,
 
Je suis en train de réaliser une appli sur Excel et VBA pour gérer des données résultant d'une extraction d'une grosse base de données (plutôt très vieille).
Les données récupérées sont au format texte. J'ai réalisé une macro qui m'importe le ou les fichiers texte sans problème.
Je l'ai exécutée sur plusieurs PC, pas de problème mais vient un jour où je la lance sur un PC sur lequel je n'ai pas fait d'importation de fichier texte "à la main".
L'AddIns nécessaire à l'importation n'a donc pas été installé et je voudrais que mon appli puisse détecter si l'AddIns est installé et l'installer.
Le problème est que je ne connais pas le nom de cet AddIns. La fonction qui bogue est

Code :
  1. ActiveSheet.QueryTables.Add(Connection:=nomFichier, Destination:=Range("A1" ))

et je pense que l'AddIns qui me manque est soit XLQUERY.xla, soit XLODBC.xla.
Or, j'ai fais une recherche d'un fichier xlodbc et xlquery sans succès.
Y a t'il quelqu'un qui a été confronté au problème ou qui connaît la solution ?
 
Merci de vos réponses.
 
edit: sujet résolu  :jap:


Message édité par Manu la Science le 15-12-2004 à 13:48:02

---------------
Proverbe chinois: il vaut mieux apprendre à pêcher à un mendiant que de lui donner du poisson...
mood
Publicité
Posté le 08-12-2004 à 18:31:37  profilanswer
 

n°918619
Manu la Sc​ience
...la science ... pas toujours
Posté le 09-12-2004 à 10:26:57  profilanswer
 

Lorsque je vérifie les AddIns présents pour Excel sur les différents ordinateurs avec la fonction ci-dessous:

Code :
  1. Sub DisplayAddIns()
  2.     Worksheets("Feuil1" ).Activate
  3.     Dim r As Integer
  4.     r = 1
  5.     Dim ad As Variant
  6.     For Each ad In Application.AddIns
  7.         Worksheets("Feuil1" ).Cells(r, 1) = ad.Name
  8.         Worksheets("Feuil1" ).Cells(r, 2) = ad.Installed
  9.         r = r + 1
  10.     Next
  11. End Sub


J'ai une différence d'AddIns.
Les AddIns suivants sont présents sur les ordis pour lesquels mon appli marche et absents sur les ordis qui ne peuvent pas faire fonctionner mon appli:
- ACCLINK.XLA
- XLQUERY.XLA
- XLODBC.XLA
- UPDTLINK.XLA
 
Apparemment, mon problème viendrait de cette absence de macros complémentaire. Y a t'il un moyen de vérifier si elles sont présentes et de lancer une installation dans le cas d'une absence.
 
Merci de vos réponses


---------------
Proverbe chinois: il vaut mieux apprendre à pêcher à un mendiant que de lui donner du poisson...
n°918731
Manu la Sc​ience
...la science ... pas toujours
Posté le 09-12-2004 à 13:13:57  profilanswer
 

Bon, apparemment, mon problème n'a pas l'air d'emballer les foules... :??:  
 
J'ai installé les macros complémentaires (XLQUERY.XLA et XLODBC.XLA)sur l'ordi qui ne veut pas exécuter ma macro d'importation d'importation de données texte.
 
Voici une partie du code d'importation où le problème (erreur 1004) se situe:

Code :
  1. With ActiveSheet.QueryTables.Add(Connection:=nomFichier, Destination:=Range("A1" ))


avec  

Code :
  1. nomFichier = "TEXT;" & cheminFichier


 
Ma macro marche sur les ordis ayant EXCEL2000 mais pas sur EXCEL97, même avec les macros complémentaires installées.
 
Comment faire pour que ma macro soit utilisable sur office97 et office2000 ?
 
Je suis à cours d'idées et vous remercie de vos propositions.  :jap:   :jap:


Message édité par Manu la Science le 09-12-2004 à 13:14:37

---------------
Proverbe chinois: il vaut mieux apprendre à pêcher à un mendiant que de lui donner du poisson...
n°919412
Manu la Sc​ience
...la science ... pas toujours
Posté le 10-12-2004 à 10:14:19  profilanswer
 

Toujours dans mon problème, je suis sur Excel version 2000, apparemment pas complètement installé, mes macros ne peuvent même pas afficher une boîte de dialogue dans laquelle se trouve "chr(10)" qui est un saut de ligne.
 
Y a t'il quelqu'un qui sait pourquoi ? Apparemment, il n'a pas la librairie d'interprétation de cette fonction, quelle est cette librairie ou macro complémentaire ?
 
Un coup de pouce serait vraiment sympa. Merci.  :jap:  :jap:


---------------
Proverbe chinois: il vaut mieux apprendre à pêcher à un mendiant que de lui donner du poisson...
n°919446
Profil sup​primé
Posté le 10-12-2004 à 11:06:28  answer
 

tu veut dire qu'un simple :
 
MsgBox "xxx" & Chr(10) & "yyy"
 
ne marche pas ? quel est le message d'erreur ?
 
ca me semble etonnant si c'est le cas, a mon avis une réinstalle de Excel serait nécessaire.

n°919473
Profil sup​primé
Posté le 10-12-2004 à 11:31:12  answer
 

je croit en plus que ta "connectionstring" n'est pas bonne, ca n'est pas juste le nom de fichier a mettre mais tout un tas de parametres.
Jette un coup d'oeil ici :
 
http://www.dotnet-fr.org/sections. [...] e&artid=59

n°919601
Manu la Sc​ience
...la science ... pas toujours
Posté le 10-12-2004 à 13:43:56  profilanswer
 

Merci pour l'info.
 
J'ai essayé mais vba n'accepte pas "OleDbConnection", ce doit être du .Net... Je ne comprends pas pourquoi Excel97 bloque sur ma macro d'ouverture de fichier texte:

Code :
  1. Dim nomFichier As String
  2. nomFichier = Application.GetOpenFilename("Text Files (*.txt), *.txt" )
  3. nomFichier = "TEXT;" & nomFichier
  4. With ActiveSheet.QueryTables.Add(Connection:=nomFichier, Destination:=Range("A1" ))
  5.         .FieldNames = True
  6.         .RowNumbers = False
  7.         .FillAdjacentFormulas = False
  8.         .PreserveFormatting = True
  9.         ....
  10. End With


Excel bloque sur

Code :
  1. With ActiveSheet.QueryTables.Add(Connection:=nomFichier, Destination:=Range("A1" ))


et met une erreur d'exécution '1004'. J'ai pourtant compléter l'installation en mettant msquery...
 :??:


---------------
Proverbe chinois: il vaut mieux apprendre à pêcher à un mendiant que de lui donner du poisson...
n°919618
Profil sup​primé
Posté le 10-12-2004 à 13:57:49  answer
 

la connection ne doit pas etre un nom de fichier mais une "connectionstring" comme celle-ci :
 
"Driver={Microsoft Text Driver (*.txt; *.csv)};Dbq=c:\txtFilesFolder\;Extensions=asc,csv,tab,txt;"
 
tu trouvera ca ici :
 
http://www.connectionstrings.com/
 
 

n°919684
Manu la Sc​ience
...la science ... pas toujours
Posté le 10-12-2004 à 14:39:01  profilanswer
 

Je n'ai pas du comprendre la philosophie de la connection à des données externes. J'ai fait ca:

Code :
  1. Sub essaiimport()
  2. Dim ConnectionString As String
  3. Dim CommandText As String
  4. ConnectionString = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=I:\données stations\;Extended Properties=""text;HDR=No;FMT=Delimited"""
  5. Sheets("données" ).Select
  6. Range("A1" ).Select
  7.         With ActiveSheet.QueryTables.Add(Connection:=ConnectionString, Destination:=Range("A1" ))
  8.             .FieldNames = True
  9.             .RowNumbers = False
  10.             ...
  11.             .TextFileColumnDataTypes = Array(1, 1, 1, 1, 1, 1, 1, 1, 1, 1)
  12.             .Refresh BackgroundQuery:=False
  13.         End With
  14. End Sub


et il bloque sur la ligne "With ActiveSheet", toujours avec l'erreur 1004.
J'ai des bouquins d'Excel 97 mais ceux-ci ne parlent pas de connectionString...


---------------
Proverbe chinois: il vaut mieux apprendre à pêcher à un mendiant que de lui donner du poisson...
n°921127
Manu la Sc​ience
...la science ... pas toujours
Posté le 12-12-2004 à 19:03:23  profilanswer
 

Je sèche vraiment sur ce problème.
 
Y a t'il quelqu'un qui a déjà réalisé une importation de données d'un fichier texte sous Excel97?
 
Merci, vraiment.  :jap:


---------------
Proverbe chinois: il vaut mieux apprendre à pêcher à un mendiant que de lui donner du poisson...
mood
Publicité
Posté le 12-12-2004 à 19:03:23  profilanswer
 

n°922551
Manu la Sc​ience
...la science ... pas toujours
Posté le 14-12-2004 à 10:36:04  profilanswer
 

Toujours avec mes problèmes, je relance la discussion.  :bounce:  
 
Sous NT4 et Excel 97 SR-2, je ne peux pas lancer ma macro d'importation de fichier texte mais également utiliser les fonctions "Chr(10)", "Right()" et "Left()".
 
Je pense que les deux problèmes sont liés mais je n'arrive pas à les résoudre.
 
Merci de vos réponses.  :jap:


---------------
Proverbe chinois: il vaut mieux apprendre à pêcher à un mendiant que de lui donner du poisson...
n°922624
Profil sup​primé
Posté le 14-12-2004 à 12:33:57  answer
 

quels sont les characteres de separation utilisés dans ton fichier texte a importer ? si ca se trouve ,une simple importation suffirait...

n°922631
Manu la Sc​ience
...la science ... pas toujours
Posté le 14-12-2004 à 12:50:41  profilanswer
 

Le carctère de séparation est le ";". Le fichier est construit de la façon suivante:

Code :
  1. DEC;.  6 13
  2. DEB;EXP-HYDRO;EXPORT DE DONNEES A PARTIR DE LA BANQUE HYDRO;20041103;BANQUE HYDRO;1997-1;
  3. 950;K4013001;L'Aubois à Grossouvre[Trézy];183.000;140.000;140.000;104;DIREN Centre;757;
  4. QJO;K4013001;19960101;; ; ;
  5. QJO;K4013001;19960102;; ; ;
  6. QJO;K4013001;19960103;; ; ;
  7. QJO;K4013001;19960104;; ; ;
  8. QJO;K4013001;19960105;; ; ;


J'ai une macro d'importation du fichier texte qui marche sous EXCEL2000, pas tous et je ne sais pas pourquoi et sous EXCEL2002.
Je l'ai construite à partir de l'enregistreur de macro et je l'ai adaptée.
Elle ne marche pas sous EXCEL97, et je ne peux pas utiliser l'enregistreur car EXCEL ne permet pas d'importer un fichier (Menu "Données", "Données externes", "Importer un fichier Texte" ).
Je viens de voir une petite appli de @+Thierry sur ce site http://www.excel-downloads.com/htm [...] _44174.htm.
Apparemment, l'importation est vraiment différente pour EXCEL97.
Je suis en train de voir si je peux adapter sa macro pour le séparateur ";".


---------------
Proverbe chinois: il vaut mieux apprendre à pêcher à un mendiant que de lui donner du poisson...
n°922708
Manu la Sc​ience
...la science ... pas toujours
Posté le 14-12-2004 à 13:55:09  profilanswer
 

J'ai un gros problème. J'ai essayé d'adapté la macro trouvée et réalisée par @+Thierry (merci à lui) et voici ce que cela donne:

Code :
  1. Sub ImportTXT()
  2. Dim Enregistrement As String
  3. Dim A As Byte, B As Byte, C As Byte, D As Byte, E As Byte, F As Byte
  4. Dim i As Integer
  5. Dim Chemin As String, FichierTxt As String
  6. Chemin = "C:\Emmanuel\"
  7. FichierTxt = "fichier.txt"
  8. i = 2
  9. On Error GoTo ErrorHandler
  10. Open Chemin & FichierTxt For Input As #1
  11.    Do While Not EOF(2)
  12.     Line Input #1, Enregistrement
  13. '///////////////////////////PART FOR EXCEL 97 or Greater//////////
  14. A = WorksheetFunction.Find(";", Enregistrement)
  15. B = WorksheetFunction.Find(";", Enregistrement, A + 1)
  16. C = WorksheetFunction.Find(";", Enregistrement, B + 1)
  17. D = WorksheetFunction.Find(";", Enregistrement, C + 1)
  18. E = WorksheetFunction.Find(";", Enregistrement, D + 1)
  19. F = Len(Enregistrement)
  20.       With Sheets("Données" )
  21.         .Range("A" & i) = Mid(Enregistrement, 1, A - 1)
  22.         .Range("B" & i) = Mid(Enregistrement, A + 1, B - A - 1)
  23.         .Range("C" & i) = Mid(Enregistrement, B + 1, C - B - 1)
  24.         .Range("D" & i) = Mid(Enregistrement, C + 1, D - C - 1)
  25.         .Range("E" & i) = Mid(Enregistrement, D + 1, E - D - 1)
  26.         .Range("F" & i) = Mid(Enregistrement, E + 1, F)
  27.       End With
  28.       i = i + 1
  29. '///////////////////////////END PART FOR EXCEL 97=================
  30. Loop
  31. Close #1
  32. Exit Sub
  33. ErrorHandler:
  34. ImportOK = False
  35. If Err = 53 Then
  36. 'message
  37. ElseIf Err = 9 Then
  38. 'message
  39. Close #1
  40. Else
  41. 'message
  42. Close #1
  43. End If
  44. End Sub


 
Mais lorsque je la lance, Excel ne veut même pas commencer d'exécuter la macro et reste bloqué sur la fonction "Mid". Il doit manquer une librairie pour Excel, et c'est sur tous les postes pareil.
 
Comment faire à part une réinstalle de tous les postes ?  :sweat:  
 :??:


Message édité par Manu la Science le 14-12-2004 à 13:56:20

---------------
Proverbe chinois: il vaut mieux apprendre à pêcher à un mendiant que de lui donner du poisson...
n°922717
FlorentG
Posté le 14-12-2004 à 13:59:58  profilanswer
 

Ben la fonction Mid est une fonction de VBA, même avec aucune librairie elle fonctionnera, vu qu'elle fait partie du langage...

n°922725
Manu la Sc​ience
...la science ... pas toujours
Posté le 14-12-2004 à 14:04:43  profilanswer
 

la fonction mid comme la fonction chr ne marchent pas et je ne sais pas pourquoi ? Ca me bloque toutes mes macros...


---------------
Proverbe chinois: il vaut mieux apprendre à pêcher à un mendiant que de lui donner du poisson...
n°922729
FlorentG
Posté le 14-12-2004 à 14:07:42  profilanswer
 

Ah... Peut-être qu'il faut quand-même rajouter une référence, genre à VBA...

n°922744
Manu la Sc​ience
...la science ... pas toujours
Posté le 14-12-2004 à 14:14:39  profilanswer
 

Dans "Outils" ==> "Références" ?
J'ai Visual Basic for Application de coché et d'autres trucs mais il existe 2 VBAProject non cochés. C'est peut être là que viens mon problème.
Et quel est le moyen de vérifier si le poste à bien les références nécessaires à l'exécution de l'appli ?


---------------
Proverbe chinois: il vaut mieux apprendre à pêcher à un mendiant que de lui donner du poisson...
n°922761
FlorentG
Posté le 14-12-2004 à 14:22:26  profilanswer
 

Normalement seul Visual Basic for Application est nécessaire...

n°922778
Manu la Sc​ience
...la science ... pas toujours
Posté le 14-12-2004 à 14:29:25  profilanswer
 

Cette référence est cochée mais mon appli ne fonctionne pas. Ne faut il pas une autre librairie. Je viens de remarquer que la fonction Time ne fonctionne également pas...


---------------
Proverbe chinois: il vaut mieux apprendre à pêcher à un mendiant que de lui donner du poisson...
n°922858
Profil sup​primé
Posté le 14-12-2004 à 15:15:16  answer
 

si tes characteres de separation sont des ";" alors ton fichier doit etre importé en tant que fichier CSV ( ce que EXCEL97 est incapable de faire ... )

n°922862
Profil sup​primé
Posté le 14-12-2004 à 15:17:52  answer
 

http://img58.exs.cx/img58/2538/refvba0lk.jpg

n°922922
Manu la Sc​ience
...la science ... pas toujours
Posté le 14-12-2004 à 15:44:53  profilanswer
 

Merci Gargamail.
 
J'ai regardé mes références et j'ai Microsoft Excel 8.0 Object Library au lieu de 9.0. De même pour Office.
 
Pour mon import de fichier texte, j'arrive à ouvrir un fichier txt (avec séparateur ";" ) en tant que nouveau classeur sans problème de mise en forme.
Je devrai donc passer par l'ouverture du fichier texte en tant que classeur, copier ce qui se trouve sur la seule feuille et coller dans mon classeur.
Je me résigne à faire cela pour contourner les problèmes.


---------------
Proverbe chinois: il vaut mieux apprendre à pêcher à un mendiant que de lui donner du poisson...
n°922925
FlorentG
Posté le 14-12-2004 à 15:46:07  profilanswer
 

Si t'as 8.0 dans tes références, c'est juste que t'as une version plus ancienne de gargamail. Maintenant ça ne devrait rien changer au schmilblick...

n°922935
Manu la Sc​ience
...la science ... pas toujours
Posté le 14-12-2004 à 15:51:47  profilanswer
 

Oui, tout à fait, d'où mon incompréhension grandissante sur les lois de fonctionnement d'Excel et des compatibilité des différentes versions Office et Windows.


---------------
Proverbe chinois: il vaut mieux apprendre à pêcher à un mendiant que de lui donner du poisson...
n°923193
Profil sup​primé
Posté le 14-12-2004 à 18:47:54  answer
 

1 - est ce que MID est bien dans ton "explorateur d'objets" ?
 
2 - est ce que tu as l'aide pour les parametres qui s'affiche quand tu tape mid ?
 
 
PS : essaye avec MID$


Message édité par Profil supprimé le 14-12-2004 à 18:49:10
n°923500
Manu la Sc​ience
...la science ... pas toujours
Posté le 15-12-2004 à 08:52:43  profilanswer
 

gargamail a écrit :

1 - est ce que MID est bien dans ton "explorateur d'objets" ?


Mid et Mid$ sont bien dans mon explorateur d'objet en tant que membre de la classe String. (Left, Right et Time qui me posent également problème n'y sont pas)

gargamail a écrit :


2 - est ce que tu as l'aide pour les parametres qui s'affiche quand tu tape mid ?


Je n'ai pas d'aide pour les paramètres qui apparaît lorsque je tape Mid ou Mid$.
De plus, lorsque je lance la macro depuis VBE, il me dit qu'il y a une "Erreur de compilation : Projet ou bibliothèque introuvable."
 
PS: que c'est il passé hier soir, impossible de se connecter au forum... :(


Message édité par Manu la Science le 15-12-2004 à 08:59:30

---------------
Proverbe chinois: il vaut mieux apprendre à pêcher à un mendiant que de lui donner du poisson...
n°923551
Manu la Sc​ience
...la science ... pas toujours
Posté le 15-12-2004 à 09:41:31  profilanswer
 

Je suis en train de modifier ma macro d'insertion de données texte. La macro essaie une insertion "classique" et si cela ne marche pas (on error goto...) je fais une ouverture du fichier texte par excel.
Je récupère le fichier avec ce code :

Code :
  1. Dim nomFichier As String
  2. nomFichier = Application.GetOpenFilename("Text Files (*.txt), *.txt" )


Mais lorsque je veux ouvrir le fichier avec ce code :

Code :
  1. ChDir nomFichier.Path
  2. Workbooks.OpenText FileName:= _
  3.         nomFichier.Name _
  4.         .....


Je ne peux pas utiliser de .Path et de .Name à une variable String.
Faut il que je récupère à la main le nom du fichier et son chemin ou y a t'il un autre moyen de le récupérer à l'aide d'une fonction ?
Il me semble que GetOpenFilename ne peut renvoyer que des variables String...


Message édité par Manu la Science le 15-12-2004 à 09:44:22

---------------
Proverbe chinois: il vaut mieux apprendre à pêcher à un mendiant que de lui donner du poisson...
n°923741
Profil sup​primé
Posté le 15-12-2004 à 12:25:44  answer
 

la fonction GetOpenFileName te renvoie le nom du fichier , chemin y compris ( "C:\Program Files\A.txt" par exemple )
 
Tu n'a pas nécessité de faire un ChDir ni d'ajouter la propriété NAME avec le nomFichier renvoyé, utilise simplement :
 

Code :
  1. nomFichier = Application.GetOpenFilename("Text Files (*.txt), *.txt" )
  2. Workbooks.OpenText Filename:=nomFichier


Message édité par Profil supprimé le 15-12-2004 à 12:26:03
n°923767
Manu la Sc​ience
...la science ... pas toujours
Posté le 15-12-2004 à 13:12:07  profilanswer
 

Je te remercie, j'ai utilisé ce que tu m'as donné.
Ma macro fonctionne mais je suis obligé de chercher le nom du fichier texte ouvert car si je copie les données du fichier texte (ouvert par Excel), si je ferme ce fichier et si ensuite je colle les données sur mon appli, les données ne gardent pas le même format et des chiffres sont remplacés par des rectangles.
Les données importées doivent avoir un poids trop grand (jusqu'à une taille de 2Mo pour les fichiers texte).
Par contre, si je copie et si je colle les données ensuite et enfin je ferme le fichier Excel intermédiaire, il n'y a aucun problème.
Il a donc fallu que je trouve le nom du fichier pour fermer le classeur correspondant.
Je vais mettre ma macro sur le forum pour ceux qui veulent.
 
Merci à ceux qui m'ont aidé. :jap:


---------------
Proverbe chinois: il vaut mieux apprendre à pêcher à un mendiant que de lui donner du poisson...
n°923779
Manu la Sc​ience
...la science ... pas toujours
Posté le 15-12-2004 à 13:45:34  profilanswer
 

Donc voici ma macro d'importation de données d'un fichier txt qui marche d'Office97 installé sur NT4 (là où il y avait un problème) à OfficeXP sur Windows XP.
L'importation est toutefois plus longue en passant par un classeur intermédiaire.
 
Sub ImportDonnees()
     
    'Variable stockant le nom du classeur
    Dim nomClasseur As String
    nomClasseur = ActiveWorkbook.Name
     
    'Variable stockant le nom de la feuille où devront se trouver les données à importer
    Dim feuilImport As String
    feuilImport = "mafeuille"
     
    'Variable stockant le nom du fichier à ouvrir
    Dim fichier As String
 
'Retour possible pour choisir de nouveau un fichier
choixFichierTexte:
    'Choix d'un fichier texte
    fichier = Application.GetOpenFilename("Text Files (*.txt), *.txt" )
     
    'Si aucun fichier est choisi
    If Left(fichier, 4) = "Faux" Then
        GoTo pasDeFichierTexte
    End If
     
    'Variables de lancement du traitement
    Dim message As Integer
     
    'Boite de dialogue de lancement du traitement
    message = MsgBox("Vous êtes sur le point d'importer le fichier :" & Chr(10) & Chr(10) & fichier & Chr(10) & Chr(10) & "Le traitement peut prendre quelques secondes et laissera votre écran fixe." & Chr(10) & Chr(10) & "Pour importer ces données, appuyez sur " & Chr(34) & "OK" & Chr(34) & ", pour l'interrompre sur " & Chr(34) & "Annuler" & Chr(34) & ".", 1 + 64 + 256, "Importation de données" )
     
    'Si "Annuler" de la boîte de dialogue a été cliqué, on interromp le traitement
    If message = 2 Then
        Exit Sub
    End If
     
    'Suppression des données se trouvant sur la feuille où devront se trouver les données
    Worksheets(feuilImport).Select
    Cells.Select
    Selection.Delete Shift:=xlUp
    Range("A1" ).Select
     
    'Enlève l'apparition de boîte de dialogue
    Application.DisplayAlerts = False
     
    'Déclaration de variable
    Dim fichier1 As String
     
    'Ajout d'un élément texte au nom du fichier pour pouvoir exécuter la requête sur le fichier texte de données
    fichier1 = "TEXT;" & fichier & ";"
     
    'Formatage des données pour une bonne insertion des données dans les cellules
    On Error GoTo ouvrirTexte
        With ActiveSheet.QueryTables.Add(Connection:=fichier1, Destination:=Range("A1" ))
            .FieldNames = True
            ....
        End With
    Resume
     
retourouvrirTexte:
    'Sélection d'une cellule
    Range("A1" ).Select
     
    'Rétablit l'apparition de boîte de dialogue
    Application.DisplayAlerts = True
     
    'Avertissement pour l'utilisateur
    MsgBox "Les données textes ont été importées.", vbOKOnly & vbInformation, "Importation des données"
     
    Exit Sub
 
'Récupération de l'erreur de non sélection d'un fichier texte à ouvrir
pasDeFichierTexte:
 
    'Variables de d'avertissement de la non sélection du fichier texte
    Dim messageFichier As Integer
     
    'Boite de dialogue de lancement du traitement
    messageFichier = MsgBox("Vous n'avez pas sélectionner de fichier texte à ouvrir !" & Chr(10) & Chr(10) & "Voulez-vous importer des données de la banque HYDRO ?" & Chr(10) & Chr(10) & "Pour importer ces données, appuyez sur " & Chr(34) & "OK" & Chr(34) & ", pour l'interrompre sur " & Chr(34) & "Annuler" & Chr(34) & ".", 1 + 64 + 256, "Importation de données de la banque HYDRO" )
     
    'Si "Annuler a été choisi, on interromp le traitement
    If messageFichier = 2 Then
        Exit Sub
    End If
     
    'Retour à la boîte de sélection de fichier texte
    GoTo choixFichierTexte
     
ouvrirTexte:
     
    'Variable stockant le nom du fichier
    Dim nomFichier As String
     
    'Variable compteur de lettre
    Dim lettre As Integer
 
    'Récupération du nom du fichier
    Do While Left(Right(fichier, lettre), 1) <> "\"
        nomFichier = Right(fichier, lettre)
        lettre = lettre + 1
    Loop
     
    'Ouverture du fichier texte par Excel avec la mise en forme nécessaire
    Workbooks.OpenText FileName:=fichier, Origin:=xlWindows, StartRow:=1, DataType:=xlDelimited, TextQualifier _
        :=xlDoubleQuote, ConsecutiveDelimiter:=False, Tab:=False, Semicolon:= _
        True, Comma:=False, Space:=False, Other:=False, FieldInfo:=Array(Array( _
        1, 1), Array(2, 1), Array(3, 1), Array(4, 1), Array(5, 1), Array(6, 1), Array(7, 1), Array(8, _
        1), Array(9, 1), Array(10, 1))
     
    'Sélection des données et copie
    Cells.Select
    Selection.Copy
     
    'Sélection du classeur, de la feuille et collage des données
    Workbooks(nomClasseur).Activate
    Worksheets(feuilImport).Select
    Cells.Select
    ActiveSheet.Paste
     
    'Fermeture du classeur intermédiaire
    Workbooks(nomFichier).Close
     
    'Retour au traitement des données
    GoTo retourouvrirTexte
     
End Sub


Message édité par Manu la Science le 15-12-2004 à 13:46:32

---------------
Proverbe chinois: il vaut mieux apprendre à pêcher à un mendiant que de lui donner du poisson...
mood
Publicité
Posté le   profilanswer
 


Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  VB/VBA/VBS

  [VBA Excel] [Résolu] Pb d'import de données txt dans excel avec VBA.

 

Sujets relatifs
[VBA Excel] Remplir 50 labels en une seule commande ? [résolu][VB6] Conversion .doc en .pdf [résolu]
Servlet - erreur sur l'importacces multiple donnees fichier txt
Problème avec la taille d'un tableau [résolu][Powerpoint VBA 6] Quels events catchés par DoEvents ?
Ecrire dans un fichier excel 
Plus de sujets relatifs à : [VBA Excel] [Résolu] Pb d'import de données txt dans excel avec VBA.


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR