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 :

Macro pour renommer des images mais sans personnalisation (chemin Documents)


Sujet :

Macros et VBA Excel

  1. #1
    Candidat au Club
    Femme Profil pro
    Responsable marketing opérationnel
    Inscrit en
    Novembre 2020
    Messages
    4
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Responsable marketing opérationnel

    Informations forums :
    Inscription : Novembre 2020
    Messages : 4
    Points : 2
    Points
    2
    Par défaut Macro pour renommer des images mais sans personnalisation (chemin Documents)
    Bonjour à tous

    j'ai créé une macro afin de

    1/obtenir une liste de noms de documents dans un dossier

    2/ de renommer les images du dossier à partir d'une liste

    Le souci, c'est que la formule que j'ai créé m'oblige a avoir le chemin du dossier à chaque fois... et évidemment cela change d'un Utilisateur à l'autre.
    J'aimerais donc faire un sorte que par exemple, dans une Feuille1, dans la celulle A1, il suffit de copier coller le chemin du dossier et que je n'ai plus besoin de personnaliser à chaque fois la macro dans ma formule.

    Mais je ne sais pas vraiment comment faire, toutes mes tentatives se sont soldées par une échec. Une idée ?

    Voici mes 2 codes VBA - en bleu le chemin du dossier que j'aimerai avoir dans une cellule - ma macro s'appelle BEE-RENAMER


    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
    Sub ChangeNom()
     Dim LastRow2 As Long
        Dim k As Long
        LastRow2 = Range("A" & Rows.Count).End(xlDown).Row
     
        For k = 2 To 5000
     
        Dim AncienNom As String, NouveauNom As String
        AncienNom = "C:\Users\XXXXX\Documents\BEE-RENAMER\" & Range("A" & k)
        NouveauNom = "C:\Users\XXXXX\OneDrive - Robert Bosch GmbH\Documents\BEE-RENAMER\" & Range("B" & k)
        On Error Resume Next
        Name AncienNom As NouveauNom
        If Err = 75 Then Exit Sub
        Next k
    End Sub
    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
    Sub ListeFichiersRepert()
    Dim Fso  As Object
    Dim MonRepertoire As String, f As Object, x As Integer
    Dim f1 As Object, f2 As Object
    Set Fso = CreateObject("Scripting.FileSystemObject")
    MonRepertoire = "C:\Users\XXXXX\Documents\BEE-RENAMER\"
    x = 1
    For Each f In Fso.GetFolder(MonRepertoire).Files
        Cells(x, 1).Value = f.Name
        x = x + 1
    Next f
    x = 1
    For Each f1 In Fso.GetFolder(MonRepertoire).SubFolders
        Cells(x, 2).Value = f1.Name
        x = x + 1
        For Each f2 In f1.Files
            Cells(x - 1, 3).Value = f2.Name
            x = x + 1
        Next f2
        x = x - 1
    Next f1
    End Sub

    Merci par avance pour votre aide

  2. #2
    Responsable
    Office & Excel


    Homme Profil pro
    Formateur et développeur chez EXCELLEZ.net
    Inscrit en
    Novembre 2003
    Messages
    19 124
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 57
    Localisation : Belgique

    Informations professionnelles :
    Activité : Formateur et développeur chez EXCELLEZ.net
    Secteur : Enseignement

    Informations forums :
    Inscription : Novembre 2003
    Messages : 19 124
    Points : 55 905
    Points
    55 905
    Billets dans le blog
    131
    Par défaut
    Salut.

    Pour un ou deux paramètres, tu peux utiliser une cellule nommée en Excel que tu adresses en VBA. Pour plus de paramètres, je passerais pas un tableau structuré:

    Nom : 2021-05-15_063515.png
