XL pour MAC Création d'un tableau en fonctions de 2 critères des tableaux a partir d'une liste

philOISE

XLDnaute Nouveau
bonjour
je suis tout nouveau sur ce forum ma recherche extraire des données d'une liste de 2 colonnes pour présenter sous forme d"un tableau
mais ou cela se complique pour moi c'est en prenant compte les années et des débuts de série en fonction d'une date
dans le fichier joint je pense avoir été plus clair sur ma recherche
un grand merci aux Experts qui pourront m'aider
bonne journée
PHIL
 

Pièces jointes

  • Recherche excel .xlsx
    12.5 KB · Affichages: 25

job75

XLDnaute Barbatruc
Bonsoir philOISE,, bienvenue sur XLD,

Félicitations pour ce 1er post, c'est un joli problème.

Voyez le fichier joint et cette macro dans le code de la feuille (clic droit sur l'onglet et Visualiser le code) :
VB:
Private Sub Worksheet_Change(ByVal Target As Range)
Dim P As Range, dat, an%, mois As Byte, i&, x$, tablo, ub&, j&
Set P = [J15:M27]
dat = [L10] & "/" & [L11]
Application.ScreenUpdating = False
Application.EnableEvents = False 'désactive les évènements
P.ClearContents 'RAZ
If IsDate(dat) Then
    dat = CDate(dat)
    an = Year(dat): mois = Month(dat)
    P(1, 2) = an & IIf(mois > 1, "/" & an + 1, "")
    P(1, 3) = an + 1 & IIf(mois > 1, "/" & an + 2, "")
    P(1, 4) = an + 2 & IIf(mois > 1, "/" & an + 3, "")
    For i = 0 To 11
        P(i + 2, 1) = Format(DateSerial(an, mois + i, 1), "mmmm")
    Next
    x = LCase(P(2, 1)) & an
    tablo = [A7].CurrentRegion 'matrice, plus rapide
    ub = UBound(tablo)
    For i = 1 To ub
        If LCase(Trim(tablo(i, 1))) & Trim(tablo(i, 2)) = x Then
            For j = i To i + 11
                If j > ub Then Exit For
                P(2 + j - i, 2) = tablo(j, 3)
            Next j
            For j = j To i + 23
                If j > ub Then Exit For
                P(2 + j - i - 12, 3) = tablo(j, 3)
            Next j
            For j = j To i + 35
                If j > ub Then Exit For
                P(2 + j - i - 24, 4) = tablo(j, 3)
            Next j
            Exit For
        End If
    Next i
End If
Application.EnableEvents = True 'réactive les évènements
End Sub
La macro se déclenche quand on modifie ou valide une cellule quelconque.

Pour remplir la plage J15:M27 il suffit de renseignez les cellules L10 et L11.

Bonne nuit.
 

Pièces jointes

  • Recherche excel(1).xlsm
    22.3 KB · Affichages: 12

job75

XLDnaute Barbatruc
Bonjour philOISE, le forum,

Une solution nettement plus simple et complète dans ce fichier (2) :
VB:
Private Sub Worksheet_Change(ByVal Target As Range)
Dim P As Range, dat, i As Variant, an%, mois As Byte
Set P = [D15:G27]
dat = [F10] & "/" & [F11]
Application.ScreenUpdating = False
Application.EnableEvents = False 'désactive les évènements
P.ClearContents 'RAZ
If IsDate(dat) Then
    dat = CDate(dat)
    i = Application.Match(CLng(dat), Columns(1), 0) 'recherche de la date en colonne A
    If IsNumeric(i) Then
        P(2, 2).Resize(12) = Cells(i, 2).Resize(12).Value
        P(2, 3).Resize(12) = Cells(i + 12, 2).Resize(12).Value
        P(2, 4).Resize(12) = Cells(i + 24, 2).Resize(12).Value
    End If
    '---en-têtes---
    an = Year(dat): mois = Month(dat)
    P(1, 2) = an & IIf(mois > 1 And Application.CountA(P.Columns(2)) = 12, "/" & an + 1, "")
    P(1, 3) = an + 1 & IIf(mois > 1 And Application.CountA(P.Columns(3)) = 12, "/" & an + 2, "")
    P(1, 4) = an + 2 & IIf(mois > 1 And Application.CountA(P.Columns(4)) = 12, "/" & an + 3, "")
    For i = 0 To 11
        P(i + 2, 1) = Format(DateSerial(an, mois + i, 1), "mmmm")
    Next
End If
Application.EnableEvents = True 'réactive les évènements
End Sub
Mois et années ont été remplacés par des dates formatées en colonne A.

A+
 

Pièces jointes

  • Recherche excel(2).xlsm
    21 KB · Affichages: 5
Dernière édition:

Jacky67

XLDnaute Barbatruc
bonjour
je suis tout nouveau sur ce forum ma recherche extraire des données d'une liste de 2 colonnes pour présenter sous forme d"un tableau
mais ou cela se complique pour moi c'est en prenant compte les années et des débuts de série en fonction d'une date
dans le fichier joint je pense avoir été plus clair sur ma recherche
un grand merci aux Experts qui pourront m'aider
bonne journée
PHIL
Bonjour PHIL
Hello job75
Une proposition sans vba avec le classeur de job75
Attention, il y a un espace derrière "Janvier" (a7)
 

Pièces jointes

  • Recherche excel .xlsx
    19.5 KB · Affichages: 18

philOISE

XLDnaute Nouveau
Un grand merci à JOB75 et JACKY67 d'avoir consacré du temps pour m'apporter des réponses à ma recherche
maintenant j'ai le choix VBA ou sans VBA
compte tenu que je débute je vais choisir sans VBA

une petite question pour JACKY 67
de G16 à G27 le mois est suffisant pas besoin de faire refernce aux années car dans en tête de tableau de K15 à M15 l'année ou les années apparaissent cela me suffit
comment faire
merci de te lire
encore merci aux experts
bonne soirée
PHIL60
 

philOISE

XLDnaute Nouveau
merci JFL excel je vais regarder demain à tête reposée car Power query x'est aussi nouveau pour moi
message pour Jacky 67
en fait pour les mois pas de problème il suffit de changer le format, mais pour les entêtes de colonnes il y a un petit bogue
bonne soirée
PhilOISE
 

job75

XLDnaute Barbatruc
Bonjour philOISE, Jacky67, le forum,

Dans ce fichier (3) les formules font exactement ce que fait le VBA de mon post #3.

Sur D16: D27 :
Code:
=SIERREUR(DATE(""&F$11;MOIS("1/"&F$10)+LIGNE()-16;1);"")
Sur E15:G15 :
Code:
=REPT($F11+COLONNE()-5&REPT("/"&$F11+COLONNE()-4;($F10<>"janvier")*(NB(E16:E27)=12));$D16<>"")
Sur E16:G27 :
Code:
=SIERREUR(INDEX(Montant;EQUIV(--($F$10&"/"&$F$11);Mois;0)+LIGNE()-16+12*(COLONNE()-5));"")
A+
 

Pièces jointes

  • Recherche excel(3).xlsx
    13.3 KB · Affichages: 5

Discussions similaires