XL 2013 formule de recherche par mois

Camille123

XLDnaute Nouveau
Bonjour
j'ai une feuil 01 excel dans le quel se trouve des données et des dates aléatoires sur plusieurs colonnes
par exemple
colonne A colonne B colonne C
a 12/07/2019 12/09/2019
b 05/05/2019 01/07/2019
c 08/10/2020 08/08/2020
d 08/02/2019 07/08/2019
j'aimerais que dans ma feuil 02 il est une formule permetant de les classés par mois et année
colonne A janv2019 fev2019 ….
a
b
c
d
Merci pour votre aide.
 

Camille123

XLDnaute Nouveau
Bonjour JBARBE
Un grand merci pour le soutient.
mais sa ne prend pas en compte les autre colonne de date de changement sa prend juste que les dates de la colonne du premier changement et ne prend pas les dates de changement 2 - 3 - 4 - 5 - 6 - 7 - 8 - 9 - 10
merci de m'aider
cordialement :)
 

Camille123

XLDnaute Nouveau
Re,
Je ne comprends pas ton explication !
Peux-tu me donner un exemple de cellule dans la feuille Synthése que la macro ne prend pas et qui doit être mis dans la feuille compilation!
Sa ne prend pas en compte les dates des colonnes P-Q-R-S-T-U-V-W-X
Essaie de remplacer une date dans la colonne P pour mettre par exemple 02/03/2019 et tu lance la macro tu verras que sa n’apparaîtra pas dans mars 2019
 

JBARBE

XLDnaute Barbatruc
Re,
Excuse moi j'étais absent quelques minutes !
La macro est un peu longue mais c'est normal compte tenu du nombre important de cellules à comparer et à sélectionner !
Donc patiente après le clic du bouton GO ( ça ne va pas planter) !
A tester quand même !
 

Pièces jointes

  • suivi changement mensuel et synthèse.xlsm
    430 KB · Affichages: 5

JBARBE

XLDnaute Barbatruc
Re,
J'ai constaté quelques lignes vides ( oh très peu ) dans la feuille compilation !
J'ai donc modifié la macro pour quelle puisse aller un peut plus vite ( très peu vite hélas, il ne s’agit que de selection de lignes) !
Bonne soirée !
 

Pièces jointes

  • suivi changement mensuel et synthèse.xlsm
    429.8 KB · Affichages: 8
Dernière édition:

job75

XLDnaute Barbatruc
Bonsoir Camille123, Bernard, JBARBE,

Si l'on veut aller vite il faut utiliser des tableaux VBA et le Dictionary.

