XL 2021 Affection d'une donnée liée à un intervalle de périodes à d'autres intervalles de périodes

ACH

XLDnaute Nouveau
Bonjour,

Des services ont eu plusieurs appellations à différentes périodes (Tableau 2) et j'aimerai qu'en fonction du service (ex : 10000) l'on puisse affecter l'appellation (ex: II lo 22) à la période correspondante dans le tableau 1. Je soupçonne l'utilisation d'un equiv avec un index mais pour le traitement des périodes c'est plus délicat.
Je joins un fichier pour vous illustrer mon exemple.

Merci d'avance pour vos commentaires,

Ach
 

Pièces jointes

  • Exemple affectation données à la bonne période.xlsx
    12 KB · Affichages: 3

sylvanu

XLDnaute Barbatruc
Supporter XLD
Bonjour Ach, Djidji,
Un essai en PJ avec une colonne supplémentaire et :
VB:
=SIERREUR(SIERREUR(INDEX($I$5:$I$10;SOMME.SI.ENS($G$5:$G$10;$H$5:$H$10;A19;$J$5:$J$10;"<="&C19;$K$5:$K$10;">="&D19));INDEX($I$5:$I$10;SOMME.SI.ENS($G$5:$G$10;$H$5:$H$10;A19;$J$5:$J$10;">="&C19;$K$5:$K$10;"<="&D19)));"")
Mais à tester avec d'autres configurations pour vérifications.
 

Pièces jointes

  • Exemple affectation données à la bonne période (1).xlsx
    12.7 KB · Affichages: 4

ACH

XLDnaute Nouveau
Bonjour Ach, Djidji,
Un essai en PJ avec une colonne supplémentaire et :
VB:
=SIERREUR(SIERREUR(INDEX($I$5:$I$10;SOMME.SI.ENS($G$5:$G$10;$H$5:$H$10;A19;$J$5:$J$10;"<="&C19;$K$5:$K$10;">="&D19));INDEX($I$5:$I$10;SOMME.SI.ENS($G$5:$G$10;$H$5:$H$10;A19;$J$5:$J$10;">="&C19;$K$5:$K$10;"<="&D19)));"")
Mais à tester avec d'autres configurations pour vérifications.
Bonjour Sylvanu,

Merci pour votre aide, il me faut un moment pour comprendre cette formule imbriquée. Dès que j'aurai compris et fais les tests je reviendrai vers vous.

Encore merci,

Ach
 

ACH

XLDnaute Nouveau
Re,
Le problème est que vous n'expliquez pas réellement et précisément les règles, il faut deviner.
J'en ai déduit quelques unes des exemples donnés mais ne suis pas sur de mon interprétation.
Bonjour Sylvanu,

Désolé, si j'ai été vague dans mes explications. Je vais essayer d'être exhaustif.

La table 2 accueille le Masterdata des bureaux.

Exemple : le bureau dont le centre de coût 10000 ne change jamais peut subir différentes appellations à différentes périodes. Exemple : L’appellation « II hg 45 » de novembre 2014 à décembre 2016 et l’appellation « II lo 22 » de janvier 2017 à décembre 2021. Ce tableau subira des changements liés à la création de nouveaux centres de coûts avec des périodes futures reprenant d’autres appellations.

Le tableau 1 quant à lui va reprendre des périodes de grandes restructurations de la société. Ces périodes seront identiques pour tous les centres de coûts et pourront également accueillir d’autres périodes futures concernant des réorganisations futures.

Le but est que le tableau 1 reprenne les bonnes appellations du tableau 2 dans les intervalles de périodes adéquates des restructurations. Cependant, en vous expliquant le problème, je me rends compte qu’il est possible qu’une période de restructuration (tableau 1) puisse couvrir deux périodes du tableau 2, auquel cas j’imagine qu’il faudrait une deuxième colonne dans le tableau 1 pour répondre à cette éventualité.

Merci,

Ach
 

ACH

