Mise en forme automatisée de plusieurs onglets

Bonjour,

Actuellement, l'organisation de mon entreprise est suivi avec un fichier excel qui contient les noms/prénoms des salariés, leur affectation organisationnelle et géographique, leur emploi, etc. Ce fichier est mis à jour au fil de l'eau. Régulièrement une copie en est faite et c'est la copie qui est ensuite mise à jour (des "photos" du passé sont donc conservées).

Tel qu'il se présente, ce fichier ne me permet pas d'avoir une vue d'ensemble des salariés, notamment parce que les effectifs de chaque Direction sont détaillés dans un onglet distinct.

J'aurais souhaité automatiser la tâche fastidieuse qui consiste à rassembler toutes ces données dans un même onglet, étant précisé que:

  • Chaque onglet ne contient pas les mêmes colonnes (certaines directions se subdvisent en départements, voire en pôles)
  • Dans les données sources, il y a des lignes fusionnées (intitulé du département, du pôle...) qu'il ne faut pas reprendre
  • Lorsque le poste est vacant, aucun nom n'est indiqué évidemment. Je ne souhaite donc pas avoir cette ligne dans mon résultat.
  • Plusieurs cibles sont à construire, en fonction des effectifs prévisionnels à chaque date du fichier

Vous trouverez ci-joint une version simplifiée de ce fichier: les 3 premiers onglets sont les données sources, les 3 derniers sont les résultats que j'aimerais obtenir de manière automatique (si possible dans un fichier distinct lié au fameux fichier).

10test-excel-3.xlsx (28.17 Ko)

Merci par avance de votre aide

Cordialement

Bonico

Bonsoir,

C'est bien sûr faisable, mais il est un peu tard et ce sera un peu long à faire...

Ce qu'il est bon de savoir et que tu précises c'est si la procédure traitera des feuilles comme dans ton fichier ou devra aller les chercher dans d'autres classeurs.

Egalement si la ligne d'intitulé des 7 premières colonnes des récap qu'on retrouvera systématiquement dans les récap et dans les feuilles source ayant Département et Pôle, sachant que l'une de ces colonnes ou les deux manqueront dans certaines feuilles source.

Le nombre de feuilles source est-il variable ? Y en a-t-il un nombre maximal ?

Surtout, les colonnes à intitulés de dates, donnant lieu chacune à une récap, ici au nombre de 3. Est-ce que ce nombre est fixe ? Ou variable, donnant lieu à autant de récap ?

Est-ce que pour les feuilles source incluses dans une même récapitulation on aura toujours le même nombre de colonnes dates, et avec les mêmes dates ?

Il est important de fournir le maximum de détails sur les variations pouvant intervenir dans cette opération, de façon que le code puisse s'adapter à la variété des situations rencontrées. Si l'on code en ne tenant compte que de ton modèle, il y a toutes chances pour que tu ne puisses l'adapter à l'ensemble des situation qui surviendront.

Cordialement.

Bonjour MFerrand,

