Classeur pour station météo.

festayres

XLDnaute Nouveau
Bonjour à tous.

J'ai une station météo qui m'exporte les données en fichier excel. Toutes les colonnes sont en format texte. J'ai reussi via Données, Convertir à mettre une virgule au lieu du point. Je voulais savoir si l'on pouvais l'automatiser.

Je m'explique.

On peur extraire les données à tout moment. Sachant que la station météo à seulement 7 jours de mémoire, il faut donc le faire en gros 2 fois par semaines.

Je veux donc régulièrement exporter ces données. Et il faudrait que ces données ce mettent dans un classeur qui synthétiserais tout. Mais à la suite des précédente, par ordre de date. Je pense que cela doit être difficile à mettre en place. Sachant que le nom du fichier est modifiable. Donc possible d'aller chercher les infos tout le temps dans le même fichier.

A partir de là je peut me débrouiller pour les graphiques.
Après si quelqu'un pense que les graphiques peuvent être en macro, je serais preneur aussi. Mais ce n'est pas le plus important pour le moment.

Je précise que je suis sous Excel 2010 et que la station enregistre en format 97-2003.

Je joint les deux fichier.
Merci

Romain.


PS : Je pense ne pas être très clair donc faut hésiter à me poser des questions.
 

Pièces jointes

  • Donnée brutes.xls
    35.9 KB · Affichages: 58
  • tableau base.xlsx
    36 KB · Affichages: 58

Paf

XLDnaute Barbatruc
Re : Classeur pour station météo.

Bonjour festayres et bienvenue sur XLD, bonjour st007,

