Création d'un référentiel unique selon la codification de l'année en cours

KIM

XLDnaute Accro
Bonjour le forum, et les ami(e)s
Je ne créé pas un doublon mais je change seulement le titre de la discussion au regard de la simplification du problème.
J'ai besoin de votre aide et vous en remercie d'avance.

Le sujet a été très simplifié. Je reçois au 31/12 de chaque année un fichier du type Feuillle "Div2008" ave en col A la liste des divisions actives en 2008, en col D l'historique de la divison à travers les années antérieurs séparée par le car "#" et diverses données dont le Sigle, la DEP et le SVC de chaque unité.

Je souhaite construire dans la feuil REF un référentiel correspondant à l'année courante qui est dans l'exemple 2008 et qui correspond à la feuil "Div2008".
Pour construire ce référentiel: voir fichier joint, feuil REF
- Copier dans REF, à partir des feuilles des années antérieures Div2004 jusqu'à Div2008, et l'une derrière l'autre:
Col A : l'année ou le nom de la feuille
Col B: les unités de l'année correspondante
-Creer une col C des Div actives correspondantes à l'année en cours (ex 2008). C-à-d parcourir la Col D de l'année en cours et affecter à chaque Div rencontrer la div courante active ( col A). Ainsi j'aurai pour les div des années antérieures la div active de l'année en cours. Si la Div n'est plus active, mettre Fermée dans la case correspondate
Voir fichier joint.

Actuellement ce referentiel est créé à la main, je souhaite l'automatiser et vous en remercie d'avance de votre aide.

KIM
 

Pièces jointes

  • Histo_Divisions_v2.zip
    9 KB · Affichages: 28
  • Histo_Divisions_v2.zip
    9 KB · Affichages: 34
  • Histo_Divisions_v2.zip
    9 KB · Affichages: 29

CISCO

XLDnaute Barbatruc
Re : Création d'un référentiel unique selon la codification de l'année en cours

Bonjour

Ci-joint, un début du travail. Trois problèmes :

*Il y a certainement plus simple et plus beau,
*J'ai modifié la présentation des changements de noms dans div2008 histoire de me simplifier le travail. Si cela te pose vraiment trop de problèmes, on essayera de faire autrement...
*Certains résultats dans la colonne C ne sont pas identiques aux tiens. A toi de voir...

@ plus
 

Pièces jointes

  • Histo_Divisions_v2.zip
    21.5 KB · Affichages: 28
  • Histo_Divisions_v2.zip
    21.5 KB · Affichages: 32
  • Histo_Divisions_v2.zip
    21.5 KB · Affichages: 42

KIM

XLDnaute Accro
Re : Création d'un référentiel unique selon la codification de l'année en cours

Bonjour CISCO, et le forum,
Merci de ton aide. J'ai regardé ta solution:
1- Div2004, ..., Div2008 sont des fichiers que je reçois et que je ne souhaite pas les modifier. Peut-être recopier et faire ces modifs dans la feuille REF à partir de la col AA par ex.
2- Les Div actives de réference sont celles de l'année en cours c-a-d celles de la feuille Div2008. Dans la feuille REF, col C aucune Div de la Div2008 ne peut être "fermée", par ex KL125 que je dais retrouvée jusqu'en 2004.
3- Il y a des doublons dans REF:ColB. Normalement je dois rettrouver dans la col B les differents Div de toutes les années. Dans l'ex je dois avoir 91.
voir le resulta dans feuille REF_0
et j'ai remis la feuille Div2008 d'origine dans Div2008_0
Je pense qu'une macro peut traiter ce probleme. Merci de votre aide
Bien cdlt
KIM
 

Pièces jointes

  • Histo_Divisions_v21.zip
    22.4 KB · Affichages: 39

CISCO

XLDnaute Barbatruc
Re : Création d'un référentiel unique selon la codification de l'année en cours

Bonjour à tous, bonjour Kim

Je n'avais pas bien compris l'utilisation du tableau permettant de corriger les appellations, dans la feuille Div2008, d'où les erreurs dans le fichier précédent.

Ci-joint, une nouvelle version tenant compte de tes remarques. C'est toujours fait avec des formules, vu que je ne sais pas faire des macro en VBA.:rolleyes:

