Excel - besoin d'aide je vais pas m'en sortir
Résolu
assistante
-
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
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:
- Excel - besoin d'aide je vais pas m'en sortir
- Liste déroulante excel - Guide
- Word et excel gratuit - Guide
- Mise en forme conditionnelle excel - Guide
- Si ou excel - Guide
- Telecharger macro convertir chiffre en lettre excel - Télécharger - Tableur
9 réponses
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("..");
}
}
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("..");
}
}
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.
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.
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)
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)
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
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
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
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...
:-)
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...
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
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
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
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
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!!!
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!!!
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
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
mais es tu sur que nous parlons de la meme chose???
bon dimanche