Automatiser la création de nouvelles feuilles

Bonjour,

Après avoir fait quelques recherches sur le forum (peut être pas les bonnes), je tente ma chance et vous sollicite.

Voici mon soucis :

Je dois, dans le cadre de mon activité professionnelle, réaliser une évaluation des compétences techniques des salariés de ma société. A ce titre, j'ai effectué un référentiel de compétence, avec grille d'évaluation. J'ai en parallèle une base de données de mes salariés.

J'aimerai trouver un moyen de créer automatiquement en fonction de la base de données, un onglet par salarié sur la base du référentiel, onglet ayant pour titre "nom prénom".

Idéalement la case C6 de la feuille du salarié doit être remplie par son matricule (en colonne G sur la BDD), qui me permettra ensuite, par une recherche V, de remplir l'entête avec toutes les informations du salarié (contenues dans la BDD).

Voici un exemple en PJ du document. Premier onglet la BDD, second onglet le référentiel qui doit être dupliqué en fonction du nombre de ligne correspondant à mes salariés.

Je n'ai certainement pas été très clair sur certains points, n'hésitez pas à me relancer je serais réactif en journée.

Merci d'avance de votre aide précieuse,

Bien cordialement,

Bonjour

Ton fichier en retour avec un code pour faire ce que tu demandes.

J'ai changé :

  • le nom de ta feuille HUGUE en feuille MODELE
  • défusionné la cellule C6 (A éviter absolument avec les codes)

On pourrait aussi rapatrier le nom et prénom dans chaque feuille créé sans faire une rechercheV; cela évite d'alourdir le fichier avec de formules. A ce stade je ne l'ai pas fait

A te relire

Si ok, clique sur le V vert à coté du bouton EDITER lors de ta réponse afin de cloturer le fil

Crdlt

Bonjour Dan,

Tout d'abord, merci de ta réponse, et de ta rapidité.

Tout fonctionne parfaitement.

Concernant ta réflexion au sujet du nom et prénom : oui je suis d'accord avec toi, en poussant le vice nous pourrions tout automatiser sans passer par de la rechercheV. Je ne sais pas si cela est fastidieux pour toi de tous les intégrer, sinon j'y appliquerais une formule

Le cas échéant, voici les correspondances :

Société C5 sur modèle ==> C dans la BDD

Nom C7 sur modèle ==> H dans la BDD

Date entrée C8 sur modèle ==> K dans la BDD

Lib poste C9 sur modèle ==> N dans la BDD

Regroupement C10 sur modèle ==> Q dans la BDD

Niveau (et non pas Lib rang en doublon) C11 sur modèle ==> O dans la BDD

Année F5 sur modèle ==> B dans la BDD

Domaine F6 sur modèle ==> J dans la BDD

Prénom F7 sur modèle ==> I dans la BDD

Date Ancienneté F8 sur modèle ==> L dans la BDD

Lib Rang F9 sur modèle ==> R dans la BDD

Filière F10 sur modèle ==> T dans la BDD

Echelon F11 sur modèle ==> P dans la BDD

Quitte à pousser le vice encore plus loin, je me questionne sur la faisabilité d'une macro plus globale pour, encore une fois, automatiser encore plus le processus :

J'ai une base de donnée globale, avec mes managers, et les salariés qu'ils doivent évaluer.

J'aimerai en définitive savoir s'il est possible de créer un fichier par manager, avec X onglets par " nom - prénom " comme on l'a fait au dessus (mais a partir d'une base de données globlae).

A savoir que tous les salariés ne doivent pas être évalués selon le même référentiel en fonction de leur positionnement... J'ai 11 référentiels en tout, il faut donc positionner chaque salarié en fonction d'un référentiel défini dans la BDD?

Compliqué non ?

Si non, peux tu me dire de quoi as tu besoin pour faire un essai ?

Merci de ton aide !

Cordialement,

Re,

D'abord beau fichier et merci de tes explications très claires

mhugues a écrit :

Concernant ta réflexion au sujet du nom et prénom : oui je suis d'accord avec toi, en poussant le vice nous pourrions tout automatiser....

En premier dans la fichie MODELE, défusionne toutes les cellules C5 à D11 et G5 à I11

Ensuite remplace cette partie de code par celle ci-dessous :

