VBA : L’objet Fichier système




Comment manipuler les fichiers positionnés sur votre disque dur, à l’aide du langage VBA. L’utilisation de l’objet "FileSystemObject" va nous permettre de régler cette question. Dans cet exemple nous allons pouvoir :

  • Supprimer un fichier
  • Renommer un fichier
  • Déplacer un fichier
  • Ouvrir un fichier

Évidement pour pouvoir réaliser ces actions il faudra au préalable trouver sur le disque le fichier qui nous intéresse. Donc rechercher un fichier sera notre première action.


Nous saisissons dans la zone de texte "TextBox1" du formulaire "UserForm2" le nom d’un fichier Excel (sans l’extension), puis nous cliquons sur le bouton "Find". Le système parcours ici tous les sous-dossiers d’un dossier "Blog" d’un disque "E:".
Si le fichier est localisé ; son Path (chemin d’accès) va s'afficher dans la zone de label "Label1" située en dessous, l'utilisateur choisira alors l'action qu'il désire accomplir.


Il sera nécessaire de créer 2 objets, un pour l'accès au système de fichiers Windows (scripting.FileSystemObject) et un autre objet de type dossier pour récupérer notre dossier racine par la méthode GetFolder. Vous noterez également l'emploi de la fonction Dir() de la classe FileSystem qui permet la récupération du nom du fichier dans une chaîne de type Path ou une chaîne vide en cas d'absence. Le reste du code ne semble pas poser de difficultés.

'-----------------------------------------------------------------------
Option Explicit
Public fichier As String
Public fichier2 As String
Public Flder As Object
Public comp As String
 Const boite = vbOKOnly + vbInformation
 Const titre = "www.olivier - picot.fr"

 '-----------------------------------------------------------------------
Private Sub Find_Click()

Dim fso As Object
Dim Dossier As Object
Dim LeDossier As String
Dim chemin As String

comp = TextBox1.Value
LeDossier = "E:\Blog"

Set fso = CreateObject("scripting.FileSystemObject")
Set Dossier = fso.getfolder(LeDossier)

'Examen de chaque sous dossier du dossier E:\Blog
For Each Flder In Dossier.subfolders
    fichier = Dir(Flder.Path & Application.PathSeparator & comp & ".xlsx")
    If fichier <> "" Then 'donc si on l'a trouvé
        chemin = Flder.Path & Application.PathSeparator
        Exit For
    End If
Next Flder

If fichier = "" Then
    MsgBox "le fichier n'existe pas", vbInformation + vbOKOnly, "ERREUR"
Else
    fichier = chemin & comp & ".xlsx"
    UserForm2.Label1.Caption = fichier
End If
End Sub
 '-----------------------------------------------------------------------
Private Sub Ouvrir_Click()
Workbooks.Open fichier
MsgBox "Fichier ouvert", boite, titre
End Sub
 '-----------------------------------------------------------------------
Private Sub Renommer_Click()
fichier2 = Flder.Path & Application.PathSeparator & "copie_" & comp & ".xlsx"
    Name fichier As fichier2
    MsgBox "Fichier rennomé", boite, titre
End Sub
 '-----------------------------------------------------------------------
Private Sub Supprimer_Click()
 Kill fichier
 MsgBox "Fichier supprimé", boite, titre
End Sub
 '-----------------------------------------------------------------------
Private Sub Deplace_Click()
Name fichier As "E:\SNCF\" & comp & ".xlsx"
MsgBox "Fichier déplacé", boite, titre
End Sub
 '-----------------------------------------------------------------------
Private Sub sortir_Click()
 UserForm2.Hide
End Sub

Vous pourrez très facilement adapter cet exemple,
Merci de votre attention



VBA : Connaissez-vous MZ-Tools ?




Comme l’on constaté tous les développeurs VBA, les possibilités de gestion du code offertes par l’éditeur (Visual Basic Editor) de Microsoft sont extrêmement réduites.  Les fonctionnalités de l’éditeur peuvent être grandement améliorés par l’implémentation de logiciels divers et variés. Je vous présente ici l’excellent logiciel espagnol, MZ-Tools 3.0 for VBA. Ce logiciel est compatible avec les dernières versions d’Excel 2010 et 2013 (32-bit). Il fonctionne sous toutes les versions de Windows, y compris Windows 8. Précisons qu’il s’agit d’un logiciel totalement en FreeWare, aussi en cas d’utilisation professionnelle une donation est toujours possible.

