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

  • Initiateur de la discussion Initiateur de la discussion philOISE
  • Date de début Date de début

Boostez vos compétences Excel avec notre communauté !

Rejoignez Excel Downloads, le rendez-vous des passionnés où l'entraide fait la force. Apprenez, échangez, progressez – et tout ça gratuitement ! 👉 Inscrivez-vous maintenant !

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

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

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

Dernière édition:
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

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
 
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
 
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

- Navigue sans publicité
- Accède à Cléa, notre assistante IA experte Excel... et pas que...
- Profite de fonctionnalités exclusives
Ton soutien permet à Excel Downloads de rester 100% gratuit et de continuer à rassembler les passionnés d'Excel.
Je deviens Supporter XLD

Discussions similaires

Retour