Extraction de données entre 2 dates, dans différents groupes

Bonjour le Forum,

Je veux extraire des information d'une liste d'opérations d'un tableau avec des dates.

Il y a 3 "groupes", avec des cellules vides entre les groupes.

Les opérations sont classées par groupe et non par dates.

Je choisi ma date de début et ma date de fin, et je veux extraire, dans un nouveau tableau, les colonnes A, B, D de toutes les lignes correspondantes.

Je pensais chercher les indexes correspondants aux dates les plus proches, et ensuite extraire les colonnes que je veux, entre les indexes trouvées.

Mais je ne sais pas comment faire (sinon, je n'aurais pas posé la question ), et peut-être existe-t-il une meilleure solution.

Merci d'avance pour votre précieuse aide.

95classeur2.xlsx (10.62 Ko)

Bonjour

Un essai à tester. Te convient-il ?

Bye !

313classeur2-v1.xlsm (23.60 Ko)

Bonjour,

Il est possible d'extraire toutes les lignes répondant aux critères de début et de fin avec un filtre avancé (Ruban Données/Filtre Avancé).

Pour cela il te faut :

Une plage de données (A1:D66)

Une zone de critère (cf F7:F8 dans le fichier joint) avec la formule =ET(B2>=$G$4;B2<=$G$5)

Et une zone de résultats (F10:I10 dans le fichier joint)

Puis tu peux lancer le filtre.

Ensuite il est possible d'automatiser ce filtre via une macro que tu affectes à un bouton par exemple.

Attention, il semble que des cellules G4 et G5 ne soient pas des vraies dates.

202filtre-avance.xlsx (24.54 Ko)

Merci ouisansdoute et gmb pour vos réponses.

Merci d'avoir pris le temps de vous pencher sur mon problème.

ouisansdoute, il me semble que ta solution ne filtre que le groupe A, mais pas tous les groupes (A,B,C)

gmb, j'ai essayé d'adapter ta solution.

J'ai crée un bouton, et j'y ai mis ta macro..........qui ne fonctionne pas.

Feuille "Fichier de suivi" = tableau que je dois filtrer

Dans la feuil4, j'ai mis mes dates de début et de fin en haut de page, et je voudrais mettre le tableau filtré en dessous (capture d'écran).

Ci-dessous, la macro adaptée (avec des commentaires pour que tu puisses comprendre ce que je comprends...ou pas ) , mais comme je ne comprends pas ce qui se passe après la ligne "k=0", je n'ai rien touché.

Merci pour ton aide.

Option Explicit

Dim tablo, tabloR(), dteD As Date, dteF As Date, i&, k&

Private Sub CommandButton1_Click()

    Sheets("Fichier de Suivi").Select 'Feuille où il y a les données à récupérer
    tablo = Range("A4:AC" & Range("A" & Rows.Count).End(xlUp).Row) 'Cellules à selectionner (A4:AC FinDeListe)
    'Je suis allé sur la feuille "Fichier de suivi, et j'ai mis dans la variable "tablo", les cellules qui m'intéresse

    ' Feuil4 = feuille de restitution des données. Dans le haut de la feuille, il y a un tableau, avec la sélection des dates.
    Sheets("Feuil4").Select 'Sélection de la feuille où il y a dates de début et de fin
    dteD = Range("C2") ' Cellule de la date de début
    dteF = Range("C3") ' Cellule de la date de fin

    k = 0 'début du mystére, je ne comprends pas trop ce qui se passe dans les lignes suivantes....
    For i = 1 To UBound(tablo, 1)
        If tablo(i, 2) >= dteD And tablo(i, 2) <= dteF Then
            ReDim Preserve tabloR(3, k + 1)
            tabloR(0, k) = tablo(i, 1)
            tabloR(1, k) = tablo(i, 2) * 1
            tabloR(2, k) = tablo(i, 4)
            k = k + 1
     End If
    Next i
    Range("A5").CurrentRegion.Offset(1, 0).ClearContents '1er ligne du tableau restitué
    Range("A6").Resize(UBound(tabloR, 2), 3) = Application.Transpose(tabloR) '2er ligne du tableau restitué <-- LIGNE QUI EST SURLIGNEE EN JAUNE EN MODE DEBOGAGE

End Sub
capture

Bonjour

Le plus simple serait que tu joignes ton vrai fichier,au lieu d'une copie d'écran qui ne m'est d'aucun secours, en indiquant où tu veux obtenir le résultat : la macro modifiée ne le dit pas.

Bye !

Ci-joint, le "vrai" fichier.

J'ai remis la macro dans la feuille "Bilan".

Encore merci pour votre aide.

97classeur3.xlsm (32.58 Ko)

En retour.

Bye !

236classeur4.xlsm (40.39 Ko)

Merci gmb, pour ce nouveau fichier.

Cependant, je n'arrive pas à le faire fonctionner.

Option Explicit

Dim f As Worksheet, tablo, tabloR(), dteD As Date, dteF As Date, i&, j&, k&

