VBA - importer des données depuis des fichiers Textes

R@chid

XLDnaute Barbatruc
Bonjour @ tous,

Je joins un fichier Excel et 4 fichiers Texte pour que ce soit plus clair.
Lien DropBox

les fichiers textes sont des bases de données issues d'un serveur, et qui donnent la température Tmin ou Tmax journalière sur plusieurs stations (Villes) sur 2 scénarios et tout cela depuis 01/01/1961 au 2098.

Je voudrais bien que vous m'aidiez à faire une macro qui récupère les données à partir de 01/01/2000 jusqu'à 31/12/2025 et qui fait la moyenne par jour sur les 21 stations que j'ai (soit 84 fichiers) et les faire comme sur le fichier onglet "Base"

Les fichiers se nomment de la même façon (Tmin ou Tmax)-GCM-Station_1-(A2 ou B2).


https://www.dropbox.com/s/pqy76sslh79d894/Station_Agadir.zip?dl=0


Merci
 

CISCO

XLDnaute Barbatruc
Re : VBA - importer des données depuis des fichiers Textes

Bonjour R@chid

Comme tu le sais, je ne pourrais t'aider en VBA, donc... C'était juste pour te dire bonjour :)

@ plus

P.S : Il y a quelques jours, j'ai utilisé des données météo gratuites mensuelles sur ce site : Normales et records des stations météo de France - Infoclimat pour compléter un logiciel permettant de faire des bilans thermiques dans le bâtiment. Mais bon, cela ne va pas jusqu'en 2098 :) :)
 

néné06

XLDnaute Accro
Re : VBA - importer des données depuis des fichiers Textes

Bonjour R@chid,CISCO et le Forum

Est-ce que, dans un premier temps, si l'on converti les fichiers "Texte" en feuilles Excel avec une donnée par cellule, le travail ne serait-il pas simplifié pour la suite ?

Je ne sais pas faire cela directement avec les sauvegardes !

J'ai fais une macro, qui peut-être est inutile, mais cette macro, en prenant un fichier "Texte", tous sélectionner, copier sur la "Feuil1" et lancer la macro, donne la conversion par cellules distinctes en "Feuil2".

Sur le fichier en P-J, je n'ai placé qu'une partie d'une de tes feuilles "Texte", pour gagner de la place !

Regardes et dis-nous si il est possible d'en tirer quelque chose ?

A+

Rene
 

Pièces jointes

  • Convert.xlsm
    41.3 KB · Affichages: 49
  • Convert.xlsm
    41.3 KB · Affichages: 57
Dernière édition:

R@chid

XLDnaute Barbatruc
Re : VBA - importer des données depuis des fichiers Textes

Bonjour @ tous,
CISCO merci l'ami c'est gentil :)
@ néné06 :
comme je l'ai signalé j'ai 84 fichiers Textes, je ne pourrais pas faire cela de la façon que tu m'as proposée.
Si tu regardes sur mon fichier Excel, je le fais manuellement en passant par l'onglet "Import" faire l'onglet "Base".


Merci
 

Docmarti

XLDnaute Occasionnel
Re : VBA - importer des données depuis des fichiers Textes

Bonjour.

Pour convertir les nombres String ayant le point comme séparateur décimal :

Code:
Sub Test()

fich = "Repertoire...\Tmax-GCM-Agadir-A2.txt"

    Workbooks.OpenText Filename:= _
        fich, Origin:= _
        xlMSDOS, StartRow:=1, DataType:=xlDelimited, TextQualifier:=xlDoubleQuote _
        , ConsecutiveDelimiter:=True, Tab:=True, Semicolon:=False, Comma:=False _
        , Space:=True, 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), Array(11, 1), Array(12, 1), Array(13, 1), Array(14, 1), Array(15, 1), Array(16, 1), _
        Array(17, 1), Array(18, 1), Array(19, 1), Array(20, 1), Array(21, 1)), _
        TrailingMinusNumbers:=True
         
    Set wbf = ActiveWorkbook.Worksheets(1)
    
    Set r = wbf.UsedRange
 
    t = r.Value
  
    wbf.Cells(r.Row, r.Column).Resize(UBound(t, 1), UBound(t, 2)).Value = t

Cordialement

Docmarti
 

néné06

XLDnaute Accro
Re : VBA - importer des données depuis des fichiers Textes

Bonsoir le Forum,

Avec ce programme, le placer dans un dossier indépendant, y placer les 84 fichiers .txt, click sur le bouton et ce programme crée les 84 onglets avec le nom de chaque fichier .txt en ne conservant que les dates après le 31/12/1999 et l'extraction des données voulues.
Pour 84 fichiers, ce programme doit prendre environ 15 minute, mais je pense que des modif sont possibles.

René
Edit: Je travail avec un DD en SSD
 

Pièces jointes

  • Convert.xlsm
    26.5 KB · Affichages: 56
  • Convert.xlsm
    26.5 KB · Affichages: 51
