Microsoft 365 VBA recopie données onglets entre deux dates

Paddy33000

XLDnaute Nouveau
Bonjour,
Je souhaiterai créer une macro ou un filtre élaboré qui,lorsque dans la feuille récap je renseigne une date de début et une date de fin, les données (qui sont dans les 3 feuilles avant la feuille "recap") qui correspondent à ce critère de date se recopie a la suite a partir de la cellule A10 de la page "recap".
Aussi lorsque je change de date début et date de fin, la macro efface le résultat précédent et copie les données actualisées.
En pj fichier exemple
Merci pour votre aide
 

Pièces jointes

  • EXTRAIRE CRITERES DATE.xlsx
    19.3 KB · Affichages: 5

Laurent78

XLDnaute Occasionnel
Bonsoir,
Faut-il absolument du vba ?
Cela peut se faire également avec des fonctions Excel (ASSEMB.V, FILTRE, TRIER, etc ...) (cf fichier joint en tant qu'idée)
ou en PowerQuery également.

Petit conseil : utiliser les tableaux structurés, c'est, me semble-t-il plus "propre" ;)

Bonne soirée
Laurent
 

Pièces jointes

  • EXTRAIRE CRITERES DATE.xlsx
    24.4 KB · Affichages: 5

job75

XLDnaute Barbatruc
Bonsoir Paddy33000, Laurent78,

Le code (classique) de la feuille RECAP :
VB:
Private Sub Worksheet_Activate()
Worksheet_Change [A2]
End Sub

Private Sub Worksheet_Change(ByVal Target As Range)
If Intersect(Target, [A2:B2]) Is Nothing Then Exit Sub
Dim lig&, dat1, dat2, w As Worksheet
lig = 6 '1ère ligne à renseigner
dat1 = [A2].Value2
dat2 = [B2].Value2
Application.ScreenUpdating = False
Range("A" & lig & ":E" & Rows.Count).Delete xlUp 'RAZ
If Not IsNumeric(CStr(dat1)) Or Not IsNumeric(CStr(dat2)) Then Exit Sub
For Each w In Worksheets
    If UCase(w.Name) <> "RECAP" Then
        With w.Range("A5").CurrentRegion
            .AutoFilter 1, ">=" & dat1, xlAnd, "<=" & dat2
            .Copy Cells(lig, 1)
            .AutoFilter
            Cells(lig, 1).Resize(, 5).Delete xlUp
            lig = Cells(Rows.Count, 1).End(xlUp).Row + 1
        End With
    End If
Next
End Sub
A+
 

Pièces jointes

  • EXTRAIRE CRITERES DATE(1).xlsm
    30.3 KB · Affichages: 2

Paddy33000

XLDnaute Nouveau
Laurent,
Et si dans les feuilles qui sont avant récap, certaines feuilles n'ont que la colonne montant et pas les 2 autres. Imaginons que la feuil3 pour les montants n'a que la colonne "Montant 1".Comment faire pour que la formule s'adapte?
Merci pour votre retour
 

Paddy33000

XLDnaute Nouveau
Laurent,
Et si dans les feuilles qui sont avant récap, certaines feuilles n'ont que la colonne montant et pas les 2 autres. Imaginons que la feuil3 pour les montants n'a que la colonne "Montant 1".Comment faire pour que la formule s'adapte?
Merci pour votre retour
Avec la macro, il est possible de n'avoir qu'une colonne et la macro fonctionne quand meme, mais pas si avec le premier exemple (formule sans vba).
 

job75

XLDnaute Barbatruc
Bon ce n'est pas trop l'usine à gaz, il suffit de copier-coller les colonnes une par une :
VB:
Private Sub Worksheet_Activate()
Worksheet_Change [A2]
End Sub

Private Sub Worksheet_Change(ByVal Target As Range)
If Intersect(Target, [A2:B2]) Is Nothing Then Exit Sub
Dim lig&, dat1, dat2, w As Worksheet, col%, i As Variant
lig = 6 '1ère ligne à renseigner
dat1 = [A2].Value2
dat2 = [B2].Value2
Application.ScreenUpdating = False
Rows(lig & ":" & Rows.Count).Delete 'RAZ
If Not IsNumeric(CStr(dat1)) Or Not IsNumeric(CStr(dat2)) Then Exit Sub
For Each w In Worksheets
    If UCase(w.Name) <> "RECAP" Then
        With w.Range("A5").CurrentRegion
            .AutoFilter 1, ">=" & dat1, xlAnd, "<=" & dat2
            For col = 1 To .Columns.Count
                i = Application.Match(.Cells(1, col), Rows(5), 0)
                If IsNumeric(i) Then .Columns(col).Copy Cells(lig, i) 'copie-colle chaque colonne
            Next col
            .AutoFilter
            Rows(lig).Delete
            lig = Cells(Rows.Count, 1).End(xlUp).Row + 1
        End With
    End If
Next w
End Sub
Mais il faut que les en-têtes de colonnes se retrouvent exactement dans la feuille RECAP.
 

Pièces jointes

  • EXTRAIRE CRITERES DATE(2).xlsm
    31.8 KB · Affichages: 1
Dernière édition:

Laurent78

XLDnaute Occasionnel
Laurent,
Et si dans les feuilles qui sont avant récap, certaines feuilles n'ont que la colonne montant et pas les 2 autres. Imaginons que la feuil3 pour les montants n'a que la colonne "Montant 1".Comment faire pour que la formule s'adapte?
Merci pour votre retour
Bonjour,
Si je comprends bien, toutes les feuilles auraient au minimum les colonnes DATE, LIBELLE, et au moins une colonnes MONTANT, mais par forcément MONTANT1, MONTANT2 ou MONTANT3, est-ce bien cela ?
Si oui, supposons qu'une feuille n'ait que MONTANT2 et une autre que MONTANT3, dans le récap, faut-il tout de même les 3 colonnes MONTANT1, MONTANT2 et MONTANT3 ?

Arrivé ici, je pense qu'il nous faudrait un peu plus d'info sur le projet. Parce que, que cela soit en formules, en VBA, en PowerQuery, nous risquons de revoir notre copie en fonction de du projet.
 

Laurent78

XLDnaute Occasionnel
@Laurent78 le fichier du post #7 me paraît clair c'est pourquoi j'ai donné la solution du post #11.
Possible, mais, d'expérience, je me "méfie". N'ayant qu'une ébauche du fichier, qui a d'ailleurs changé entre le post#1 et #7, je me permettais de poser quelques questions complémentaires à Paddy, cela ne remet certainement pas ta proposition en question. Cdlt.
 

Laurent78

XLDnaute Occasionnel
Comme ce forum est un lieu d'échange, je me suis demandé si il était possible d'utiliser les fonctions Choisircols, trier, filter, etc ...., sans vba, pour le problème évoqué par Paddy.
Vous trouverez en pj une classeur avec quelques idées.
L'idée est de faire en sorte que si les 3 tableaux n'ont pas les mêmes colonnes (en nombre et/ou en nom et/ou en ordre) que cela fonctionne tout de même (si je ne me suis pas planté bien sûr).

Donc, on récupère la liste de tous les noms des champs des 3 tableaux (ASSEM.H), et on supprime les doublons (UNIQUE).
Chaque tableau à une colonne/champ intitulé vide; cette colonne servira à combler si besoin une colonne manquante. Par exemple, si dans le TableauB la colonne MONTANT1 n'existe pas elle sera émulée par la colonne vide.

Pas certain d'être très clair.
Cela est juste un partage d'idée pour ceux que cela intéresserait. Quelques ajustements sont certainement nécessaires.
@+
 

Pièces jointes

  • Idée pour Paddy.xlsx
    341.4 KB · Affichages: 1

Discussions similaires

Membres actuellement en ligne

Statistiques des forums

Discussions
315 098
Messages
2 116 190
Membres
112 679
dernier inscrit
Yupanki