XLDnaute Nouveau
Re,
Dites au moins si la solution de la PJ #5 vous satisfait, sinon dites sur quelle ligne et pourquoi.
Bonjour,

Je viens de copier la formule proposée et il semble y avoir des incohérences (cnf pièces jointes) que j'ai surligné en rouge. Je vais encore chercher mais votre aide est la bienvenue.

Encore merci pour votre proposition

Ach
 

Pièces jointes

  • Exemple affectation.xlsx
    11.9 KB · Affichages: 4

sylvanu

XLDnaute Barbatruc
Supporter XLD
Bonjour,
je me rends compte qu’il est possible qu’une période de restructuration (tableau 1) puisse couvrir deux périodes du tableau 2,
C'est votre hypothèse du post #8 qui se vérifie.
Cette hypothèse n'était pas connue de la PJ #5, et n'en tient évidemment pas compte.
Mais là je ne vois pas comment contourner le problème simplement.
Hormis en VBA, vous acceptez le VBA ?
 

sylvanu

XLDnaute Barbatruc
Supporter XLD
Re,
Pas bien sur d'avoir tout bien compris l'explication du post #8.
Alors un essai en PJ avec cette macro :
VB:
Sub Affectation()
    Application.ScreenUpdating = False          ' On fige l'écran pour aller plus vite
    T = Range("A2:D" & [A65500].End(xlUp).Row)  ' Transfert tableau gauche dans un array
    For L = 2 To [F65500].End(xlUp).Row         ' Pour toutes les lignes du tableau de droite
        CCO = Cells(L, "F")                     ' Acquisition des paramètrse tableau droit
        Dfrom = Cells(L, "H")
        Dto = Cells(L, "I")
        For i = 1 To UBound(T)                  ' Pour chaque ligne array descriptif
            If T(i, 1) = CCO Then               ' Si c'est le bon CCO
                ' Si "Date To" est compris dans l'intervalle du tableau gauche
                If Dto <= T(i, 4) And Dto >= T(i, 3) Then Cells(L, "G") = T(i, 2)   ' Alors on récupère la Description
            End If
        Next i
    Next L
End Sub
A l'ouverture du fichier il vous faut valider les macros, si ce n'est déjà fait.
On appuie sur le bouton pour lancer la macro.

Idem que précédemment, si erreur donnez fichier avec lignes erronées.
 

Pièces jointes

  • Exemple affectation (V1).xlsm
    18.2 KB · Affichages: 2

ACH

XLDnaute Nouveau
Re,
Pas bien sur d'avoir tout bien compris l'explication du post #8.
Alors un essai en PJ avec cette macro :
VB:
Sub Affectation()
    Application.ScreenUpdating = False          ' On fige l'écran pour aller plus vite
    T = Range("A2:D" & [A65500].End(xlUp).Row)  ' Transfert tableau gauche dans un array
    For L = 2 To [F65500].End(xlUp).Row         ' Pour toutes les lignes du tableau de droite
        CCO = Cells(L, "F")                     ' Acquisition des paramètrse tableau droit
        Dfrom = Cells(L, "H")
        Dto = Cells(L, "I")
        For i = 1 To UBound(T)                  ' Pour chaque ligne array descriptif
            If T(i, 1) = CCO Then               ' Si c'est le bon CCO
                ' Si "Date To" est compris dans l'intervalle du tableau gauche
                If Dto <= T(i, 4) And Dto >= T(i, 3) Then Cells(L, "G") = T(i, 2)   ' Alors on récupère la Description
            End If
        Next i
    Next L
End Sub
A l'ouverture du fichier il vous faut valider les macros, si ce n'est déjà fait.
On appuie sur le bouton pour lancer la macro.

Idem que précédemment, si erreur donnez fichier avec lignes erronées.
Merci pour les explications sur votre codage. L’exécution de la macro prend pas mal de temps chez moi. Mais les résultats sont correctes .

Un tout grand merci

Ach
 

Statistiques des forums

Discussions
312 215
Messages
2 086 329
Membres
103 183
dernier inscrit
karelhu35