Dernière édition:

R@chid

XLDnaute Barbatruc
Re : VBA - importer des données depuis des fichiers Textes

Bonsoir les amis,

premièrement merci pour vos contributions.

Docmarti :

merci l'ami pour cette macro, vu que les fichiers sont nombreux ça va être un peu tordu, mais c'est mieux que de faire l'importation manuellement.

tatiak :
merci à toi également pour cette macro, oui ça doit commencer à la ligne 14245 jusqu’à la ligne 23741.
je garde cette macro à coté qui va me faciliter l'importation comme celle de Docmarti.

néné06 :
merci pour ton retour, la macro fonctionne sur tous les fichiers du même dossier c'est bon, mais vraiment j'ai pas envie que ça me crée un onglet pour chaque fichier Texte, parce que finalement je dois aller récupérer toutes les données et les rassembler dans un seul onglet pour former une base de données comme l'onglet Base.


Je réexplique :

le but de la macro et de :

  • récupérer les données de chaque fichier à partir de la ligne 14245 à la ligne 23741.
  • calculer la moyenne par ligne
  • placer les moyennes dans l'onglet "Base" en colonne D
  • insérer les dates dans la colonne A
  • le nom de la station dans la colonne B
  • Tmax ou Tmin dans la colonne C
et ainsi de suite pour chaque fichier, pour avoir une base de données de 797749 lignes dans l'onglet Base.

J’espère avoir été clair cette fois-ci

Merci
 

mapomme

XLDnaute Barbatruc
Supporter XLD
Re : VBA - importer des données depuis des fichiers Textes

Bonjour R@chid :), CISCO, Docmarti, tatiak, néné06, Marc L,

Un essai dans le fichier joint. J'ai repris la méthode tatiak (que je remercie :)).

On choisit les fichiers à importer à l'aide du bouton "Ajouter les...". La fenêtre pour choisir les fichiers permet la multi-sélection (touches Ctrl et/ou Maj + clique de la souris). Un filtre correspondant aux noms des fichiers station est sélectionné d'office (on peut en changer). Les fichiers peuvent être placés n'importe où.

On peut ôter des fichiers de la liste en les sélectionnant (multi-sélection possible) puis en cliquant sur le bouton "Supprimer les...".

Quelques vérifications sont faites (basées sur la règle de construction du nom des fichiers station) :

  • le nom du fichier (quelque soit le chemin) doit être unique au sein de la liste (lors du choix des fichiers)
  • on essaye de ne pas importer deux fois le même fichier (lors des importations)
On peut donc théoriquement en importer quelques uns, refermer le fichier, aller boire un thé à la menthe :) puis ré-ouvrir le fichier pour continuer les importations.

Après importation, le nom du fichier disparaît de la liste des fichiers. Seuls restent les noms des fichiers n'ayant pas été importés.

nota: R@chid, il vaut mieux que tu vérifies sur un exemple ou deux qu'on importe bien ce qu'il faut (le bon nombre de lignes, entre les lignes 14245 et 23741, les bonnes moyennes, les bonnes dates, etc.)

nb: je ne me suis pas trop intéressé à la vitesse d'exécution :(
 

Pièces jointes

  • r@chid- BaseStations- v1.xlsm
    51 KB · Affichages: 75
Dernière édition:

néné06

XLDnaute Accro
Re : VBA - importer des données depuis des fichiers Textes

Bonjour le Forum,

@ R@chid,
Je pense avoir obtenu ce que tu recherches ?

-Placer dans un dossier les fichiers .Txt, le fichier "Convert" et le fichier "BaseStations".
-Ouvrir "Convert" en Feuil1 et lancer le programme.

Temps chez moi pour quatre fichiers environ 15 secondes.

Testes chez toi ?

René

Edit: Bonjour mapomme!
 

Pièces jointes

  • Convert.xlsm
    30.4 KB · Affichages: 54
  • Convert.xlsm
    30.4 KB · Affichages: 55
Dernière édition:

mapomme

XLDnaute Barbatruc
Supporter XLD
Re : VBA - importer des données depuis des fichiers Textes

Bonjour à tous :)

Une version dont le code est commenté (parce que je ne désespère pas de voir un jour R@chid devenir aussi brillant en VBA qu'il est magique en formules :p)

Cette version ajoute une indication de progression pour informer l'utilisateur.

Cette version intègre la remarque de Marc L :)
(...) Le code de mapomme pourrait être un poil plus rapide sans la ligne n°57 car inutile … (...)

Edit : sur ma vieille bécane, l'import de 84 fichiers dure 1minute et 18 secondes.
 

Pièces jointes

  • r@chid- BaseStations- v1a.xlsm
    66.1 KB · Affichages: 108
Dernière édition:

Discussions similaires

Membres actuellement en ligne

Statistiques des forums

Discussions
312 069
Messages
2 085 037
Membres
102 762
dernier inscrit
Ucef