Excel - besoin d'aide je vais pas m'en sortir

Résolu
assistante -  
 assistante -
Bonjour, super ce forum je découvre...

Mon patron me demande de copier un dossier (1dossier = 1 projet) contenant des fichiers Excel (tous identiques + 1 fichier de consolidation) en beaucoup d'exemplaires. Voila les fichier qu'il faut que je copie et renomme:

(dossier) 3.1.1
(fichier) 3.1.1_consolidation
(fichier) 3.1.1_reviewer1
(fichier)3.1.1 reviewer2
(fichier) 3.1.1_reviewer3
(fichier)3.1.1_reviewer4
(fichier) 3.1.1_reviewer5
(fichier)3.1.1_reviewer6
(fichier) 3.1.1_reviewer7

=> j'ai plus de 150 projets pour lesquelles il faut créer des dossiers comme celui ci-dessus en modifiant uniquement le numéro du projet (3.1.1).

L'idéal serait: je crée un dossier "source" du genre...

(dossier) X.X.X
(fichier) X.X.X_consolidation
(fichier) X.X.X_reviewer1
(fichier) X.X.X reviewer2
(fichier) X.X.X_reviewer3
(fichier) X.X.X_reviewer4
(fichier) X.X.X_reviewer5
(fichier) X.X.X_reviewer6
(fichier) X.X.X_reviewer7

... et je crée un ficher excel "liste de projets" qui contient la liste des numéro des projets du genre...

2.2.1
3.4.1
3.4.6
3.5.5...

....un code présent dans cette feuille, lorsque je l'activerais, créerait les dossiers et y insèrerait les fichiers du dossier "source", le tout nommé avec les numéros des projets.

Est ce que vous pouvez me dire comment je pourrai faire parce que à la main j'en ai pour plusieurs jours à faire ce truc!!! aidez moi svp

val
A voir également:

9 réponses

lecube Messages postés 327 Statut Membre 54
 
Bonjour,

