Archive for novembre, 2012

Afficher les propriétés étendues d’un fichier en VBA

Comment faire afficher en VBA  les propriétés étendues d’un fichier ? Pour récupérer les infos disponibles dans Windows (clic-droit, propriétés détails) : données EXIF, MP3…

Comment connaître la taille (hauteur x largeur) des fichiers jpg, les auteurs, albums ou genre des fichiers mp3 ? Avec le « classique » FSO, impossible d’accéder aux propriétés étendues des fichiers. Il faut utiliser la méthode « GetDetailsOf  » du Windows Shell, qui fournit un nombre important de propriétés de fichiers suivantes. Ce nombre dépend du système : d’une trentaine pour Windows P, à plus de 250 pour Seven.

Les premières sont les suivantes

0 : Name    18 : Year

1 : Size    19 : Track Number

2 : Type    20 : Genre

3 : Date Modified    21 : Duration

4 : Date Created    22 : Bit Rate

5 : Date Accessed    23 : Protected

6 : Attributes    24 : Camera Model

7 : Status    25 : Date Picture Taken

8 : Owner    26 : Dimensions

9 : Author    27 : Not used

10 : Title    28 : Not used

11 : Subject    29 : Not used

12 : Category    30 : Company

13 : Pages    31 : Description

14 : Comments    32 : File Version

15 : Copyright    33 : Product Name

16 : Artist    34 : Product Version

17 : Album Title

A noter que sur Seven, les propriétés renvoient beaucoup d’informations multimédias (Données EXIF pohotos…). Le code suivant permet d’afficher les propriétés des fichiers d’un répertoire, mais au préalable, il faut activer la référence « Microsoft Shell Controls and Automation » (éditeur VBA, menu Outils – Références).

Sub proprietesFichiers()

Dim objShell As Object, strFileName As Object

Dim objFolder As Folder

Dim Resultat As String

Dim i As Byte

Set objShell = CreateObject(« Shell.Application »)

Set objFolder = objShell.Namespace(« D:\Mes images\200908\ »)

For Each strFileName In objFolder.Items

If strFileName.isFolder = False Then

Resultat = «  »

For i = 0 To xxx (dépend du système, essayer diverses valeurs entre 34 et 300)

Resultat = Resultat &  »  » & i &  » :  » & objFolder.getDetailsOf(strFileName, i) &  » « 

Next

MsgBox Resultat

End If

Next

End Sub

Top

Faire du SQL sur une feuille Excel 2003

Nous allons étudier aujourd’hui une fonctionnalité avancée d’Excel : exécution de SQL sur un fichier Excel et import des résultats dans un autre fichier Excel.

Quel est l’intérêt ? Pour ceux qui connaissent bien le SQL, cela peut être utile (élimination de doublons avec un SELECT DISTINCT, comptages avec SELECT COUNT, sommes avec SELECT SUM…). Enfin, même si nous ne détaillerons pas le code ici, il peut être utile d’accéder via un programme VBA à des données stockées dans un fichier Excel, sans ouvrir ce fichier (via le gestionnaire de base de données ADO).

Prenons un fichier client exemple, auquel on a ajouté un solde fictif. Pour faire du SQL sur ce fichier, il faut au préalable définir la zone de données : sélectionner les colonnes contenant les données (ne pas sélectionner la plage de données uniquement, car si on ajoute une ligne, elle ne sera pas prise en compte dans le SQL…) et nommer la plage, « BDD » dans l’exemple ci-dessous (juste en dessous du nom de la police « arial »). Ou alors il faudra définir une zone de données dynamique avec la fonction DECALER, nous étudierons cette fonction ultérieurement dans le blog.

 

Nous pouvons maintenant enregistrer le fichier, et le fermer. Ouvrons un nouveau classeur Excel, et allons dans le menu « Données – Données Externes – Créer une requête »

Nous aurons le choix entre différentes technologies d’accès aux données :

Et nous choisirons « Fichiers Excel », et préciserons le chemin du fichier sur le disque ou sur le réseau. Maintenant, l’assistant requête nous demande de choisir les colonnes de la plage de données qu’il a trouvé dans le fichier. Nous retrouvons « BDD », sélectionnons toutes les colonnes.

Les écrans suivants nous permettent de faire des filtres et des tris. Nous n’en faisons pas dans cet exemple, et nous arrivons sur le choix final :

Nous pouvons renvoyer les données vers Excel, ce qui présente déjà un intérêt évident : toutes les modifications apportées au fichier source contenant la plage BDD seront automatiquement déversées dans notre nouveau classeur ! Mais dans cet exemple, nous allons personnaliser le SQL d’import des données et donc choisir « Afficher les données ou … Microsoft Query ». Et nous voici sous cet outil assez daté il faut bien le dire, les versions d’office se succèdent mais MS Query reste désespérément le même…

Nous pouvons désormais personnaliser le code SQL à l’aide du bouton SQL. Un exemple :

Et les données correspondantes s’affiche sous MS Query.

En cliquant sur le menu : « Fichier – Renvoyer les données vers Excel », nous pourrons obtenir les données dans le classeur.

Il ne nous reste plus qu’à enregistrer le classeur, et si nous l’ouvrons dans un mois, nous pourrons faire un clic-droit sur la plage des données retournées pour actualiser les données !

Cette méthode d’accès aux données est très pratique. On peut par exemple obtenir des tableaux croisés dynamiques de consolidation directement liés aux données sources, sans avoir à rouvrir chaque classeur de données source, etc.

Top
Page 1 of 1

Contactez-nous contact@expert-data.fr

EXPERT data, solutions pour TPE/PME et grands comptes