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
Configuration: Windows XP
Safari 532.0

9 réponses

  1. lecube Messages postés 326 Date d'inscription   Statut Membre Dernière intervention   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
    1. assistante
       
      c'est quoi ce code? C'est pas du VBA..?
      0
      1. 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
      2. lecube Messages postés 326 Date d'inscription   Statut Membre Dernière intervention   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
      3. assistante > lecube Messages postés 326 Date d'inscription   Statut Membre Dernière intervention  
         
        Merci qd meme!
        bon dimanche
        0
  2. lecube Messages postés 326 Date d'inscription   Statut Membre Dernière intervention   54
     
    Du perl, c'est ecrit dans la reponse :-P
    0
  3. dobo69 Messages postés 1593 Date d'inscription   Statut Membre Dernière intervention   835
     
    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
    1. assistante
       
      Super merci dodo ce la a l'air interessant effectivement pour mon cas.

      tu t"en es deja servi?
      0
  4. dobo69 Messages postés 1593 Date d'inscription   Statut Membre Dernière intervention   835
     
    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
    1. assistante
       
      merci bcp dodo.

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

      merci encore!
      val
      0
  5. Vous n’avez pas trouvé la réponse que vous recherchez ?

    Posez votre question
  6. eriiic Messages postés 24581 Date d'inscription   Statut Contributeur Dernière intervention   7 281
     
    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
  7. 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
    1. 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
      1. assistante > assistante
         
        ^petite question tout de meme...

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

        merciiii
        0
  8. eriiic Messages postés 24581 Date d'inscription   Statut Contributeur Dernière intervention   7 281
     
    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
  9. 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
  10. eriiic Messages postés 24581 Date d'inscription   Statut Contributeur Dernière intervention   7 281
     
    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
    1. assistante
       
      merci pour ces explications et surtout pour ce dernier conseil très précieux.

      Merci encore pour tout!
      A+ val
      0