Besoin d'aide VBA renommer des fichier [Résolu/Fermé]

Signaler
Messages postés
17
Date d'inscription
lundi 2 juillet 2007
Statut
Membre
Dernière intervention
19 mai 2010
-
Messages postés
17
Date d'inscription
lundi 2 juillet 2007
Statut
Membre
Dernière intervention
19 mai 2010
-
Bonjour tout le monde,
Bonne année, et tout mes meilleurs voeux pour 2008.

Je dois fair un programme en vba sous Excel qui permet de copié et de renommer des fichiers (photos).
Je possède dans la colonne L les noms des photos, et dans la colonne M les nouveaux noms que je dois leur attribuées.
Ce dossier se trouve sur le résaux.
J'ai commencé quelque chose mais sa ne marche pas. Quelqu'un peut-il m'aider?
Ai-je utilisé la melleur méthode?
J'ai due fair bcp d'erreur je pense.


Je suis allé cocher dans Outils, Références, « Microsoft Scripting Runtime »


Sub renommer_photo()

'déclaration des variables

Dim ancien_nom As String 'va enregistrer l'ancien nom de la photo
Dim nouveau_nom As String 'va enregistrer le nouveau nom de la photo
Dim i As Integer
Dim dernligne As Integer 'cette variable va rechercher la derniere ligne du tableau
Dim j As Integer
Dim oFSO As Scripting.FileSystemObject
Dim oDrv As Scripting.Drive
Dim oFld As Folder
Dim oFl As Scripting.File


Sheets("Feuil1").Select

'recherche de la derniere ligne

i = 1
Cells(i, 12).Select
Do
i = i + 1
Loop Until Cells(i, 12) = "" And Cells(i + 1, 12) = "" And Cells(i + 2, 12) = ""
dernligne = i - 1


'Instanciation du FSO
Set oFSO = New Scripting.FileSystemObject

'enregistrement des noms (ancien et nouveau) de la photo en renomme les fichiers
For j = 2 To dernligne
ancien_nom = Cells(j, 12).Value & ".eps" '.eps est l'extansion de la photo
nouveau_nom = Cells(j, 13).Value & ".eps"