Affichages : 271
Taille : 25,5 Ko


    Pour nommer la cellule, tu ta sélectionnes puis, dans la zone de noms à gauche de la barre de formule, tu saisis simplement le nom souhaité et tu valides par ENTER (Ne pas oublier!). De cette façon, ce nom vaut pour tout le classeur et tu peux l'utiliser comme une adresse de cellules en VBA.


    Tu peux également récupérer le chemin de certains dossiers spéciaux avec ceci (voir la faq pour toutes les valeurs). En passant 5 comme valeur, tu récupères le chemin de "mes documents":
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    Function GetSpecialPath(Value) As String
      Dim oShell As Object
      Dim Item As Object
     
      On Error GoTo Catch:
      Set oShell = CreateObject("Shell.Application")
      GetSpecialPath = oShell.Namespace(Value).self.Path
      Set oShell = Nothing
     
    Catch:
      Err.Clear
    End Function

  3. #3
    Candidat au Club
    Femme Profil pro
    Responsable marketing opérationnel
    Inscrit en
    Novembre 2020
    Messages
    4
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Responsable marketing opérationnel

    Informations forums :
    Inscription : Novembre 2020
    Messages : 4
    Points : 2
    Points
    2
    Par défaut
    Citation Envoyé par Pierre Fauconnier Voir le message
    Salut.
    Pour nommer la cellule, tu ta sélectionnes puis, dans la zone de noms à gauche de la barre de formule, tu saisis simplement le nom souhaité et tu valides par ENTER (Ne pas oublier!). De cette façon, ce nom vaut pour tout le classeur et tu peux l'utiliser comme une adresse de cellules en VBA.
    Ah du coup j'ai essayé mais je pense qu'il manque encore quelque chose, rien ne s'exécute.

    Nom : Macro.JPG
Affichages : 200
Taille : 37,9 Ko

    J'ai mis l'Excel ici pour voir

    Bee-renamer-TEST.xlsm

    Une idée de ce que je n'ai pas fait correctement ?

  4. #4
    Responsable
    Office & Excel


    Homme Profil pro
    Formateur et développeur chez EXCELLEZ.net
    Inscrit en
    Novembre 2003
    Messages
    19 124
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 57
    Localisation : Belgique

    Informations professionnelles :
    Activité : Formateur et développeur chez EXCELLEZ.net
    Secteur : Enseignement

    Informations forums :
    Inscription : Novembre 2003
    Messages : 19 124
    Points : 55 905
    Points
    55 905
    Billets dans le blog
    131
    Par défaut
    chez moi, ça fonctionne bien et je récupère bien le chemin...

    Cela dit, je travaillerais avec une récursive ET un tableau structuré (voir mon tuto sur les tableaux structurés)


    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
    Sub Run()
      Dim fso As Object
     
      Application.ScreenUpdating = False
      If Not Range("t_Fichiers").ListObject.DataBodyRange Is Nothing Then Range("t_Fichiers").ListObject.DataBodyRange.Delete
      Set fso = CreateObject("Scripting.FilesystemObject")
      ListerFichiers fso, Range("chemin")
      Application.ScreenUpdating = True
    End Sub
     
    Sub ListerFichiers(fso As Object, Chemin As String)
      Dim Folder As Object, File As Object
      Dim i As Long
     
      For Each File In fso.getfolder(Chemin).Files
        i = Range("t_Fichiers").ListObject.ListRows.Add.Index
        Range("t_Fichiers[fichier]")(i).Value = File.Path
      Next
      For Each Folder In fso.getfolder(Chemin).subfolders
        ListerFichiers fso, Folder.Path
      Next
    End Sub

    Ceci dit, fso pour récupérer juste le nom des fichiers est assez lent, et perso je préfère un dir récursif...
    Fichiers attachés Fichiers attachés

  5. #5
    Candidat au Club
    Femme Profil pro
    Responsable marketing opérationnel
    Inscrit en
    Novembre 2020
    Messages
    4
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Responsable marketing opérationnel

    Informations forums :
    Inscription : Novembre 2020
    Messages : 4
    Points : 2
    Points
    2
    Par défaut
    Bonjour,

    Merci pour l'aide

    Argh effectivement cela ne marche toujours pas. Voilà ce qui s'affiche quand je demande le débogage

    Nom : MacroBug.JPG