Vous pourrez le télécharger à l’adresse http://www.mztools.com/v3/download.aspx

Voici les principales fonctionnalités amélioratrices offertes par le logiciel, de quoi se poser sérieusement deux questions :
  1. Comment on faisait avant ?
  2.  Microsoft ne pourrait ’il pas repenser sérieusement son éditeur VBE ?
  • Amélioration de la fonction Rechercher / Remplacer qui peut être transversale à plusieurs projets
  • Gestion du suivi des appels de Procédures
  • Création de modèles de code pour stocker des extraits de code que vous insérez fréquemment dans votre code source. Pour insérer un modèle de code, vous pouvez le sélectionner dans une liste ou lui affecter un raccourci
  • Amélioration de la commande Insertion / Procédure…
  • Assistant pour la saisie des instructions de type Select Case…End Select avec appel par raccourci
  • Numérotation de Ligne : Vous pouvez ajouter ou supprimer des numéros de ligne à une procédure, module, … simplement à l’aide du menu contextuel.
  • Création possible de 9 « presse papiers » privés pour conserver et réutiliser des extraits de code.
  • Un assistant de création de la boîte de dialogue MsgBox évitant une saisie fastidieuse des paramètres.

  • Outils de modification de la casse des caractères dans le code, MAJ / min
  • Assistant de gestion de l’ordre des tabulations sur les objets de formulaires

  • Copier /  coller des contrôles de formulaires avec leur Code intégré.
  • Renommer des contrôles entraine automatiquement le renommage de l’objet correspondant dans le code d’où un gain de temps considérable et une sérieuse diminution du nombre d’erreurs.
  • Demande automatique de saisie du nom et de la légende d’un contrôle lorsque vous l’ajouter dans votre formulaire.
  • Outils de détection dans le code source des variables et constantes inutilisées, pour amélioration de la performance.
  • Effacement automatique de la fenêtre d’exécution
  • Fermez toutes les fenêtres ouvertes dans l’éditeur sauf éventuellement la fenêtre active.

Cette liste est loin d’être exhaustive, je me suis concentré sur les éléments me paraissant particulièrement intéressant pour un gain de productivité, il y a aussi une gestion possible des tâches d’un projet, des retours statistiques sur vos codes ... et bien d’autres fonctionnalités à découvrir.

Merci de votre attention




Calcul de la médiane




A la suite de l’article précédent poursuivons nos travaux sur une autre caractéristique de tendance centrale, la médiane. La médiane d'un série est la  valeur qui partage cette série en deux séries aux effectifs égaux. Dans la première les valeurs inférieures à la médiane et les valeurs supérieurs dans la seconde série. Nous ne considérons bien sur que des données quantitatives et nous envisagerons dans cet article deux hypothèses :

Hypothèse 1 : Effectif impair sans valeur répétée

Soit ici un effectif de 5 chiffres, qu'il faut d'abord  classés par ordre croissant, puis déterminer la valeur de la position qui partage l'effectif total en deux sous effectifs égaux en appliquant la formule (n + 1) / 2
Ainsi il a été utilisé ici la fonction =MEDIANE(B2:B6) dans le tableau de gauche, et dans le tableau ci-dessous une détermination de la position grâce à la fonction =NB() puis la récupération de la valeur de cette position à l'aide de la fonction =INDEX( ).
Bien sur il convient de vérifier qu'il y a bien partage de l'effectif en deux parties égales.


Hypothèse 2 : Effectif pair sans valeur répétée

Quand l'effectif est pair, la médiane n'est pas une valeur de la série. Soit ici un effectif de 8 chiffres, qu'il faut d'abord  classés par ordre croissant, puis appliquer la formule (n + 1) / 2, ce qui indique l'intervalle médian, ici entre la 4éme et la 5éme valeur. La médiane est donc = ( 7 + 9 ) / 2.
Donc la médiane est égale à la moyenne arithmétique. Bien sur il convient de vérifier qu'il y a bien partage de l'effectif en deux parties égales.
Dans le tableau de gauche on obtient directement le résultat à l'aide de la fonction =MEDIANE(B2:B9), dans le tableau ci dessous la méthode pour déterminer l'intervalle médian puis les 2 valeurs de l'intervalle, à l'aide des fonctions =ARRONDI.INF( ) et ARRONDI.SUP().









Merci de votre attention... 


top