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
Merci d'avance pour votre précieuse aide.
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.
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
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
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.
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
etUBound(tabloR, 2)
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é ?
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