Formules extraire Date

Paulle

XLDnaute Occasionnel
Bonjour,

Je voudrai récupérer dans la feuille Synthese le dernier jour de chaque mois et le montant correspondant de la feuille Releve.

J’ai bien tenté des formules =Max(Si(…., mais sans succès.
J’ai mis un fond jaune à titre indicatif pour les cellules du dernier jour de chaque mois.

En récupérant les valeurs Date et Montant de la feuille Synthese, je voudrai faire un graphique dans la feuille Graph.
Cela je pense pouvoir y arriver.

Merci pour votre aide.
 

Pièces jointes

  • Classeur01.xlsm
    9.2 KB · Affichages: 57

Paf

XLDnaute Barbatruc
Bonjour ,

un essai macro :
VB:
Sub Synthèse()
Dim T, dico, TT, Plage As Range, i As Long
Set dico = CreateObject("Scripting.Dictionary")
With Worksheets("Releve")
Set Plage = .Range("A2:B" & .Range("A" & Rows.Count).End(xlUp).Row)
Plage.Sort Key1:=Range("A2"), Order1:=xlAscending
End With
T = Plage
For i = LBound(T, 1) To UBound(T, 1) - 1
    T(i, 1) = CDbl(T(i, 1))
    If Month(T(i, 1)) <> Month(T(i + 1, 1)) Then dico(T(i, 1)) = T(i, 2)
Next

dico(T(UBound(T, 1), 1)) = T(UBound(T, 1), 2)
TT = Application.Transpose(Array(dico.keys, dico.Items))

With Worksheets("Synthese")
.Range("A2").Resize(UBound(TT, 1), UBound(TT, 2)) = TT
.Columns(1).NumberFormat = "m/d/yyyy"
End With
End Sub

A+
 

Paulle

XLDnaute Occasionnel
Merci Paf,
Juste un petit bémol, dans la feuille Synthèse, la dernière date de la colonne A n'est pas dans le bon format.
Le mois et le jour sont inversés.
Et j'aimerai que la macro s’exécute à l'ouverture du fichier.
 

Pièces jointes

  • Classeur01a.xlsm
    17.1 KB · Affichages: 46

Paf

XLDnaute Barbatruc
Re,

avec l'utilisation des tableau, on a souvent ce genre de souci avec les dates qui passent au format US.
J'avais pris soin d'y remédier, mais la dernière ligne est passée à coté.

Rajouter juste avant :
Code:
dico(T(UBound(T, 1), 1)) = T(UBound(T, 1), 2)
la ligne suivante :
Code:
T(UBound(T, 1), 1) = CDbl(T(UBound(T, 1), 1))

A+

Edit : Bonjour job75
 
Dernière édition:

job75

XLDnaute Barbatruc
Bonjour Paulle, re-bonjour Paf,

Voyez le fichier joint et cette formule matricielle en Synthese!A2 :
Code:
=SIERREUR(INDEX(Releve!A:A;PETITE.VALEUR(SI(ESTNUM(Releve!$A$1:$A$1000);SI(LIGNE(Releve!$A$1:$A$1000)=EQUIV(DATE(ANNEE(Releve!$A$1:$A$1000);MOIS(Releve!$A$1:$A$1000)+1;0);Releve!$A$1:$A$1000);LIGNE(Releve!$A$1:$A$1000)));LIGNES(A$2:A2)));"")
A valider par Ctrl+Maj+Entrée puis à copier à droite et vers le bas.

Nota : les dates dans Releve!A:A doivent être toujours classées en ordre croissant.

Il peut y avoir des cellules vides ou des textes intercalés.

Bien entendu adapter la valeur 1000 (ligne maxi) au besoin réel.

A+
 

Pièces jointes

  • Classeur(1).xlsx
    17.5 KB · Affichages: 48

Modeste geedee

XLDnaute Barbatruc
Bonsour®
Bonjour,

Je voudrai récupérer dans la feuille Synthese le dernier jour de chaque mois et le montant correspondant de la feuille Releve.

J’ai bien tenté des formules =Max(Si(…., mais sans succès.
J’ai mis un fond jaune à titre indicatif pour les cellules du dernier jour de chaque mois.

En récupérant les valeurs Date et Montant de la feuille Synthese, je voudrai faire un graphique dans la feuille Graph.
Cela je pense pouvoir y arriver.

Merci pour votre aide.
sans formule ni macro...
Tableau croisé dynamique :
upload_2016-12-6_18-30-21.png
*
 

job75

XLDnaute Barbatruc
Re,

Une solution VBA, toujours en supposant les dates classées chronologiquement :
Code:
Private Sub Worksheet_Activate()
Dim t, i&, x$, anmois$, n&
With Feuil1 'CodeName de la 1ère feuille
  If Application.Count(.[A:A]) = 0 Then GoTo 1 'si aucune date
  t = .[A1].Resize(Application.Match(9 ^ 9, .[A:A]), 2) 'matrice, plus rapide
End With
For i = 1 To UBound(t)
  If IsDate(t(i, 1)) Then
    x = Year(t(i, 1)) & Month(t(i, 1))
    If x <> anmois Then anmois = x:: n = n + 1
    t(n, 1) = t(i, 1): t(n, 2) = t(i, 2)
  End If
Next
If n Then [A2].Resize(n, 2) = t
1 Range("A" & n + 2 & ":B" & Rows.Count) = ""
[A1].Resize(n + 1).Name = "X" 'plage nommée
[B1].Resize(n + 1).Name = "Y" 'plage nommée
End Sub
La macro est à placer dans le code de la feuille "Synthese", elle se déclenche quand on active la feuille.

Fichier joint.

Pour les durées d'exécution j'ai testé sur Win 10 - Excel 2013 avec 3000 dates donnant 102 mois :

- Classeur(3).xlsx => 0,5 seconde

- Classeur VBA(1).xlsm => 0,01 seconde.

A+
 

Pièces jointes

  • Classeur VBA(1).xlsm
    29.8 KB · Affichages: 44
Dernière édition:

Discussions similaires

Statistiques des forums

Discussions
312 069
Messages
2 085 038
Membres
102 763
dernier inscrit
NICO26