une macro qui fonctionne sur classeur source ouvert avec un nom fixe ( possibilité d'adapter) qui ne met en classeur cible que les colonnes nécessaires.

Code:
Sub ImportMeteo()
 Dim Brut As Workbook, WSBrut As Worksheet, Dest As Workbook, WSDest As Worksheet
 Dim MonTab, DerlBrut As Long, DerlDest As Long
 Set Brut = Workbooks("Donnée brutes.xls")
 Set WSBrut = Brut.Worksheets("Donnée brutes")
 Set Dest = ThisWorkbook
 Set WSDest = Dest.Worksheets("Feuil1")

 DerlBrut = WSBrut.Range("A" & Rows.Count).End(xlUp).Row
 With WSBrut.Range("A2:U" & DerlBrut)
  MonTab = Application.Index(.Value, Evaluate("row(1:" & DerlBrut - 1 & ")"), Array(1, 2, 3, 4, 5, 6, 11, 13, 16, 21))
 End With
 DerlDest = WSDest.Range("A" & Rows.Count).End(xlUp).Row + 1
 WSDest.Range("A" & DerlDest).Resize(UBound(MonTab, 1), UBound(MonTab, 2)) = MonTab
End Sub


A+
 

festayres

XLDnaute Nouveau
Re : Classeur pour station météo.

Merci à vous deux.

J'ai travailler une bonne partie de la soirée sur le fichier de st007, avant de voir le post Paf. Rrrrr

Je pense qu'en combinant vos deux idées cela serait parfait.



st007 : La solution de choisir le dossier source est bien, car en fait cela ne sera pas forcement tout le temps le même classeur. Je pense donc crée un dossier par mois et aller chercher les infos dedans. Apres le problèmes est que cela ouvre un nouvel onglet à chaque fois. Donc je ne peut pas préparer mes graphiques à l’avance.

Après le fait qu'il y est des doublons n'est pas trop grave. C'est assez simple et rapide à supprimer.


Paf : En premier, la conversion en nombre est super. Car c'est le plus long et le plus fastidieux. Le fait de faire référence à un seul classeur peu en fait poser problèmes. Notamment si par exemple j’extrais les données de la station, mais sans faire le transfert dans le classeur final. La fois suivante j'écrase le fichier et je perd qq jours. On va dire que sa laisse une sécurité.
En revanche j'ai un pb de date. Toutes les données sont récupérées sans pb, mais avant j'ai environ 30 lignes avec des dates et des valeurs incohérente.

Encore merci à vous deux de me faire avancer.
Et grâce à Paf, j'ai crée ma première macro. Bon d'accord j'ai juste fait un copier coller :)


Romain.
 

st007

XLDnaute Barbatruc
Re : Classeur pour station météo.

Bonjour,
Pour ranger des fichiers, j'utilise ceci. Le principe, j'importe des fichiers .dat dans excel, après l'import, je copie ces fichiers .dat du dossier IMAGESDAT vers le dossier IMAGESDAT_ARCHIVES et supprime les fichiers .dat du dossier IMAGESDAT.
Au final, mon dossier IMAGESDAT est vide et prêt à accueillir de nouveaux fichiers. On peut bien sure au passage renommer les fichiers avec date et heure de création pour ne rien "perdre"

Code:
Sub E_Ranger_Fichier()
    Const Source = "D:\IMAGESDAT\" & "*.dat"          'défini le dossier source
    Const Destin = "D:\IMAGESDAT_ARCHIVES\"         ' défini le dossier destination
    Dim objOFS As Variant
    Set objOFS = CreateObject("Scripting.FileSystemObject")
    objOFS.CopyFile Source, Destin                          'effectue la copie
    Kill "D:\IMAGESDAT\" & "*.dat"                           ' supprime le fichier
End Sub

Oui dans un nouvel onglet : Set DEST = Sheets.Add ' sheets("Feuil1") au lieu de Sheets.add
 

festayres

XLDnaute Nouveau
Re : Classeur pour station météo.

st007. J'avoue ne pas avoir tout compris.
Ce que je vais faire c'est créer un dossier par mois. Et j'irais chercher les infos dedans. Comme la macro que tu a crée me le propose.
Il faudrait juste que les données ne se copient pas dans une nouvelle feuille mais dans celle de mon choix. Car dans le classeur final je vais avoir 1 feuille par mois ( si excel le supporte niveau taille).

Romain
 

Paf

XLDnaute Barbatruc
Re : Classeur pour station météo.

Re,

pas de soucis de date avec le dernier classeur transmis.

une petite évolution pour choisir le classeur à importer:

Code:
Sub ImportMeteo()
 Dim Brut As Workbook, WSBrut As Worksheet, Dest As Workbook, WSDest As Worksheet
 Dim MonTab, DerlBrut As Long, DerlDest As Long

 FicImport = Application.GetOpenFilename("Fichiers Excel (*.xls), *.xls")
 If FicImport <> False Then
    Set Brut = Workbooks.Open(FicImport)
 Else
    Exit Sub
 End If
 'Set Brut = Workbooks("Donnée brutes.xls")
 Set WSBrut = Brut.Worksheets(1) 'première page du fichier à ouvrir
 Set Dest = ThisWorkbook
 Set WSDest = Dest.Worksheets("Feuil1") ' à adapter

 DerlBrut = WSBrut.Range("A" & Rows.Count).End(xlUp).Row
 With WSBrut.Range("A2:U" & DerlBrut)
  MonTab = Application.Index(.Value, Evaluate("row(1:" & DerlBrut - 1 & ")"), Array(1, 2, 3, 4, 5, 6, 11, 13, 16, 21))
 End With
 DerlDest = WSDest.Range("A" & Rows.Count).End(xlUp).Row + 1
 WSDest.Range("A" & DerlDest).Resize(UBound(MonTab, 1), UBound(MonTab, 2)) = MonTab
 Brut.Close
End Sub

A+
 

festayres

XLDnaute Nouveau
Re : Classeur pour station météo.

Paf, merci pour le dernier post.
En fait c'est bien mieux de choisir un seul classeur pour l'import.

Je ne sais pas comment adapter ce qu'il y à écrit en vert.

Et comment ajouter l’importation dans la feuille ouverte.
Même en essayant de mettre la ligne de code de st007.

Merci.
 

Paf

XLDnaute Barbatruc
Re : Classeur pour station météo.

re,

Je ne sais pas comment adapter ce qu'il y à écrit en vert.
S'il s'agit de cette ligne 'Set Brut = Workbooks("Donnée brutes.xls"), rien à adapter c'est une ligne de la première proposition, devenue inutile. Elle peut être supprimée.

Et comment ajouter l’importation dans la feuille ouverte.

en remplaçant cette ligne
Code:
Set WSDest = Dest.Worksheets("Feuil1")
par
Code:
Set WSDest = Dest.ActiveSheet

la macro corrigée et commentée (un peu)
Code:
Sub ImportMeteo()
 Dim Brut As Workbook, WSBrut As Worksheet, Dest As Workbook, WSDest As Worksheet
 Dim MonTab, DerlBrut As Long, DerlDest As Long

 FicImport = Application.GetOpenFilename("Fichiers Excel (*.xls), *.xls")
 If FicImport <> False Then
    Set Brut = Workbooks.Open(FicImport) 'ouverture du classeur source
 Else
    Exit Sub
 End If
 Set WSBrut = Brut.Worksheets(1) 'première page du fichier source
 Set Dest = ThisWorkbook
 Set WSDest = Dest.ActiveSheet 'feuille ouverte du classeur destination

 DerlBrut = WSBrut.Range("A" & Rows.Count).End(xlUp).Row 'dernière ligne du classeur source
 With WSBrut.Range("A2:U" & DerlBrut)
 '** creation d'un tableau avec les colonnes dans l'ordre
  MonTab = Application.Index(.Value, Evaluate("row(1:" & DerlBrut - 1 & ")"), Array(1, 2, 3, 4, 5, 6, 11, 13, 16, 21))
 End With
 DerlDest = WSDest.Range("A" & Rows.Count).End(xlUp).Row + 1 'première ligne vide du classeur destination
 '*** copie du tableau dans le classeur destination sur la feuille ouverte
 WSDest.Range("A" & DerlDest).Resize(UBound(MonTab, 1), UBound(MonTab, 2)) = MonTab
 Brut.Close ' fermeture du classeur source
End Sub

A+
 

festayres

XLDnaute Nouveau
Re : Classeur pour station météo.

Merci beaucoup pour votre aide.

Le principe est niquel, j'ai un peu compris le principe et même réussi à modifier une ligne.

J'avais une autre questions.

Dans la feuille "Janvier" j'ai nommé les cellules.
Cela me permet sur la première feuille d'aller plus vite en rentrant les formules.

Y a t'il un moyen de nommer exactement les mêmes cellules mais avec un nom légèrement différent ( celui créer + celui du classeur par exemple.

J'ai déjà fait ce genre de manip sur d'autres projet et c'est très long à faire.
Donc si il y à une astuce je suis preneur.

Merci
 

festayres

XLDnaute Nouveau
Re : Classeur pour station météo.

Merci beaucoup pour votre aide.

Le principe est niquel, j'ai un peu compris le principe et même réussi à modifier une ligne.

J'avais une autre questions.

Dans la feuille "Janvier" j'ai nommé les cellules.
Cela me permet sur la première feuille d'aller plus vite en rentrant les formules.

Y a t'il un moyen de nommer exactement les mêmes cellules mais avec un nom légèrement différent ( celui créer + celui du classeur par exemple) dans les autres onglet.
J'ai pas mis tout les onglet car fichier trop gros pour l'envoyer.

J'ai déjà fait ce genre de manip sur d'autres projet et c'est très long à faire.
Donc si il y à une astuce je suis preneur.

Merci
 

Pièces jointes

  • Resumé station.xlsm
    107.7 KB · Affichages: 62
  • Resumé station.xlsm
    107.7 KB · Affichages: 66

Discussions similaires

Réponses
16
Affichages
525

Membres actuellement en ligne

Aucun membre en ligne actuellement.

Statistiques des forums

Discussions
312 229
Messages
2 086 426
Membres
103 206
dernier inscrit
diambote