Affichages : 240
Taille : 68,5 Ko

    Je pense qu'il reconnait le Chemin mais la macro ne s'exécute pas jusqu'au bout. J'avoue ne pas très bien savoir pourquoi.


    Je tenterai le tableau et le dir recursif j'ai juste peur que ça me change tout mon code... et il y a un 2ème module qui a besoin de ça.

  6. #6
    Responsable
    Office & Excel


    Homme Profil pro
    Formateur et développeur chez EXCELLEZ.net
    Inscrit en
    Novembre 2003
    Messages
    19 124
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 57
    Localisation : Belgique

    Informations professionnelles :
    Activité : Formateur et développeur chez EXCELLEZ.net
    Secteur : Enseignement

    Informations forums :
    Inscription : Novembre 2003
    Messages : 19 124
    Points : 55 905
    Points
    55 905
    Billets dans le blog
    131
    Par défaut
    Ton code dit MonRepertoire = "chemin". Le fso cherche donc un répertoire nommé "chemin" ^^
    Tu dois écrire MonRepertoire = Range("Chemin").Value.


    Au passage, ton code ne contient pas "Option Explicit" en début de module => Tu devrais... (Voir mon billet à ce sujet)

  7. #7
    Candidat au Club
    Femme Profil pro
    Responsable marketing opérationnel
    Inscrit en
    Novembre 2020
    Messages
    4
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Responsable marketing opérationnel

    Informations forums :
    Inscription : Novembre 2020
    Messages : 4
    Points : 2
    Points
    2
    Par défaut
    Bonjour

    Super merci ça marche à présent ! Je vais lire de ce pas également tous les liens pour améliorer tout ça et me perfectionner

    Je mets la formule complète de la macro pour obtenir la liste au cas où pour ceux que ça intéresse et je ferai la modification sur la macro de renommage des images

    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
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    Sub ListeFichiersRepert()
    Dim fso  As Object
    Dim MonRepertoire As String, f As Object, x As Integer
    Dim f1 As Object, f2 As Object
    Set fso = CreateObject("Scripting.FileSystemObject")
    MonRepertoire = Range("Chemin").Value(B1)
     
    x = 1
    For Each f In fso.getfolder(MonRepertoire).Files
        Cells(x, 1).Value = f.Name
        x = x + 1
    Next f
    x = 1
    For Each f1 In fso.getfolder(MonRepertoire).subfolders
        Cells(x, 2).Value = f1.Name
        x = x + 1
        For Each f2 In f1.Files
            Cells(x - 1, 3).Value = f2.Name
            x = x + 1
        Next f2
        x = x - 1
    Next f1
    End Sub
     
    Sub Run()
      Dim fso As Object
     
      Application.ScreenUpdating = False
      If Not Range("t_Fichiers").ListObject.DataBodyRange Is Nothing Then Range("t_Fichiers").ListObject.DataBodyRange.Delete
      Set fso = CreateObject("Scripting.FilesystemObject")
      ListerFichiers fso, Range("chemin")
      Application.ScreenUpdating = True
    End Sub
     
    Sub ListerFichiers(fso As Object, Chemin As String)
      Dim Folder As Object, File As Object
      Dim i As Long
     
      For Each File In fso.getfolder(Chemin).Files
        i = Range("t_Fichiers").ListObject.ListRows.Add.Index
        Range("t_Fichiers[fichier]")(i).Value = File.Path
      Next
      For Each Folder In fso.getfolder(Chemin).subfolders
        ListerFichiers fso, Folder.Path
      Next
    End Sub
    Avec le chemin du dossier en celulle B1 donc

    et voici ce que j'ai pour le renommage de fichier en masse

    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
    Sub ChangeNom()
     Dim LastRow2 As Long
        Dim k As Long
        LastRow2 = Range("A" & Rows.Count).End(xlDown).Row
     
        For k = 2 To 5000
     
        Dim AncienNom As String, NouveauNom As String
        AncienNom = Range("Chemin").Value(G1) & Range("A" & k)
        NouveauNom = Range("Chemin").Value(G1) & Range("B" & k)
        On Error Resume Next
        Name AncienNom As NouveauNom
        If Err = 75 Then Exit Sub
        Next k
    End Sub
    Avec le chemin du dossier en celulle D1 donc

    Je nettoierai tout cela dans un 2ème temps

    En grand merci pour votre aide

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Macro pour convertir des images en dicom
    Par duflo dans le forum ImageJ
    Réponses: 2
    Dernier message: 13/07/2013, 16h55
  2. [XL-2010] Macro pour renommer des fichiers à partir d'une liste de nom de fichiers
    Par thomahh dans le forum Macros et VBA Excel
    Réponses: 7
    Dernier message: 25/01/2013, 17h03
  3. Réponses: 6
    Dernier message: 28/01/2009, 13h32
  4. Fonction (ou macro) pour incorporer des images dans Excel
    Par metis dans le forum Macros et VBA Excel
    Réponses: 3
    Dernier message: 24/05/2007, 13h34
  5. [VBA-PP] macro pour insérer des images dans PowerPoint
    Par mashpro dans le forum VBA PowerPoint
    Réponses: 4
    Dernier message: 01/08/2006, 22h56

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