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 :

Renommer des photos selon 2 colonnes


Sujet :

Macros et VBA Excel

  1. #1
    Membre à l'essai
    Profil pro
    Inscrit en
    Avril 2008
    Messages
    58
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2008
    Messages : 58
    Points : 19
    Points
    19
    Par défaut Renommer des photos selon 2 colonnes
    Bonjour à tous,

    Apres le franc succes que j'ai rencontré grace à votre aide lors d'une précédente demande, je reviens vous solliciter...

    Mon besoin est relativement simple (enfin je pense) :
    je dois renommer des fichiers grâce à la correspondance entre 2 colonnes.

    j'ai :
    > un repertoire contenant environ 600 fichiers (des .jpg en l'occurence) nommés grâce à leur numéro d'ordre (1.jpg , 2.jpg, 3.jpg...)

    > un fichier excel avec 2 colonnes : une comprennant les numéros d'ordre (1, 2, 3...) l'autre avec les nouveaux noms à attribuer aux *.jpg

    Je suppose qu'il doit y avoir quelque chose du genre:
    "Name [colonne A] As [colonne B]" mais bon, je ne suis pas expert, loin de là...

    Comment pourrais-je procéder?

    Merci d'avance

  2. #2
    Membre confirmé Avatar de Commodore
    Homme Profil pro
    Business manager
    Inscrit en
    Février 2004
    Messages
    599
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Business manager

    Informations forums :
    Inscription : Février 2004
    Messages : 599
    Points : 632
    Points
    632
    Par défaut
    Il te faut un FSO (FileSystemObject)

    Cf FAQ pour l'utilisation de cet objet.

    C'est ce qu'il y a de mieux pour faire ceci. Tu auras à définir un répertoire, parcourir la collection de fichier qui s'y trouve puis renommer en fonction de ton tableau.

    Si tu veux un exemple, il n'y a qu'à demander.

    edit: référence à cocher :
    Citation Envoyé par FAQ
    Dans le Menu Projet >> Références >> Ajoutez la librairie Microsoft Scripting Runtime. Le fichier correspondant se nomme scrrun.dll

    edit2: pour aider encore +, voici le lien FAQ où tu devrais trouver tout le nécessaire à propos du FSO
    http://vb.developpez.com/faq/?page=Fichiers#fso

  3. #3
    Membre à l'essai
    Profil pro
    Inscrit en
    Avril 2008
    Messages
    58
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2008
    Messages : 58
    Points : 19
    Points
    19
    Par défaut
    D'abord merci pour la collaboration...

    J'ai donc activé la case "Microsoft Scripting Runtime" dans "outils>références".

    Par contre, je suis super novice en VB, je voudrais bien un exemple pour me lancer.

    Pour definir la repertoire je peux imaginer comment faire, mais pour choisir les colonnes et renommer les fichiers c'est une autre affaire...

    (non, je ne suis pas un assisté):lol:

  4. #4
    Membre confirmé Avatar de Commodore
    Homme Profil pro
    Business manager
    Inscrit en
    Février 2004
    Messages
    599
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Business manager

    Informations forums :
    Inscription : Février 2004
    Messages : 599
    Points : 632
    Points
    632
    Par défaut
    Si tu stockes en colonne B les répertoires à parcourir, et que tu veux afficher dans la msgbox les fichiers présents dans ces répertoires :

    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
        Dim FSO As New FileSystemObject
     
        Dim fi As File
        Dim fo As Folder
     
        Dim ligne As Integer
     
        ligne = 1
     
        'parcourir tous les fichiers d'un répertoire
        While Feuil1.Range("B" & ligne) <> Empty
            Set fo = FSO.GetFolder(Feuil11.Range("B" & ligne).Value)
            For Each fi In fo.Files
                FSO.GetFile (fi.Path)
                MsgBox fi.Name
            Next fi
            ligne = ligne + 1
        Wend
    Cela te convient-il ? ou peut être souhaites tu plus de détail sur un point particulier ?

  5. #5
    Inactif  
    Avatar de ouskel'n'or
    Profil pro
    Inscrit en
    Février 2005
    Messages
    12 464
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2005
    Messages : 12 464
    Points : 15 546
    Points
    15 546
    Par défaut
    Ou, sans avoir à valider la référenc scripting runtime et pour placer les noms dans la feuille de calculs "Feuil1"
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    Sub DirNomsFichiers()
    Dim Chemin, NomFich As Variant, i as integer
        Chemin = "D:\Rep Images\"
        NomFich = Dir(Chemin & "*.jpg")
        If NomFich = "" Then Exit Sub
        Do While NomFich <> ""
            i = i + 1
            Worksheets("feuil1").Cells(i, 1) = i
            Worksheets("feuil1").Cells(i, 2) = Left(NomFich, Len(NomFich) - 4)
            NomFich = Dir
        Loop
    End Sub
    (Plus rapide)
    Pour affecter les noms à tes images on a besoin de savoir si elles sont dans un contrôle image ou non.
    Mais je t'avoue que je n'ai pas bien compris ce que tu veux faire

  6. #6
    Membre confirmé Avatar de Commodore
    Homme Profil pro
    Business manager
    Inscrit en
    Février 2004
    Messages
    599
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Business manager

    Informations forums :
    Inscription : Février 2004
    Messages : 599
    Points : 632
    Points
    632
    Par défaut
    Je crois qu'il a un répertoire dans lequel il veut renommer les fichiers suivant un tableau excel sur 2 colonnes.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    .  COL A   |   COL B
    Ancien nom | Nouveau nom

  7. #7
    Membre à l'essai
    Profil pro
    Inscrit en
    Avril 2008
    Messages
    58
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2008
    Messages : 58
    Points : 19
    Points
    19
    Par défaut
    Citation Envoyé par Commodore_Psykopate Voir le message
    Si tu stockes en colonne B les répertoires à parcourir, et que tu veux afficher dans la msgbox les fichiers présents dans ces répertoires :
    Je n'ai qu'un seul répertoire avec toutes mes photos.

    Mais je t'avoue que je n'ai pas bien compris ce que tu veux faire
    Je souhaite renommer des fichiers .jpg contenus dans un répertoire.
    Pour cela j'ai 2 colonnes "anciens nom" et "nouveau nom".

    J'espere etre assez clair dans mes explications...

  8. #8
    Membre à l'essai
    Profil pro
    Inscrit en
    Avril 2008
    Messages
    58
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2008
    Messages : 58
    Points : 19
    Points
    19
    Par défaut
    Citation Envoyé par Commodore_Psykopate Voir le message
    Je crois qu'il a un répertoire dans lequel il veut renommer les fichiers suivant un tableau excel sur 2 colonnes.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    .  COL A   |   COL B
    Ancien nom | Nouveau nom
    Exactement !

  9. #9
    Membre confirmé Avatar de Commodore
    Homme Profil pro
    Business manager
    Inscrit en
    Février 2004
    Messages
    599
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Business manager

    Informations forums :
    Inscription : Février 2004
    Messages : 599
    Points : 632
    Points
    632
    Par défaut
    Allez, travail mâché:

    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
    Dim FSO As New FileSystemObject
        Dim fi As File
        Dim fo As Folder
        Dim ligne As Integer
     
        ligne = 1
        Set fo = FSO.GetFolder("C:/Mon/Repertoire/A/Parcourir/")
     
        'parcourir tous les fichiers
        While Range("A" & ligne) <> Empty
            For Each fi In fo.Files
                If fi.Name = Range("A" & ligne).Value Then fi.Name = Range("B" & ligne).Value
            Next fi
            ligne = ligne + 1
        Wend

  10. #10
    Inactif  
    Avatar de ouskel'n'or
    Profil pro
    Inscrit en
    Février 2005
    Messages
    12 464
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2005
    Messages : 12 464
    Points : 15 546
    Points
    15 546
    Par défaut
    Alors c'est plus simple
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    Chemin = "C:\TonRep\"
    For i = 1 to range("A65535").End(xlup).row
         Oldname = Chemin & cells(i,1)
         NewName = Chemin & Cells(i,2)
         Name oldname as newname
    Next
    Edit
    J'avais une erreur... J'ai corrigé !
    Edit (bis)
    J'avais une seconde erreur... J'ai corrigé

  11. #11
    Membre confirmé Avatar de Commodore
    Homme Profil pro
    Business manager
    Inscrit en
    Février 2004
    Messages
    599
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Business manager

    Informations forums :
    Inscription : Février 2004
    Messages : 599
    Points : 632
    Points
    632
    Par défaut
    Faut croire que j'ai l'art de me compliquer la vie Ousk

  12. #12
    Inactif  
    Avatar de ouskel'n'or
    Profil pro
    Inscrit en
    Février 2005
    Messages
    12 464
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2005
    Messages : 12 464
    Points : 15 546
    Points
    15 546
    Par défaut
    Citation Envoyé par Commodore_Psykopate Voir le message
    Faut croire que j'ai l'art de me compliquer la vie Ousk
    Sauf si j'ai encore mal compris

    PS - D'ailleurs j'avais une erreur que j'ai corrigée... enfin, je crois...

  13. #13
    Membre à l'essai
    Profil pro
    Inscrit en
    Avril 2008
    Messages
    58
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2008
    Messages : 58
    Points : 19
    Points
    19
    Par défaut
    Citation Envoyé par ouskel'n'or Voir le message
    Alors c'est plus simple
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    Chemin = "C:\TonRep\"
    For i = 1 to range("A65535").End(xlup).row
         Oldname = Chemin & cells(i,1)
         NewName = Chemin & Cells(i,2)
         Names oldname as newname
    Next
    Edit
    J'avais une erreur... J'ai corrigé !
    Il ne manquerait pas qlq chose dans "oldname" et "newname" car le chemin fait référence à mon répertoire (celui qui contient les .jpg) et nom pas mon fichier excel...non??

    Il y a un "S" à "Names" ?

  14. #14
    Inactif  
    Avatar de ouskel'n'or
    Profil pro
    Inscrit en
    Février 2005
    Messages
    12 464
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2005
    Messages : 12 464
    Points : 15 546
    Points
    15 546
    Par défaut
    Il y a un "S" à "Names" ?
    Non
    Pour le répertoire, tu mets celui qui contient les jpg, bien sûr ! J'espère que tu le connais sinon, il y a moyen de le trouver mais... c'est plus long
    Tu dis
    A+

  15. #15
    Membre à l'essai
    Profil pro
    Inscrit en
    Avril 2008
    Messages
    58
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2008
    Messages : 58
    Points : 19
    Points
    19
    Par défaut
    Citation Envoyé par Commodore_Psykopate Voir le message
    Allez, travail mâché:

    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
    Dim FSO As New FileSystemObject
        Dim fi As File
        Dim fo As Folder
        Dim ligne As Integer
     
        ligne = 1
        Set fo = FSO.GetFolder("C:/Mon/Repertoire/A/Parcourir/")
     
        'parcourir tous les fichiers
        While Range("A" & ligne) <> Empty
            For Each fi In fo.Files
                If fi.Name = Range("A" & ligne).Value Then fi.Name = Range("B" & ligne)
            Next fi
            ligne = ligne + 1
        Wend
    Effectivement, il semble qu'il se passe qlq chose (ça "mouline").
    Mais apparemment, pas de changement de nom...

  16. #16
    Membre à l'essai
    Profil pro
    Inscrit en
    Avril 2008
    Messages
    58
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2008
    Messages : 58
    Points : 19
    Points
    19
    Par défaut
    Citation Envoyé par ouskel'n'or Voir le message
    Non
    Pour le répertoire, tu mets celui qui contient les jpg, bien sûr ! J'espère que tu le connais sinon, il y a moyen de le trouver mais... c'est plus long
    Tu dis
    A+
    Oui je connais mon repertoire

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    Sub renomme()
     
    Chemin = "C:\Mon_rep\"
    For i = 1 To Range("A65535").End(xlUp).Row
         oldname = Chemin & Cells(i, 1)
         newname = Chemin & Cells(i, 2)
         Name oldname As newname
     
    Next
     
    End Sub
    Il me dit : "fichier introuvable"...
    J'ai essayé en changeant "oldname = Chemin & Cells" par "oldname = Worksheet & Cells" mais rien à faire...

    Désolé, je ne suis pas vraiement doué en VB, Merci pour votre patience...

  17. #17
    Membre confirmé Avatar de Commodore
    Homme Profil pro
    Business manager
    Inscrit en
    Février 2004
    Messages
    599
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Business manager

    Informations forums :
    Inscription : Février 2004
    Messages : 599
    Points : 632
    Points
    632
    Par défaut
    oué, la boucle peut bien évidemment être revue pour + de rapidité, là c'est du 100% pur bourrin. ()
    Et vérifie que tu as bien en col A tes index 1,2,3,4,5... et en B tes nouveaux noms.
    Après, je l'ai fait "à main levée", Ousk, tu vois une erreur ?

  18. #18
    Membre à l'essai
    Profil pro
    Inscrit en
    Avril 2008
    Messages
    58
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2008
    Messages : 58
    Points : 19
    Points
    19
    Par défaut
    La rapidité n'est pas un souci (ni le mode bourrin d'ailleurs ).
    J'ai bien les bonnes infos dans les bonnes colonnes...
    Comprends pas

  19. #19
    Membre confirmé Avatar de Commodore
    Homme Profil pro
    Business manager
    Inscrit en
    Février 2004
    Messages
    599
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Business manager

    Informations forums :
    Inscription : Février 2004
    Messages : 599
    Points : 632
    Points
    632
    Par défaut
    Si mon code mouline c'est que ça pue la boucle infinie...

    edit: j'ai pas trouvé d'erreur, si ce n'est le .Value manquant dans la ligne où je renomme le fichier...

    As-tu aussi mis les extensions des fichiers dans tes colonnes excel ?

  20. #20
    Inactif  
    Avatar de ouskel'n'or
    Profil pro
    Inscrit en
    Février 2005
    Messages
    12 464
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2005
    Messages : 12 464
    Points : 15 546
    Points
    15 546
    Par défaut
    Citation Envoyé par le psy
    Ousk, tu vois une erreur ?
    De quel code parles-tu ? Quel N° de post(e) ?

+ Répondre à la discussion
Cette discussion est résolue.
Page 1 sur 2 12 DernièreDernière

Discussions similaires

  1. Renommer des fichiers selon le dossier
    Par asx1204 dans le forum Scripts/Batch
    Réponses: 0
    Dernier message: 23/09/2014, 13h10
  2. Afficher des valeurs selon les colonnes
    Par valmelissa dans le forum Oracle
    Réponses: 6
    Dernier message: 05/10/2012, 16h53
  3. [FPDF] renommer des PDF par lot selon leurs contenus
    Par Gabor3D dans le forum Bibliothèques et frameworks
    Réponses: 1
    Dernier message: 06/01/2008, 13h55
  4. [MySQL] Trier des données selon l'entête de colonne
    Par Bibbe dans le forum PHP & Base de données
    Réponses: 4
    Dernier message: 11/11/2007, 02h17
  5. [CSV] Renommer des photos sur une correspondance excel
    Par thomasfla dans le forum Langage
    Réponses: 3
    Dernier message: 04/04/2007, 16h33

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