......
With ActiveSheet
    .Name = Sheets("BDD").Range("H" & n) & "-" & Sheets("BDD").Range("i" & n)
    .Range("C5") = Sheets("BDD").Range("C" & n) 'société
    .Range("C6") = mat
    .Range("C7") = Sheets("BDD").Range("H" & n) 'Nom
    .Range("C8") = Sheets("BDD").Range("K" & n) 'date
    .Range("C9") = Sheets("BDD").Range("N" & n) 'lib poste
    .Range("C10") = Sheets("BDD").Range("Q" & n) 'regroupement
    .Range("C11") = Sheets("BDD").Range("O" & n) 'niveau
    .Range("G5") = Sheets("BDD").Range("B" & n) 'année
    .Range("G6") = Sheets("BDD").Range("J" & n) 'domaine
    .Range("G7") = Sheets("BDD").Range("I" & n) 'prenom
    .Range("G8") = Sheets("BDD").Range("L" & n) 'anciennete
    .Range("G9") = Sheets("BDD").Range("R" & n) 'lib rang
    .Range("G10") = Sheets("BDD").Range("T" & n) 'filière
    .Range("G11") = Sheets("BDD").Range("P" & n) 'echelon
End With
.......

Attention que tu mentionnes dans ton post la colonne F dans la feuille MODELE alors que dans le fichier que tu as posté il s'agit de la colonne G.

Rien n'est impossible quand c'est bien structuré et le mieux est que tu donnes un exemple

Si je comprends ta demande, il faudra sauvegarder ces fichiers Manager dans un répertoire. Donc là il faut connaitre le répertoire exact. Puis il y aura peut être l'aspect doublons à gérer. Cela sera nettement plus complexe je pense.

A te relire

Bonjour !

D'abord beau fichier et merci de tes explications très claires

Merci

Encore une fois, impeccable ! Tout fonctionne sans aucun soucis.

Concernant ma seconde demande, voici les informations :

J'ai environ 70 managers. Ils gèrent environ 350 personnes.

J'aimerai avoir comme résultat 70 fichiers excel, nommé en fonction du "nom + prénom" du manager. A l'intérieur, avoir les x onglets, correspondant aux X personnes managées par le dit manager.

Ces onglets seront "personnalisés" en fonction du référentiel métier (comme dans ma première requête), chaque personne n'ayant pas un poste requérant les mêmes compétences techniques, il existe 11 référentiels.

En définitive, la macro doit identifier le manager, créer un fichier excel par manager, ensuite identifier toutes les personnes sous ce manager, et attribuer un référentiel différent par personne en fonction de l'indication (par exemple "référentiel 1 filière réseaux").