'Instanciation de l'objet File
If oFSO.FileExists("U:\Images2\" & ancien_nom) Then
Set oFl = oFSO.GetFile("U:\Images2\" & ancien_nom)
End If

'copie du fichier
oFl.Copy "U:\image_renomée2\" & nouveau_nom, True

Next j

End Sub


Merci pour votre aide!
Et encor bonne année !

26 réponses

Messages postés
17
Date d'inscription
lundi 2 juillet 2007
Statut
Membre
Dernière intervention
19 mai 2010
1
Si j'enregistre le chemin d'accès dans une variable (enfin plutot une constante). Quel type dois-je mettre? un string?
1
Merci

Quelques mots de remerciements seront grandement appréciés. Ajouter un commentaire

CCM 63550 internautes nous ont dit merci ce mois-ci

Bonjour

Je n'ai pas essayé ton script, mais :
Loop Until Cells(i, 12) = "" And Cells(i + 1, 12) = "" And Cells(i + 2, 12) = ""
ce ne serait pas plutôt
Loop Until Cells(i, 12) = "" And Cells(i , 13) = "" And Cells(i, 14) = ""

Tu t'embêtes beaucoup avec ton New Scripting.FileSystemObject . Pourquoi ne pas utiliser l'instruction VBA
Name oldfilename as newfilename ?
Messages postés
17
Date d'inscription
lundi 2 juillet 2007
Statut
Membre
Dernière intervention
19 mai 2010
1
J'y ai pensé mais j'arrivais pas à le fair marcher non plus.
Il ne trouvait pas mes fichiers (erreur 53).

Name "U:\Images2\" & ancien_nom As " U:\Images2\" & nouveau_nom
Je dois bien l'utiliser comme sa?
S'il ne trouvait pas tes fichiers, c'est que les fichiers que tu indiquais n'existaient pas, ce n'est pas parce que l'instruction Name ne fonctionne pas.

As-tu fait un msgbox "U:\Images2\" & ancien_nom pour voir le nom réellement demandé ? N'as-tu pas oublié une extension ?
Messages postés
17
Date d'inscription
lundi 2 juillet 2007
Statut
Membre
Dernière intervention
19 mai 2010
1
Alors je viens de faire le msgbox et le chemin est bien le bon.
Sa peut venir du résaux non?
Peux-tu faire un
msgbox dir ("U:\Images2\" & ancien_nom) ?
Messages postés
17
Date d'inscription
lundi 2 juillet 2007
Statut
Membre
Dernière intervention
19 mai 2010
1
Sa me donne un msgbox vide. C'est normal?
Non. Quand je fais la même manip, je vois bien le nom du fichier.
J'insiste : ton chemin est très, très probablement mauvais. Un espace qui traîne après ou avant le nom de fichier ?
Tu as dit qu'avec le msgbox, tu voyais le bon chemin, tu parlais bien du chemin y compris le nom du fichier et son extension ?
Messages postés
17
Date d'inscription
lundi 2 juillet 2007
Statut
Membre
Dernière intervention
19 mai 2010
1
J'ai enlevé la variable qui enregistrait le nom de la photo et je l'ai remplacer directement par son nom dans
msgbox dir ("U:\Images2\" & ancien_nom) ce qui donne msgbox dir ("U:\Images2\photo.eps") comme sa pas d'érreur possible sur le chemin d'accès.
Sa me fait la meme chose et je comprends vraiment pas pk.
Mon imagination s'épuise, j'en viens aux questions idiotes : le fichier "U:\Images2\photo.eps" tu le vois bien avec ton explorer ?
C'est peut-être lui qui a un espace en trop, éventuellement à la fin.
Messages postés
17
Date d'inscription
lundi 2 juillet 2007
Statut
Membre
Dernière intervention
19 mai 2010
1
C'est pas si idiot que sa !
Oui on le voit bien.
C'est peut etre due a cette extension .eps (moi perso je ne connais pas cette extension et j'ai changé de pc pour voir et c'est des archives).
Peu importe la signification du .eps pour renommer un fichier.
Mais ceux qui créent des fichiers avec un espace à la fin sont des cochons ou des étourdis..

Tu n'as plus qu'à rajouter cet espace dans ton instruction Name, et ça devrait rouler
Messages postés
17
Date d'inscription
lundi 2 juillet 2007
Statut
Membre
Dernière intervention
19 mai 2010
1
dsl je t'ai pas dis mais non j'ai pas d'espace à la fin de mes nom de photo.
je suis pas si étourdie que sa :)
ce que je ne comprend pas c'est pourquoi dans mon msg box dir ("U:\Images2\" & ancien_nom) je n'ai rien qui s'affiche sa me donne un msgbox vide
Alors on va le prendre autrement : peux tu faire

Dim a$
  a$ = Dir("U:\Images2\*.*")
  
  While a$ <> ""
    MsgBox a$ & " " & Len(a$)
    a$ = Dir
  Wend


on verra bien s'il voit quelque chose ou rien du tout...
Messages postés
17
Date d'inscription
lundi 2 juillet 2007
Statut
Membre
Dernière intervention
19 mai 2010
1
J'ai executer ce que tu m'as passé. Il y a pelin de message type msgbox avec les nom des photos qui se trouve dans le dossier.
C'est bien sa? Et je remarque que apres l'extension des photos il ya un espace puis un nombre, exemple: "photo.eps 20".
Messages postés
17
Date d'inscription
lundi 2 juillet 2007
Statut
Membre
Dernière intervention
19 mai 2010
1
ah mince, je viens de rmq le nombre qu'il y a deriere c'est le nb de charactère du nom de la photo.
Dsl je suis encor qu'un étudiant !
sinon il trouve bien le chemin dans ce cas
Le nombre, c'est la longueur du nom de fichier
Si tu as réellement vu "photo.eps 20", comme photo.eps ne fait que 9 caractères, ça veut dire qu'il y a 11 caractères zarbis. Peux -tu confirmer qu'il y a bien 20 à côté de photo.eps ?
Messages postés
17
Date d'inscription
lundi 2 juillet 2007
Statut
Membre
Dernière intervention
19 mai 2010
1
non non j'ai mis 20 au hasard.
Mais sinon j'ai 178.eps 8
et donc y'a un caractère en trop
alors tu vas faire :

Dim a$,k%, s$
a$ = Dir("U:\Images2\*.*")
s$=""
for k= 1 to len (a$)
s$=s$ & " " & asc(mid$(a$,k,1))
next k
msgbox a$ & s$

pour voir tous les caractères un par un
Messages postés
17
Date d'inscription
lundi 2 juillet 2007
Statut
Membre
Dernière intervention
19 mai 2010
1
Je suis allé voir la photo et le nom de la photo commence pas un espace. Et avec le name as que tu ma conseillé sa marchesa ma bien renommé ma photo.
Merci bcp ! (pour info: ce n'est pas moi qui est nommé les photos :))

Du coup je vais devoir allé verifier chaque photo pour supprimer chaque espace en trop au debut si il existe. Peut on y remedier avec un code VBA?
Et quelle instruction VBA me conseils-tu pour copié le fichier dans un autre dossier avec de le renommer (car une photo aura plusieurs nom different)