La macro dans le code de la feuille "compilation" du fichier joint (clic droit sur l'onglet et Visualiser le code ) :
VB:
Private Sub Worksheet_Activate()
Dim tablo, ncol%, d As Object, i&, j%, dat As Date, mois, item, x$
'---liste feuille Synthese---
tablo = Feuil55.[C40:X143] 'matrice, plus rapide, plage à adapter
ncol = UBound(tablo, 2)
Set d = CreateObject("Scripting.Dictionary")
For i = 1 To UBound(tablo)
    For j = 12 To ncol
        If IsDate(tablo(i, j)) Then
            dat = DateSerial(Year(tablo(i, j)), Month(tablo(i, j)), 1)
            d(dat & tablo(i, 1)) = tablo(i, j) 'mémorise la date
        End If
Next j, i
'--tableau feuille compilation---
Application.ScreenUpdating = False
If FilterMode Then ShowAllData 'si la feuille est filtrée
With [G7:BE110] 'plage à adapter
    .Value = "" 'RAZ
    tablo = .Value 'matrice, plus rapide
    ncol = UBound(tablo, 2)
    mois = .Rows(-1) '2 lignes au-dessus
    item = .Columns(-3) '4 colonnes à gauche
    For i = 1 To UBound(tablo)
        For j = 1 To ncol
            If IsDate(mois(1, j)) Then
                x = CDate(mois(1, j)) & item(i, 1)
                If d.exists(x) Then tablo(i, j) = d(x)
            End If
    Next j, i
    .Value = tablo 'restitution
End With
End Sub
Elle se déclenche quand on active la feuille.

Bonne nuit.
 

Pièces jointes

  • suivi changement mensuel et synthèse(1).xlsm
    384.6 KB · Affichages: 5
Dernière édition:

Camille123

XLDnaute Nouveau
Bonsoir Camille123, Bernard, JBARBE,

Si l'on veut aller vite il faut utiliser des tableaux VBA et le Dictionary.

La macro dans le code de la feuille "compilation" du fichier joint (clic droit sur l'onglet et Visualiser le code ) :
VB:
Private Sub Worksheet_Activate()
Dim tablo, ncol%, d As Object, i&, j%, dat As Date, mois, item, x$
'---liste feuille Synthese---
tablo = Feuil55.[C40:X143] 'matrice, plus rapide, plage à adapter
ncol = UBound(tablo, 2)
Set d = CreateObject("Scripting.Dictionary")
For i = 1 To UBound(tablo)
    For j = 12 To ncol
        If IsDate(tablo(i, j)) Then
            dat = DateSerial(Year(tablo(i, j)), Month(tablo(i, j)), 1)
            d(dat & tablo(i, 1)) = tablo(i, j) 'mémorise la date
        End If
Next j, i
'--tableau feuille compilation---
Application.ScreenUpdating = False
If FilterMode Then ShowAllData 'si la feuille est filtrée
With [G7:BD110] 'plage à adapter
    .Value = "" 'RAZ
    tablo = .Value 'matrice, plus rapide
    ncol = UBound(tablo, 2)
    mois = .Rows(-1) '2 lignes au-dessus
    item = .Columns(-3) '4 colonnes à gauche
    For i = 1 To UBound(tablo)
        For j = 1 To ncol
            If IsDate(mois(1, j)) Then
                x = CDate(mois(1, j)) & item(i, 1)
                If d.exists(x) Then tablo(i, j) = d(x)
            End If
    Next j, i
    .Value = tablo 'restitution
End With
End Sub
Elle se déclenche quand on active la feuille.

Bonne nuit.
Bonjour Job75
merci pour l'apport c'est excellente
bonne journée a toi
 

job75

XLDnaute Barbatruc
Bonjour Camille123, le forum,

Avec la macro précédente toute la plage G7:BE110 est préalablement effacée (RAZ).

Avec ce fichier (2) on ne modifie que les colonnes DATE de cette plage, sans toucher aux autres :
VB:
Private Sub Worksheet_Activate()
Dim tablo, ncol%, d As Object, i&, j%, dat As Date, mois, item, x$
'---liste feuille Synthese---
tablo = Feuil55.[C40:X143] 'matrice, plus rapide, plage à adapter
ncol = UBound(tablo, 2)
Set d = CreateObject("Scripting.Dictionary")
For i = 1 To UBound(tablo)
    For j = 12 To ncol
        If IsDate(tablo(i, j)) Then
            dat = DateSerial(Year(tablo(i, j)), Month(tablo(i, j)), 1)
            d(dat & tablo(i, 1)) = tablo(i, j) 'mémorise la date
        End If
Next j, i
'--tableau feuille compilation---
With [G7:BE110] 'plage à adapter
    tablo = .Value 'matrice, plus rapide
    ncol = UBound(tablo, 2)
    mois = .Rows(-1) '2 lignes au-dessus
    item = .Columns(-3) '4 colonnes à gauche
    For i = 1 To UBound(tablo)
        For j = 1 To ncol
            If IsDate(mois(1, j)) Then tablo(i, j) = d(CDate(mois(1, j)) & item(i, 1))
    Next j, i
    If FilterMode Then ShowAllData 'si la feuille est filtrée
    .Value = tablo 'restitution
End With
End Sub
Bonne journée.
 

Pièces jointes

  • suivi changement mensuel et synthèse(2).xlsm
    384.9 KB · Affichages: 4

Camille123

XLDnaute Nouveau
Bonjour Camille123, le forum,

Avec la macro précédente toute la plage G7:BE110 est préalablement effacée (RAZ).

Avec ce fichier (2) on ne modifie que les colonnes DATE de cette plage, sans toucher aux autres :
VB:
Private Sub Worksheet_Activate()
Dim tablo, ncol%, d As Object, i&, j%, dat As Date, mois, item, x$
'---liste feuille Synthese---
tablo = Feuil55.[C40:X143] 'matrice, plus rapide, plage à adapter
ncol = UBound(tablo, 2)
Set d = CreateObject("Scripting.Dictionary")
For i = 1 To UBound(tablo)
    For j = 12 To ncol
        If IsDate(tablo(i, j)) Then
            dat = DateSerial(Year(tablo(i, j)), Month(tablo(i, j)), 1)
            d(dat & tablo(i, 1)) = tablo(i, j) 'mémorise la date
        End If
Next j, i
'--tableau feuille compilation---
With [G7:BE110] 'plage à adapter
    tablo = .Value 'matrice, plus rapide
    ncol = UBound(tablo, 2)
    mois = .Rows(-1) '2 lignes au-dessus
    item = .Columns(-3) '4 colonnes à gauche
    For i = 1 To UBound(tablo)
        For j = 1 To ncol
            If IsDate(mois(1, j)) Then tablo(i, j) = d(CDate(mois(1, j)) & item(i, 1))
    Next j, i
    If FilterMode Then ShowAllData 'si la feuille est filtrée
    .Value = tablo 'restitution
End With
End Sub
Bonne journée.
Job75 c'est comme si tu lisais le besoin exacte de ma pensé.
mais y'a t'il une possibilité pour que si j'ajoute d'autre items aux lignes suivante qu'il le prend en compte?
Je t'en suis reconnaissant pour tout
 

Discussions similaires

Réponses
11
Affichages
504

Statistiques des forums

Discussions
312 083
Messages
2 085 175
Membres
102 807
dernier inscrit
Routier78