Avec, bien évidemment sinon ce serait trop simple, les fonctionnalités de remplissage de la fiche de chacun par ses infos personnelles (que tu m'as aidé à faire auparavant).

Pour le répertoire de destination, pourquoi ne pas mettre sur le bureau/managers par exemple ?

Suis-je clair ?

Voici un fichier base de donnée avec les référentiels.

Donc Martin est manager de la filière réseaux, et on doit retrouver dans son fichier 4 onglets : 3 en réseaux 1 et 1 en réseaux 2.

Et Alain est manager de la filière maintenance et on doit retrouver dans son fichier 4 onglets : 2 maintenance 1 et 2 maintenance 2.

Merci encore de ton aide ! J'attend avec impatience ta réponse,

A bientôt,

Cordialement,

re,

Là c'est plus complexe et il faut revoir le code en grande partie

Déposer des fichiers sur un bureau n'est jamais une bonne chose. Cela mange des ressources mémoire inutilement puis c'est la meilleure manière de perdre un fichier (quelques fois des services informatiques les suppriment pour libérer de l'espace alloué au profil d'utilisation. L'idéal est de toujours faire un raccourci vers le fichier en question

Quelques questions :

  • Colonne S : pourquoi n+1 ???
  • Si tu créees un fichier par manager est-ce que la base BDD doit toujours être présente une fois les fichiers créés.
  • Comment on peut savoir le répertoire pour déposer le fichier. Là il faudrait comprendre comment tu fonctionnes
  • est-ce que tu peux avoir un nouveau manager auquel cas il faudra créer un nouveau fichier... Si oui, je serais plutôt d'avis de créer un fichier à la demande en faisant par exemple le choix du manger dans une liste déroulante
  • est-ce que tu avoir un nouveau nom pour un manager ? auquel cas il faudra créer un nouvelle fichier sur base du référentiel

Pour ce qui est de la création des nom + prénom en fonction du référentiel ce n'est pas un souci. Par contre la création de fichier pour chaque manager est moins évidente

A te relire

Dan,

Merci pour le conseil concernant le renvoi sur le bureau. J'avais pris cet exemple pour son caractère générique, mais il est vrai qu'au niveau de la sauvegarde on a connu mieux.

Pour te répondre dans l'ordre :

  • N+1 est un jargon pour Manager, excuse moi de pas avoir précisé cette information.
  • Idéalement non, la base de donnée complète n'est pas nécessaire. A la limite (et c'est vraiment du luxe), seulement la partie correspondante aux personnes évaluées sur la fiche du manager.
  • Dans l'idéal j'aimerai que nous retrouvions un classement par Filière métier (Réseaux / Traitement / Maintenance) au niveau du répertoire, dont voici les chemins d'accès :
+ Y:\ER-PRO\RH\ACTES METIERS\Projet mise à jour Compétences ER\Evaluation\Filière Traitement

+ Y:\ER-PRO\RH\ACTES METIERS\Projet mise à jour Compétences ER\Evaluation\Filière Réseaux

+ Y:\ER-PRO\RH\ACTES METIERS\Projet mise à jour Compétences ER\Evaluation\Filière Maintenance

  • Théoriquement nous nous basons sur une extraction (BDD) datée au 1er Janvier 2014, qui ne devrait pas être modifiée, donc pas de rajout ultérieur de manager en cours de route.
  • Je n'ai pas saisi cette question.

PROPOSITION :

Ne serait il pas plus simple que je crée à la main 1 fichier par manager, avec une extraction d'une partie de la BDD relative à ses évalués ?

De ce point de départ, nous n'aurions qu'à appliquer la première macro ? Il faudrait alors "seulement" dire à la macro de choisir le modèle de référentiel en fonction d'une codification dans la BDD ?

Qu'en penses tu ? Je ne veux pas te faire développer une usine à gaz, si je peux faciliter le travail avec quelques copier coller

J'attend ta proposition,

Merci encore !

re,

Merci de tes explications.

mhugues a écrit :

Ne serait il pas plus simple que je crée à la main 1 fichier par manager, avec une extraction d'une partie de la BDD relative à ses évalués ?

De ce point de départ, nous n'aurions qu'à appliquer la première macro ? Il faudrait alors "seulement" dire à la macro de choisir le modèle de référentiel en fonction d'une codification dans la BDD ?

Oui certainement c'est le plus simple car il faut garder en mémoire que VBA c'est un peu de la "bidouille" et que dès que tu as un trop gros projet ou tu fais intervenir une multitude de fichier, il vaut mieux penser à d'autres applications.

Dans ton cas avec un seul fichier par manager contenant les quatres feuilles modèle réseaux 1, 2 et maintenance 1 et 2 et on peut, une fois fait, créer les feuilles comme tu le précises.

Cette solution aurait aussi l'avantage de te montrer à plus long terme quels sont les soucis ou loudeur que tu vas rencontrer en procédant de la sorte et peut être adapter ton projet.

Pense aussi à une mise à jour. Exemple si tu dois rajouter un nouveau nom dans la base de données. Qui le fera ? Le manager ou toi ?

Si c'est le manager, il vaut mieux laisser le code dans chaque fichier.

Maintenant on peut aussi créer tous les fichiers au départ par manager sur ton bureau et toi, tu les places dans les bons répertoires.

Autre chose aussi à veiller, évite les espaces dans le noms de tes feuille et surtout les accents (-> "données"). C'est la meilleure manière de planter un code lorsque par exemple tu passes d'un système windows vers MAC. Fais ceci --> reseau_1 ou reseau1, ect...

Même chose dans ta base de donnée. Regarde la colonne T, une fois tu as Réseaux et une fois Reseaux.

A ta relire

Crdlt

Bonjour Dan,

Merci encore pour ta réponse, précise et claire.

Oui certainement c'est le plus simple car il faut garder en mémoire que VBA c'est un peu de la "bidouille" et que dès que tu as un trop gros projet ou tu fais intervenir une multitude de fichier, il vaut mieux penser à d'autres applications.

Je ne m'y connais pas du tout en VBA, et je venais également chercher ce genre de conseil, donc merci à toi. Je commence à voir les limites qu'il peut il y avoir entre ce que à quoi je pense et la difficulté de réalisation du projet.

Donc, pour revenir à nos moutons, je pense qu'il faudrait que nous développions 3 codes, un différents pour chaque filière (histoire d'éviter d'avoir 11 référentiels et 1 BDD par fichier manager, puisqu'en filière réseaux, inutile de chercher un modèle traitement qui ne sera pas applicable à l'évalué.

Je vais diviser mes managers selon la filière, et on aura 3 fichiers "type" déclinés selon le manager (à moi de faire à la main cette partie là).

Selon moi, voici ce qui devrait apparaitre dans chaque fichier type:

Filière Réseaux : BDD + MODELE_RESEAUX_1 + MODELE_RESEAUX_2 + MODELE_RESEAUX_3 + MODELE_RESEAUX 4

Filière Maintenance : BDD + MODELE_MAINTENANCE_1 + MODELE_MAINTENANCE_2 + MODELE_MAINTENANCE_3 + MODELE_MAINTENANCE 4

Filière Traitement : BDD + MODELE_TRAITEMENT_1 + MODELE_TRAITEMENT_2 + MODELE_TRAITEMENT_3 (pas de 4 sur celle ci)

Qu'en penses tu ?

Bien évidemment en intégrant les fonctionnalités développées dans la première macro

D'avance merci de ton aide,

Cordialement,

Re,

Combien de manager as-tu et est-ce que chaque manager peut être concerné par tous les référentiels

A te relire

Re,

J'ai environ 70 Managers. Certains peuvent être à cheval sur plusieurs filières en effet, mais la grand majorité reste "mono filière". Ce ne sera qu'anecdotique et sur des managers d'un niveau élevé.

A la limite pour le manager qui est sur 2 ou 3 filières, je crée 2 ou 3 fichiers, un sur chaque filière, je lance la macro et je copie / colle ensuite mes feuilles d'évaluation sur un même fichier synthétisant toutes ses feuilles d'évaluation,

Qu'en penses tu ?

Merci

Bonjour,

Je déterre un peu ce topic, qui commence à dater un peu.

Dan, si tu es encore dans les parages, j'aimerai que nous finalisions le travail que nous avions commencé, permettant la création automatique de feuille excel selon un référentiel.

Ma question aujourd'hui est de refaire la même chose en incluant plusieurs modèles possibles.

Nous avions la macro suivante (création de nouvelle fiche et remplissage des données) :

Sub Dupliquer()

' Macro pour ajouter une feuille dans le classeur

' Macro par DAN pour mhugues le 10/02/2014

Dim existe As Boolean

Dim i As Byte

Dim n As Integer

Dim mat

On Error Resume Next

Application.ScreenUpdating = False

For n = 2 To Sheets("BDD").Range("G65536").End(xlUp).Row

mat = Sheets("BDD").Range("A" & n).Value

For i = 3 To Worksheets.Count

If Sheets(i).Name = Sheets("BDD").Range("B" & n) & "-" & Sheets("BDD").Range("C" & n) Then

existe = True

End If

Next i

If Not existe Then

Sheets("modele").Copy after:=Sheets("modele")

With ActiveSheet

.Name = Sheets("BDD").Range("B" & n) & "-" & Sheets("BDD").Range("C" & n)

.Range("C5") = Sheets("BDD").Range("E" & n) 'société

.Range("C6") = mat

.Range("C7") = Sheets("BDD").Range("B" & n) 'Nom

.Range("C8") = Sheets("BDD").Range("J" & n) 'date

.Range("C9") = Sheets("BDD").Range("N" & n) 'lib poste

.Range("C10") = Sheets("BDD").Range("S" & n) 'regroupement

.Range("C11") = Sheets("BDD").Range("Q" & n) 'niveau

.Range("G5") = Sheets("BDD").Range("D" & n) 'année

.Range("G6") = Sheets("BDD").Range("I" & n) 'domaine

.Range("G7") = Sheets("BDD").Range("C" & n) 'prenom

.Range("G8") = Sheets("BDD").Range("K" & n) 'anciennete

.Range("G9") = Sheets("BDD").Range("T" & n) 'lib rang

.Range("G10") = Sheets("BDD").Range("V" & n) 'filière

.Range("G11") = Sheets("BDD").Range("R" & n) 'echelon

End With

End If

existe = False

Next n

End Sub

L'idée serait d'ajouter les mêmes fonctionnalités, mais que la macro choisisse le modèle 1, 2, 3 ou 4 en fonction de ce qui est indiqué dans la base de données et qui permettra l'attribution de la bonne fiche en fonction du profil de la personne.

On ouvrirait le fichier de base, qui contiendrait les 4 modèles et la BDD, et création automatique pour chaque manager de son classeur excel avec tous ses évalués.

D'avance merci de ton aide très précieuse encore une fois !

En espérant te lire !

Cordialement,

Rechercher des sujets similaires à "automatiser creation nouvelles feuilles"