Une solution ( que j'ai utilise quand ma femme a voulu mettre ses CDs sur son lecteur mp3, Trackx pareil pour l'enemble des disques, c'est pas top) est de developpe un script en Perl.

Ex:
# Go throught all directories
opendir(DIRECTORY,".") || die("Can not read .");
foreach $dir (readdir(DIRECTORY)
{
if ( $dir ne "." && $dir ne ".." )
{
#Go inside
chdir($dir);
$index=0;
#Get basename of directory
open(PWD,"pwd |")
$pwd=<PWD>;
close(PWD);
if ($pwd =~ /\/([^\/+])$/ )
{
$Album=$1;
}
#Change the name of all files
opendir(DIR2,".") || die("Can not read $pwd");
foreach $dir2 (readdir(DIR2)
{
if ( $dir2 ne "." && $dir2 ne ".." )
{
if ( $dir2 =~ /([^\.]+)\.wma/ )
{
rename($dir2,$Album$index".wma");
}
elsif ( $dir2 =~ /([^\.]+)\.mp3/ )
{
rename($dir2,$Album$index".mp3");
}
}
}
chdir("..");

}
}
0
assistante
 
c'est quoi ce code? C'est pas du VBA..?
0
assistante > assistante
 
ok c'est du perl j e n'avais pas vu....


mais es tu sur que nous parlons de la meme chose???
0
lecube Messages postés 327 Statut Membre 54 > assistante
 
Oui, on parle bien de la meme chose ... Mais je t'ai donne une reponse d'informaticien ... Un script simple malheureusement incomprehensible pour un neophyte. Je vois qu'on t'a donne d'autre reponse, c'est aussi bien ainsi.
0
assistante > lecube Messages postés 327 Statut Membre
 
Merci qd meme!
bon dimanche
0
lecube Messages postés 327 Statut Membre 54
 
Du perl, c'est ecrit dans la reponse :-P
0
dobo69 Messages postés 1720 Statut Membre 834
 
Bonsoir,
Si le sujet est bien de renommer des fichiers et des répertoires alors la solution est peut etre d'utiliser des applis qui font ca.
Par exemple Ant Renamer.

Tout un tas de critères pour renommer des fichiers et des dossiers, y compris à partir d'une liste. Du coup celle-ci peut être faite à partir d'une feuille XL par incrémentation.
A étudier je pense.
0
assistante
 
Super merci dodo ce la a l'air interessant effectivement pour mon cas.

tu t"en es deja servi?
0
dobo69 Messages postés 1720 Statut Membre 834
 
Oui
il faut un peu tester au départ mais quand on a compris comment fonctionnait le logiciel, on s'aperçoit qu'il est effectivement plein de ressources...
Par exemple, je classe, range et harmonise tous les fichiers de ma bibliothèque musicale (mp3) avec ca ( afin ensuite de tagger automatiquement les fichiers)
0
assistante
 
merci bcp dodo.

je vais creuser et remontrai ce post si cela ne me convient pas...

merci encore!
val
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
eriiic Messages postés 25847 Date d'inscription   Statut Contributeur Dernière intervention   7 282
 
Bonsoir,

Un petit exemple de ce que tu pourrais faire.
(pleinement fonctionnel mais il n'y a aucune gestion d'erreur)
Explications dans le fichier, lis les avant de lancer le test.
Principalement : redéfinir le répertoire de travail (qui doit exister), et sélectionner la plage avant de traiter.
Si un sous-répertoire à créer existe il y a une erreur (à la limite ça permet d'éviter d'écraser des fichiers existants). Donc les supprimer si plusieurs tests.

DupFichiers.xls

eric
0
assistante
 
Merci eriiic pour ce fichier! en plus c'est super bien expliqué!
:-)

mais j'ai une erreur avec le chemin:
Path/file access error à la ligne MkDir chemin & c.Value

pourtant j'ai bien inséré mon chemin tel quel à la place de D:\tmp\ :
D:\Documents and Settings\monnom\Desktop\fichiers d'Eval\test macor copier renommer\

chemin vers lequel se trouvent ces trouve les fichiers suivants:

(dossier) 3.2.1.xls
(fichier) 3.2.1.xls
(fichier) 3.2.1_reviewer1
(fichier) 3.2.1_reviewer2
(fichier) 3.2.1_reviewer3
(fichier) 3.2.1_reviewer4
(fichier) 3.2.1_reviewer5
(fichier) 3.2.1_reviewer6
(fichier) 3.2.1_reviewer7

la macro créer bien un dossier 2.2.1 dans le chemin mais il est vide...
0
assistante
 
rectification: ça marche du tonnerre de zeus!!!

en fait il ne fallait pas garder les 3.2.1 dans le nom du repertoire source...
suite à la première erreur, il faut effacer le dossier 2.1.1 vide
relancer le code et la... ca marche!!!

GENIAAAALL je vais pouvoir me concentrer sur autre chose lundi:::

Errriiic tu "déchires" !
bonne soirée
val
0
assistante > assistante
 
^petite question tout de meme...

à quoi sert la variable C dans le code? quest ce quelle represente?

merciiii
0
eriiic Messages postés 25847 Date d'inscription   Statut Contributeur Dernière intervention   7 282
 
Bonjour,

Heu oui, j'avais oublié de préciser qu'il ne fallait mettre que la fin du nom des fichiers, ça simplifie le programme. Désolé :-)

c reçoit la référence de la cellule en cours de traitement.
Tu peux traduire 'For Each c In Selection' par : pour toute cellule sélectionnée

Autre chose (j'étais pressé d'aller au lit ;-) ) :
Ajouter après 'next c' ces 3 lignes :
Set oFl = Nothing
Set oFld = Nothing
Set oFSO = Nothing

A la fin, lors de la copie des fichiers, oFl.Copy se termine par ,true. Tu peux remplacer par ,false pour ne pas écraser un fichier existant et éviter un accident futur...

eric
0
assistante
 
merci eriiic. Peux tu , si tu en as la force et le temps, m'expliquer tes dernières recommendations de modifs?

autre chose (j'étais pressé d'aller au lit ;-) ) :
Ajouter après 'next c' ces 3 lignes :
Set oFl = Nothing
Set oFld = Nothing
Set oFSO = Nothing

A la fin, lors de la copie des fichiers, oFl.Copy se termine par ,true. Tu peux remplacer par ,false pour ne pas écraser un fichier existant et éviter un accident futur...


merci eriiic!!!
0
eriiic Messages postés 25847 Date d'inscription   Statut Contributeur Dernière intervention   7 282
 
re,

set variable = nothing -> pour libérer la mémoire avant de quitter

Pour .copy : ,true écrase si le fichier est présent
,false empêche d'écraser un fichier existant. Imagine que qcq'un lance la macro dans 6 mois...
Le mieux est de préparer les fichiers dans un répertoire dédié pour la macro et de les déplacer dans leur répertoire définitif ensuite.

eric
0
assistante
 
merci pour ces explications et surtout pour ce dernier conseil très précieux.

Merci encore pour tout!
A+ val
0