Ceci dit, ce n'est pas encore terminé vu que :
*Je ne trouve pas très belles les formules utilisées dans les colonnes A et B de la feuille REF.
*Si cette méthode de travail te semble utilisable, il faut modifier quelques unes des formules histoire que la feuille REF fasse appelle facilement à la dernière année, 2008 dans cet exemple, mais plus tard 2009, puis 2010... C'est certainement faisable avec INDIRECT sans grande difficulté.

Dis moi si ce travail semble utilisable dans ton vrai fichier.

PS : Je ne suis pas mécontent de ma petite trouvaille pour résoudre le problème lié à la lecture des ...#...#....#...#. Faut bien se faire des petits plaisirs, parfois :)

@ plus
 

Pièces jointes

  • Histo_Divisions_deuxième versionbis.zip
    21.1 KB · Affichages: 36
Dernière édition:

KIM

XLDnaute Accro
Re : Création d'un référentiel unique selon la codification de l'année en cours

Bonjour CISCO, et le forum,
Merci, le résultat est correct. C'est superbe mais j'ai rien compris à la formule de la col C feuille REF. Cette méthode me dépanne et utilisable dans mon fichier de données. En attendant d'autres améliorations, peux-tu STP m'expliquer les formules utilisées.
Merci d'avance
KIM
 

CISCO

XLDnaute Barbatruc
Re : Création d'un référentiel unique selon la codification de l'année en cours

... mais j'ai rien compris à la formule de la col C feuille REF...
KIM

Bonne blague...

Ceci dit

Code:
INDEX(Div2008!A$10:A$23;EQUIV("*"&REF!B10&"*";plage2008;0))

plage2008 est défini par =Div2008!$A$10:$A$23&Div2008!$D$10:$D$23

ce qui donne la concatenation (marqué par le &) de A10 et D10, de A11 et D11, ... jusqu'à A23 et D23, pris dans la feuille Div2008,
ce qui donne ABC123;ABC124;ABC125;BBC200BAC621#PQRS127#KL127#ABC128;KL123;KL124;KL125ABC126 et ainsi de suite


1er exemple : En C10, EQUIV("*"&REF!B10&"*";plage2008;0) =EQUIV("*"&ABC123&"*";plage2008;0) = EQUIV(*ABC123*;plage2008;0)
La fonction EQUIV recherche donc dans la plage2008 la position de n'importe quoi (marqué par le *) suivi de ABC123 suivi de n'importe quoi. Elle retourne ici 1, puisque c'est le premier de la liste plage2008.

On a donc
INDEX(Div2008!A$10:A$23;EQUIV("*"&REF!B10&"*";plage2008;0))=INDEX(Div2008!A$10:A$23;1) qui renvoie le contenu de la première (à cause du 1) ligne du pavé Div2008!A$10:A$23, donc Div2008!A$10, donc ABC123.

2ème exemple : En C13, EQUIV("*"&REF!B13&"*";plage2008;0) =EQUIV("*"&ABC126&"*";plage2008;0) = EQUIV(*ABC126*;plage2008;0)
La fonction EQUIV recherche donc dans la plage2008 la position n'importe quoi suivi de ABC126 suivi de n'importe quoi. Elle retourne ici 7, puisque c'est le 7ème de la liste plage2008.

On a donc
INDEX(Div2008!A$10:A$23;EQUIV("*"&REF!B10&"*";plage2008;0))=INDEX(Div2008!A$10:A$23;7) qui renvoie le contenu de la 7ème ligne du pavé Div2008!A$10:A$23, donc Div2008!A$16, donc KL125.

Finalement, on utilise
Code:
SI(NON(ESTNA(INDEX(Div2008!A$10:A$23;EQUIV("*"&REF!B10&"*";plage2008;0))));INDEX(Div2008!A$10:A$23;EQUIV("*"&REF!B10&"*";plage2008;0));"fermé")
de la forme SI(....;...; "fermé") juste pour renvoyer "fermé" si la fonction EQUIV ne trouve pas ce qu'elle cherche, autrement dit que l'appellation dans la colonne B n'existe plus en 2008.

Si je trouve une amélioration pour les colonnes A et B, je les "poste".

@ plus
 
Dernière édition:

Discussions similaires

Statistiques des forums

Discussions
312 398
Messages
2 088 073
Membres
103 709
dernier inscrit
amin Saadaoui