Sub RecuperationDesDonnees() 'si j'ai bien compris, tu as réalisé le bouton de lancement avec "Contrôle de formulaire" et non avec "Contrôle ActiveX". Il y a t-il une utilisation différente pour chacun?

    Set f = Sheets("Données")
    tablo = f.Range("A4:AC" & f.Range("A" & Rows.Count).End(xlUp).Row) 

' La feuille où se trouve C2 et C3, n'est pas spécifiée?
    dteD = Range("C2") ' Date début
    dteF = Range("C3") ' Date fin

    k = 0 
    For i = 1 To UBound(tablo, 1)
        If tablo(i, 6) >= dteD And tablo(i, 6) <= dteF Then 'Date = 6é colonne
            ReDim Preserve tabloR(UBound(tablo, 2), k + 1) 
            For j = 1 To 29 'Nb de colonne pris en compte =29. Si le tableau de données à plus de 29 colonnes, mais que ce qui m'intéresse sont uniquement les 29 premières colonnes? Est-ce que les 29 premieres colonnes sont copier et pas les autres, ou est-ce que ça bugg, parce que le tableau de données comporte plus de 29 colonnes?
                If j = 6 Then 'SI colonne de date
                    tabloR(j - 1, k) = CDate(tablo(i, j)) * 1   'Mise en forme de la date et copie de la cellule
                Else
                    tabloR(j - 1, k) = tablo(i, j) ' Copie de la cellule
                End If
            Next j
            k = k + 1
     End If
    Next i
    Range("A5:AC" & Application.Max(6, Range("A" & Rows.Count).End(xlUp).Row)).ClearContents ' Copie de l'entête
    Range("A5").Resize(UBound(tabloR, 2), UBound(tabloR, 1)) = Application.Transpose(tabloR) 'Copie du tableau <-- LIGNE QUI EST SURLIGNEE EN JAUNE EN MODE DEBOGAGE

End Sub

Que signifie

UBound(tabloR, 2)

et
UBound(tabloR, 1)

oups, mauvais bouton.

C'est la dernière ligne du code qui bugg.

Pour exécuter la macro à partir d'un bouton ActiveX, j'ai remplacé

Sub RecuperationDesDonnees()

par

Private Sub CommandButton1_Click()

Merci d'avance pour les réponses.

Pour le bouton ActiveX, j’en ai changé car il me provoquait un bug associé à un message qui disait :

‘’Impossible de sortir du mode création le contrôle ‘DTPicher23’ ne peut pas être créé.’’

Si tu veux le remettre, il te faut copier le code et le coller dans celui du bouton, dans la feuille VBA attachée au bouton.

Si le tableau de données à plus de 29 colonnes, mais que ce qui m'intéresse sont uniquement les 29 premières colonnes? Est-ce que les 29 premieres colonnes sont copier et pas les autres, ou est-ce que ça bugg, parce que le tableau de données comporte plus de 29 colonnes?

Fais l’essai : ça devrait marcher.

tabloR(j - 1, k) = CDate(tablo(i, j)) * 1   'Mise en forme de la date et copie de la cellule

Non, il ne s’agit pas de copier une cellule car on travaille sur des variables tableau. Il s’agit d’une ruse pour éviter qu’une date telle que 3/1/2017 qui se trouve dans la variable tablo ne se transforne (merci l’amérique) en 1/3/2017 en la copiant dans la variable tabloR

Que signifie

UBound(tabloR, 2)

Cette instruction donne la 2° dimension de la variable tabloR, c’est-à-dire le nombre de colonnes de cette variable. Ce nombre correspond en fait au nombre de lignes sur la feuille de calcul puisqu’on travaille avec une variable transposée.

OK ?

Bye !

merci gmb,

J'ai enfin touvé d'où venait l'erreur.

Dans ma 29é colonne, j'ai des commentaires qui font plus de 255 caractères.

Hors, il est indispensable de conserver ces commentaires.

Comment faire pour conserver le commentaires en intégralité ?

pour ton aide précieuse

Bonjour

jaco a écrit :

j'ai des commentaires qui font plus de 255 caractères. ....Comment faire pour conserver le commentaires en intégralité ?

Là, je ne vois pas : si une cellule contient plus de 255 caractères, on s'expose, au mieux à les voir tronqués si on la manipule (copier - coller...), et au pire à un bug !

Déslolé...

Bye !

J'ai trouvé comment palier ce problème.

Dans ma liste, j'ai un numéro unique d'opération.

Donc avec la macro, je génére un tableau trié en fonction des dates et avec le numéro unique.

Et pour avoir le commentaire, j'utilise

RECHERCHEV()

pour aller chercher l'info dans l'onglet d'origine.

Et en plus, sur le tableau généré par la macro, je peux rajouter des colonnes et les formules de ces nouvelles colonnes ne se modifie pas.

C'est top

beaucoup gmb

Rechercher des sujets similaires à "extraction donnees entre dates differents groupes"