Pour répondre à tes questions:

  • Onglets "récap" dans le fichier ou en-dehors du fichier: j'aurais une préférence pour un récap dans un fichier lié, mais c'est pas grave si ce n'est pas le cas (surtout si c'est plus compliqué)
  • Il y a en tout 10 onglets dans chaque fichier: une synthèse avec des calculs automatiques à partir des données de chaque onglet (effectifs par direction, etc) + 9 onglets (9 directions dans mon entreprise). Il faudrait que la cible reprenne les données de 9 onglets. Est-ce que ce nombre de 9 est évolutif? A priori non, mais rien n'est immuable en ce monde... Donc si je pouvais avoir une manip/code/solution (facilement) adaptable si on supprime/ajoute une direction à l'avenir...
  • Les 9 onglets sont toujours structurés de la même manière: Direction / Département / Unité (et non pas pôle) / Intitulé du poste / Nom / Prénom/ Localisation. Les colonnes "département" ne sont pas toujours présentes (pour les directions n'ayant pas de départements), et encore moins les colonnes "unité".
  • Colonnes "dates": leur nombre est variable. Sur certains fichiers, 3 colonnes avec des dates de l'année en cours (01/01, 31/07, 31/12 ou autres), sur d'autres il y en a en plus avec les prévisions 2019 et 2020. Donc parfois 5 colonnes "dates". A la réflexion, les effectifs prévisionnels passés ou à venir ne m'intéressent pas. Ce que je voudrais, c'est extraire la liste sur la date la plus proche parmi celles proposées dans le fichier (=> 1 seul onglet récap selon la date qui me convient le mieux).
Bref, c'est le b.....

Quand tu parles de "code", c'est du VBA? Parce que j'y connais rien du tout.

En fait, en publiant un autre post, j'ai appris 'existence de Power Query (que je n'ai pas encore installé ni jamais pratiqué), et je me demandais si ce n'était pas la solution. Mais bon, toute solution sera la bienvenue.

Merci en tout cas de ton aide

Cordialement

Bonico

Bonjour Bonico, MFerrand,

tu a écrit :

Quand tu parles de "code", c'est du VBA ?

effectivement, dans le contexte du message de MFerrand, c'est bien de code VBA qu'il s'agit ; donc des macros : sub ou function

tu as raison d'poser la question, car en informatique, y'a plein de codes : code ascii, code des caractères Unicode, code HTML, code java, code jmd... j'en passe et des meilleures !


edit : non, après consultation approfondie de diverses sources de renseignement, jmd n'est pas un langage de programmation.

dhany

Bonjour,

Peut-être que Power Query t'apporterait une solution plus facile à mettre en oeuvre, je n'ai pas les compétences pour te l'affirmer, mais des intervenants rompus à son usage et à celui d'outils comparables pourront t'éclairer sur ce point.

Tu veux réaliser des récaps à partir de données provenant de plusieurs sources. Si on opère en VBA, on écrit un code, soit des instructions programmatiques, qui seront exécutées pour réaliser l'opération. Il convient alors de connaître clairement la situation de départ, comment se présentent les données source sur lesquelles on va successivement opérer, si cette présentation n'est pas homogène, on la rendra d'abord telle pour qu'un traitement unique puisse s'exécuter, et il faut ensuite savoir quel résultat précis on doit produire.

La complexité n'est pas en soi un problème. Certes, les situations simples seront plus faciles à traiter, surtout plus rapidement, et si on peut éviter des complications on doit le faire car c'est toujours ça de gagné. Si on ne peut le faire préalablement au traitement, on réduira ces complications en début de traitement en procédant comme je l'ai dit à l'homogénéisation de chaque source pour la ramener à un modèle commun... Les effets ne seront qu'un code un peu plus long, et un temps accru d'exécution. Tant que cela reste limité, on ne peut pas dire que cela provoquera des difficultés majeures.

Je n'entends pas entrer dans ton organisation. Cerner les données à traiter me suffit amplement. Par contre pour que je puisse y voir clair, il faut que toi tu vois clairement les incidences sur les données recueillies et ne te laisse pas noyer dans ta propre organisation.

La façon dont tu présentes le problème est matérialisée dans ton classeur modèle des feuilles Dir..., chacune représentant un tableau de données source, et on produit des feuilles cibles qu'on ajoutera au fur et à mesure dans lesquelles on transfèrera des données de chaque source répondant à des conditions.

Cette base de départ pour le traitement est très satisfaisante, on a ramené dans un même classeur les différentes données source à récapituler. Si on pouvait s'appuyer sur une structure identique des sources, on gagnerait du temps à opérer sur les sources sans en faire de copies, mais devant ajuster leur structure sur un modèle commun il devient souhaitable d'opérer sur des copies.

La première série de questions qui intervient consiste à savoir si l'on doit inclure dans le traitement global le rapatriement des données source dans un même classeur. Cela nécessite d'ouvrir plusieurs autres classeurs, donc savoir quel chemin permet d'y accéder, puis avoir quelle feuille récupérer dans chacun...

Là j'aurais déjà un doute au vu de tes propos : Y a-t-il plusieurs classeurs ou un seul dans lequel il faut récupérer plusieurs feuilles ?

Pour coder une opération il faut des indications très précises et exhaustives : noms de fichiers, noms de feuilles, chemins de dossiers...

Laissons cette partie qui peut être dissociée, pour voir les conditions d'un traitement des feuilles source rassemblées dans un classeur, ayant un nom générique : Dir complété par un numéro d'ordre.

A ce stade, on doit établir une en-tête unique de récap.

On sait que des colonnes ne seront pas présentes dans toutes les sources. Pour mettre en oeuvre un traitement homogène il conviendra donc d'insérer des colonnes à l'emplacement des colonnes manquantes de façon à obtenir une structure homogène.

Si tu me dis que Pôle n'est plus Pôle mais Unité (déjà une imprécision au départ)...

Il faudrait au moins pouvoir tabler sur la succession de colonnes :

"Direction;Département;Unité;Intitulé du poste;Nom;Prénom;Localisation"

pour les 7 premières colonnes, sachant que si des colonnes manquent dans cette série, il ne peut y en avoir en plus ni avec des libellés différents.

Je peux facilement contourner des différences de casse pour assimiler Unité et unité, qui sont deux libellés distincts, mais des différences telles que Intitulé poste au lieu de Intitulé du poste ne seront appréhendables que sur la base d'un mot clé commun... et ne parlons pas d'autres différences ou de libellés parasites qui rendraient vite la situation inextricables ou exigeraient une procédure à exécuter préalablement qui pourrait s'avérer plus longue que le traitement recherché proprement dit.

Il convient aussi que la colonne "Commentaires" figure en dernière colonne.

Autre élément qui va obliger à quelques contorsions : les dates, sous 2 aspects.

Les dates contraignent toujours à des précautions particulières. D'abord parce qu'on ne sait jamais si les dates sont des dates avant de l'avoir vérifié. Les dates sont des nombres dans Excel, et les demandeurs affirmant qu'ils ont des dates dans leur tableau alors que lorsqu'on va y regarder on constate qu'il s'agit de texte, sont légions !

Des dates en intitulés de colonnes vont un peu compliquer les manipulations.

En outre on aura des différences en nombre de colonnes dates...

Est-ce que l'on peut au moins être assuré que les colonnes dates seront toujours dans un ordre chronologique croissant de la gauche vers la droite.

Comme aucune feuille source ne pourra servir de référence à cet égard, il faudra recueillir toutes les dates, les reclasser pour définir leur rang relatif dans la ligne d'en-tête. Et insérer des colonnes pour les date manquantes dans les feuilles source.

Si l'ordre chronologique n'est pas respecté cela aboutirait à ce que les mêmes dates n'occupent pas les mêmes colonnes dans chaque source. Il faudrait donc alors opérer un reclassement préalable de ces colonnes dans les feuilles source.

Je réserve les autres détails pour plus tard. Car tous ces éléments doivent d'abord être clarifiés.

Cordialement.

edit: Salut Dhany ! Ton invocation de l'anti-programmation va peut-être attirer jmd...

Bonjour MFerrand,

Désolé pour ma réponse si tardive, mais j'ai finalement pu résoudre mon problème en utilisant power query (entre temps mon disque dur pro a crashé et j'ai perdu des tonnes de données aaargh...). Ca me permet de créer moi-même ma solution en évitant de me coltiner du VBA (quand bien même tu aurais pu créer une macro, il aurait fallu que je puisse ensuite la modifier pour l'adapter à d'éventuels changements ultérieurs).

Bref, je te remercie du temps que tu m'as consacré et de ta pédagogie.

Cordialement

Bonico

Rechercher des sujets similaires à "mise forme automatisee onglets"