IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Macros et VBA Excel Discussion :

Gestion et suppression de fichiers


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Inscrit en
    Octobre 2010
    Messages
    16
    Détails du profil
    Informations forums :
    Inscription : Octobre 2010
    Messages : 16
    Par défaut Gestion et suppression de fichiers
    Hello à tous,

    Je sèche lamentablement sur mon sujet depuis 2 jours.
    Pour mon activité photo je produis 2 type de fichiers, des jpg que tout le monde connait et leur équivalent au format Raw (extension .nef)
    J'ai donc dans un répertoire et un disque qui peut varier un dossier qui contient autant des fichiers portant le même nom, une série avec extension jpg, une autre série avec extension .nef.

    Exemple du contenu du repertoire avant l'editing:

    AAAA-1.jpg
    AAAA-1.nef
    BBBB-1.jpg
    BBBB-2.nef
    CCCC-1.jpg
    CCCC-1.nef
    DDDD-1.jpg
    DDDD-2.nef

    Le format jpg me sert pour l'editing et me permet de faire le tri, soit je garde soit je jette et donc je supprime le fichier jpg directement dans ma visionneuse.

    Exemple du contenu du répertoire après l'editing:

    AAAA-1.nef
    BBBB-1.jpg
    BBBB-2.nef
    CCCC-1.nef
    DDDD-1.jpg
    DDDD-2.nef

    Vous aurez compris que le but du jeu est qu'une fois l'editing terminé je voudrais supprimer automatiquement le fichier .nef associé au .jpg qui a été supprimé et donc ne garder que les fichiers qui sont encore en couple jpg + nef.

    Mon premier problème est de faire pointer vers le répertoire à analyser à l'aide de l'explorateur.


    Merci de votre aide !

    M

  2. #2
    pgz
    pgz est déconnecté
    Expert confirmé Avatar de pgz
    Homme Profil pro
    Développeur Office VBA
    Inscrit en
    Août 2005
    Messages
    3 692
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 72
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Office VBA
    Secteur : Conseil

    Informations forums :
    Inscription : Août 2005
    Messages : 3 692
    Par défaut
    Bonjour.

    Voici un exemple de code, pour l'idée car je n'ai pas testé. Il y a de nombreuses façons de faire, mais ici j'utilise la bibliothèque IWSH, à cocher dans les références.
    On commence par ouvrir une boîte de dialogue pour désigner le dossier à nettoyer. Ensuite, on scrute le contenu. Pour chaque fichier .jpg, on cherche un .nef du même nom. Si on ne le trouve pas, on efface le .jpg
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    Sub subNettoieRepertoirePhoto()
    '** utilise : Windows Script Host Object Model ***************************
    Dim fso As IWshRuntimeLibrary.FileSystemObject, oFold As IWshRuntimeLibrary.Folder, oFle As IWshRuntimeLibrary.File
    Dim oFD As Office.FileDialog, sPath As String, sName As String
     
    'Ouverture d'une boîte de dialogue pour désigner le répertoire
    Set oFD = Application.FileDialog(msoFileDialogFolderPicker)
    oFD.AllowMultiSelect = False
    oFD.Title = "Designer le repertoire à nettoyer."
    oFD.Show
     
    If oFD.SelectedItems.Count = 0 Then GoTo lblExit
     
    sPath = oFD.SelectedItems(1)
     
    Set fso = New IWshRuntimeLibrary.FileSystemObject
    Set oFold = fso.GetFolder(sPath)
     
    'Scruter le contenu du répertoire : on cherche les fichiers .jpg ou .JPG. Si le fichier ;nef du même nom n'existe pas, on supprime.
    For Each oFle In oFold.Files
        If StrConv(oFle.Name, vbUpperCase) Like "*.JPG" Then
            sName = Mid$(oFle.Name, 1, Len(fle.Name) - 4)
            If Not fso.FileExists(sPath & "\" & sName & ".nef") Then oFle.Delete (True)
        End If
    Next oFle
     
    lblExit:
        Set fso = Nothing
        Set oFold = Nothing
        Set oFle = Nothing
        Set oFD = Nothing
     
    End Sub
    Tu auras à mettre au point.

    Cordialement,

    PGZ

  3. #3
    Membre averti
    Inscrit en
    Octobre 2010
    Messages
    16
    Détails du profil
    Informations forums :
    Inscription : Octobre 2010
    Messages : 16
    Par défaut
    Bonjour et merci pour ta réponse.

    J'ai une petit soucis sur les déclarations avec
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Dim fso As IWshRuntimeLibrary.FileSystemObject
    J'ai un retour "Type défini par l'utilisateur non défini" et là je maitrise pas du tout.

  4. #4
    pgz
    pgz est déconnecté
    Expert confirmé Avatar de pgz
    Homme Profil pro
    Développeur Office VBA
    Inscrit en
    Août 2005
    Messages
    3 692
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 72
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Office VBA
    Secteur : Conseil

    Informations forums :
    Inscription : Août 2005
    Messages : 3 692
    Par défaut
    Bonjour.

    Comme je te l'indiquais, il faut dans les références (sous éditeur VB, menu Outils, commande Références) cocher la bibliothèque : Windows script host object model.

    PGZ

  5. #5
    Expert confirmé
    Avatar de Oliv-
    Homme Profil pro
    solution provider
    Inscrit en
    Mars 2006
    Messages
    4 093
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : solution provider

    Informations forums :
    Inscription : Mars 2006
    Messages : 4 093
    Billets dans le blog
    20
    Par défaut
    Voic une autre fonction te permettant de choisir le répertoire.

    pour supprimer un fichier utilise simplement kill ("chemin du fichier")

    Pour la manipulation de fichiers regarde http://warin.developpez.com/access/fichiers/

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    Function BrowseForFolder(Title As String) As String
        Dim objShell As Object
        Dim ssfWINDOWS As Long
        Dim objFolder As Object
     
        ssfWINDOWS = 36
        Set objShell = CreateObject("Shell.Application")
     
        Set objFolder = objShell.BrowseForFolder(0, Title, 0, ssfWINDOWS)
        If (Not objFolder Is Nothing) Then
            BrowseForFolder = objFolder.self.Path & "\"
            'Add code here
        End If
        Set objFolder = Nothing
        Set objShell = Nothing
    End Function
    Have a nice day. Oliv'
    Votre réponse est peut être dans mon blog !
    https://www.developpez.net/forums/blogs/191381-oliv-/

Discussions similaires

  1. [BATCH]Suppression de fichier
    Par alxkid dans le forum Scripts/Batch
    Réponses: 2
    Dernier message: 21/04/2004, 13h25
  2. Réponses: 4
    Dernier message: 16/04/2004, 08h20
  3. Auto suppression de fichier
    Par pato dans le forum Langage
    Réponses: 4
    Dernier message: 05/03/2004, 09h09
  4. Gestion des permissions des fichiers sur NTFS
    Par gnu_thomas dans le forum MFC
    Réponses: 3
    Dernier message: 22/01/2004, 08h22
  5. Suppression de fichiers
    Par wasch dans le forum C++Builder
    Réponses: 6
    Dernier message: 20/11/2003, 16h37

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo