Utiliser une valeur pour localiser stockage de fichiers

Bonjour,

J'ai un tableau "T" avec en colonne le nom des salariés, certaines infos RH et le nom du service.

Dans mon arborescence windows, j'ai des répertoires nommés selon le nom des service.

A partir de mon tableau "T"Je souhaiterais générer autant de fichiers excel qu'il n'y a de salariés puis que les fichiers générés soient enregistrés dans les repertoires correspondants selon l’appartenance au service.

Le code me permettant de générer autant de fichiers que de salariés est déjà fonctionnel. Ce code me permet en outre d'autocompléter certaines cellules du fichier à partir des valeurs contenus dans mon tableau T. Voir ici : https://forum.excel-pratique.com/excel/dupliquer-fichier-excel-en-masse-187318

Il me reste à répartir les fichiers générés dans les bons répertoires.

Quel serait le bout de code à ajouter ou alors faudrait-il créer une nouvelle macro ?

Merci par avance.

Bonjour siccmdl,

Voir fichier ci-joint. J'ai modifié la macro d'origine pour inclure la création du dossier service (si nécessaire) plus quelques modifications :

  • plus de chemin en dur => boîte de dialogue pour sélectionner le dossier à partir duquel les dossiers par service seront créés
  • les données du personnel étant dans un TS => utilisation des propriétés des TS

Je te laisse tester et si besoin d'infos complémentaires n'hésites pas.

Cdlt,

Cylfo

Bonjour Cylfo,

Génial, ça fonctionne avec le jeu de données. Je vais voir en l'adaptant.

Est-ce qu'il serait possible de gérer 1 niveau d'arborescence supplémentaire. Là les fichiers générés vont se stocker dans le repertoire service indiqué dans le tableau structuré. Mais admettons qu'il y ait un repertoire "département" dans lequel se trouvent les services. Il faudrait que le fichier se stocke dans le bon département et dans le bon service. C'est faisable cela ?

Merci en tout cas c'est déjà une grande avancée.

Bonjour,

Oui, il faudra appeler en cascade la fonction "DosExiste" et gérer le niveau de cascade si l'arborescence n'est pas toujours complète, exemple avec le postulat que les 3 niveaux (Service / Département / Unité) sont toujours renseignés dans le tableau :

...
        Dim cDossierDepartement as String, cDossierUnite As String
...
        If DosExiste(cDossierService) = False Then MkDir cDossierService
        cDossierDepartement = cDossierService & tsPers.ListColumns("Département").DataBodyRange(i, 1).Value
        If DosExiste(cDossierDepartement) = False Then MkDir cDossierDepartement
        cDossierUnite = cDossierDepartement & tsPers.ListColumns("Unité").DataBodyRange(i, 1).Value
        If DosExiste(cDossierUnite) = False Then MkDir cDossierUnite
        VNomfich = cDossierUnite & "\" & tsPers.ListColumns("Service").DataBodyRange(i, 1).Value & "_" & tsPers.ListColumns("Nom").DataBodyRange(i, 1).Value & "-Mat" & tsPers.ListColumns("Matricule").DataBodyRange(i, 1).Value & ".xlsx"
...

Cdlt,

Cylfo

Merci.

Autant le code fonctionne sur le jeu de donnée que vous m'avez transmis. Autant quand je le récupère pour l'adapter ça ne fonctionne pas.

J'ai systématiquement un message d'erreur. Je vous joins mes fichiers (que j'ai épuré et anonymisé).

J'ai oublié de vous le préciser ... dans l'éditeur VBE, dans le menu "Outils", "Références ...", il faut rechercher et cocher "Microsoft Scripting Runtime" dans la liste.

Cdlt

Effectivement, je ne l'avais pas coché.

Cela étant, je garde le même message d'erreur ==> "erreur d'execution 9 : l'indice n'appartient pas à la sélection"

Comme vous parliez uniquement d'erreur sans préciser laquelle et qu'à la compilation du code j'avais une erreur ... je ne suis pas allé plus loin.

L'erreur d'exécution 9 est liée au fait que l'intitulé de la colonne du nom dans le tableau "bddRH" comporte un espace à la fin "Nom " et que dans le code (à 2 endroits) il est fait référence à la colonne "Nom" sans espace à la fin.

Pour la constitution des noms de chemin, en dehors de la 1ère concaténation avec cDossierBase qui comporte déjà un \ à la fin, il faut en insérer lors des concaténations suivantes. Tu aimes visiblement les espaces de fin mais le service "Outillage " va te provoquer une erreur d'exécution. Il serait bon d'encapsuler l'élément que tu concatène dans un Trim(xxx), donc :

cDossierService = cDossierBase & Trim(tsPers.ListColumns("Service").DataBodyRange(i, 1).Value)
...
cDossierRepertoireS = cDossierService & "\" & Trim(tsPers.ListColumns("RepertoireS").DataBodyRange(i, 1).Value)

Pour finir, il faut corriger vNomFic ... car le stockage se ferait dans le niveau service au lieu du niveau RepertoireS. Le modèle d'entretien ne contient pas de macro, pourquoi est-il enregistré au format xlsm au lieu de xlsx, idem pour le fichier enregistré

VNomfich = cDossierRepertoireS & "\" & tsPers.ListColumns("Nom ").DataBodyRange(i, 1).Value & "_" & tsPers.ListColumns("Prenom").DataBodyRange(i, 1).Value & ".xlsm"

En cas d'erreur : Merci de préciser le code et le descriptif ainsi que la ligne où l'erreur survient.

Bonjour,

Merci pour le retour.

Je ne savais pas qu'on pouvait laisser des espaces sur un intitulé de colonnes. Je serais vigilant la prochaine fois.

J'ai fait les modifications. J'ai ce message d'erreur "erreur d'execution '76' : chemin d'accès introuvable; Le debogueur surligne "MkDir cDossierService"

Voir fichier joint (modif de la colonne "nom " et du service "Outillage ")

Cdlt,

Cylfo (je suis absent jusqu'à jeudi prochain inclus)

Le code fonctionne lorsque je suis dans C:/ mais ça me renvoie toujours l'erreur 76 lorsque je suis dans onedrive. Je pense que l'erreur vient de la boite de dialogue.

Maintenance que je le sais, je pourrais toujours m'adapter. Mais si vous avez un moyen de contourner le problème je suis preneur.

En tout cas, merci pour l'aide et l'accompagnement. C'est top !

Bonjour siccmdl,

Je viens de faire un test sur OneDrive avec le dernier fichier "Test-cr-entretien2.xlsm" que je vous ai envoyé et je ne rencontre pas de problème (voir copie d'écran ci-dessous).

Pouvez-vous me communiquer une copie des boîtes de dialogue lors de la sélection du dossier et du fichier et si c'est possible, m'envoyer le fichier qui provoque une erreur ?

image

Cdlt,

Cylfo

Je confirme que ça fonctionne bien. Il y avait un problème de sécurité sur un répertoire, indépendant de la macro.

Merci pour cet accompagnement. C'était top !

Rechercher des sujets similaires à "utiliser valeur localiser stockage fichiers"