Microsoft 365 Tri par période via userform

Marvin57

XLDnaute Occasionnel
Bonjour à tout le forum,

dans le fichier ci-joint, j'aimerai pouvoir afficher sur l'onglet "TRI" les périodes choisies de l'onglet "BASE" via les textbox du userform1.

C'est à dire que si je choisi dans le textbox1 une date de départ et dans le textbox2 une date de fin et que je clique sur FILTRER il devrait m'afficher sur l'onglet "TRI" mon choix.

Merci à vous par avance pour votre aide.

Marvin57
 

Pièces jointes

  • Classeur1.xlsm
    58.9 KB · Affichages: 3
Solution
bonjour,

C'est curieux que vous n'ayez pas trouvé exemple de ce genre de filtrage (pas de tri) sur le forum.
Voici une proposition pas vba et power query.
A vous de vous occuper de vérification des dates saisies (début>fin) ou autre contrôles des valeurs
J'ai renommé vos textbox "tb_Début" et "tb_Fin" plus parlant que TextBox1 ou TextBox2.
Le préfixe tb_ pour le type de contrôle : TextBox

Hasco

XLDnaute Barbatruc
Repose en paix
bonjour,

C'est curieux que vous n'ayez pas trouvé exemple de ce genre de filtrage (pas de tri) sur le forum.
Voici une proposition pas vba et power query.
A vous de vous occuper de vérification des dates saisies (début>fin) ou autre contrôles des valeurs
J'ai renommé vos textbox "tb_Début" et "tb_Fin" plus parlant que TextBox1 ou TextBox2.
Le préfixe tb_ pour le type de contrôle : TextBox
 

Pièces jointes

  • Marvin57.xlsm
    65.8 KB · Affichages: 6

Marvin57

XLDnaute Occasionnel
bonjour,

C'est curieux que vous n'ayez pas trouvé exemple de ce genre de filtrage (pas de tri) sur le forum.
Voici une proposition pas vba et power query.
A vous de vous occuper de vérification des dates saisies (début>fin) ou autre contrôles des valeurs
J'ai renommé vos textbox "tb_Début" et "tb_Fin" plus parlant que TextBox1 ou TextBox2.
Le préfixe tb_ pour le type de contrôle : TextBox
Bonjour Hasco,

tout d'abord Merci pour votre travail effectué sur ma demande. Cela me convient très très bien. 👍

Ensuite j'ai pas vraiment cherché sur le net ou les forums. J'en ai vu quelques un, mais cela était compliqué pour moi de modifier.

En tout cas votre fichier va vraiment bien me servir.

A une prochaine peut-être.

Marvin57
 

Marvin57

XLDnaute Occasionnel
bonjour,

C'est curieux que vous n'ayez pas trouvé exemple de ce genre de filtrage (pas de tri) sur le forum.
Voici une proposition pas vba et power query.
A vous de vous occuper de vérification des dates saisies (début>fin) ou autre contrôles des valeurs
J'ai renommé vos textbox "tb_Début" et "tb_Fin" plus parlant que TextBox1 ou TextBox2.
Le préfixe tb_ pour le type de contrôle : TextBox
Re Hasco,

j'ai parlé un peu trop vite tout à l'heure, désolé.

Mais lorsque je place tout sur mon fichier réel, il ne fonctionne pas.
Cela pourrait venir de Power query d'après vous ?
 

Hasco

XLDnaute Barbatruc
Repose en paix
Bonjour,

Eh ben, vous abandonnez bien vite...Sans même une explication sur l'endroit où ça coince, ni message d'erreur. Ni ce que vous avez tenté de faire.

Ça ne vaut pas l'effort demandé.
 

Marvin57

XLDnaute Occasionnel
Bonjour,

Eh ben, vous abandonnez bien vite...Sans même une explication sur l'endroit où ça coince, ni message d'erreur. Ni ce que vous avez tenté de faire.

Ça ne vaut pas l'effort demandé.
Bonjour Hasco,

alors ne le prenez surtout pas mal, je ne voulez pas vous froisser. J'en suis désolé.

Voila ci-joint le fichier pour vous montrer comment sont les tableaux dans mon vrai fichier.
J'avais bien recopié votre code et changé les noms, mais il ne fonctionne pas. Et comme je ne connais pas du tout power query, je plane.

Alors si vous voulez bien y jeter un oeil pour me guider et dire ou l'erreur se trouve SVP.

Merci et a +
Marvin57
 

Pièces jointes

  • Marvin57.xlsm
    50.2 KB · Affichages: 1

Hasco

XLDnaute Barbatruc
Repose en paix
Re,

Je ne suis pas froissé, je disais simplement que je trouvais votre réaction un peu légère... et que c'est l'opportunité d'apprendre quelque chose, sans vouloir courir immédiatement au but, le forum n'est pas là pour ça même si certains le prennent pour une société de services.

Mais sans doute que je me trompe.
Pour autant, rappelez-vous que nous ne savons pas ce que vous connaissez ou non.

Pour notre affaire, j'ai oublié de vous dire que Power Query, ci-après nommé PQ (comme le papier :) ) est sensible à la casse, c'est à dire que pour lui "a" est différent de "A", "DATES" n'est pas "Dates"
Or dans votre premier fichier vous avez "DATES" et dans le fichier de votre dernier post : "Dates".
Dans ce dernier fichier vous avez également des colonnes qui n'existaient pas dans le premier.


Donc pour corriger cela, faites un click dans une cellule du tableau de résultat de la requête pq, à droite du ruban excel, un onglet s'affiche : "Requête". A gauche de ce dernier, vous avez un bouton "Modifier", cliquez dessus.

Vous verrez une fenêtre comme ci-dessous :
1683379021422.png

On voit que le panneau central nous montre une erreur qui nous indique que la colonne "DATES" n'existe pas ! On voit également que dans le panneau de droite c'est l'étape 'Filtrer' qui est sélectionnée. Cela ne veut pas dire que c'est elle qui produit l'erreur, il faut donc remonter les étapes une à une jusqu'à trouver la première sur laquelle l'erreur apparaît.
Cliquez successivement sur les précédente et vous verrez qu'à l'étape "Source", l'erreur n'apparaît pas mais qu'elle apparaît sur l'étape "Type modifié".
Sélectionnez cette dernière et dans la barre de formule vous verrez la formule suivante :
= Table.TransformColumnTypes(Source,{{"DATES", type date}, {"T1", type text}, {"T2", type text}, {"T3", type te-xt}})
Où vous voyez que "DATES" n'est pas "Dates" et que les colonnes "T1" à "T3" n'existe pas.
Vous avez de la chance, la colonne ayant une réelle importance pour notre affaire est la première.
Changez cette formule pour qu'elle ressemble à celle-ci :
= Table.TransformColumnTypes(Source,{{"Dates", type date}})
validez et oh miracle, les lignes de la source s'affichent.
vous aurez des corrections à faire également à l'étape 'Filtrer' où "DATES" apparaît également (2 fois)

Une fois terminées vos corrections, cliquez sur fermer et charger dans le menu de PQ et votre tableau dans la feuille se mettra à jour.

BRAVO vous avez réaliser vos premières correction sur PQ

Pour rappel, ce que nous faisons là n'est pas un TRI de données mais un FILTRAGE.
Le tri ordonne des éléments (lignes) du plus grand au plus petit ou du plus petit au plus grand alors qu'un FILTRE retient certains éléments et en laisse passer d'autres pour affichage, impression etc,
Tri et filtre peuvent être faits l'un après l'autre. Avec PQ mieux vaut Filtrer en premier et trier ensuite.

Autre rappel :
comme xld n'est pas non plus un centre de formation, je vous exhorte à trouver des tutos ou exercices sur ce que vous pourriez faire avec PQ, qui après une prise en main qui vaut que l'on s'accroche un peu, vaut franchement le prix de son apprentissage et vous libèrera de beaucoup de contrainte de vba.
 

job75

XLDnaute Barbatruc
Bonjour Marvin57, Hasco,

Dans l'UserForm le code du bouton FILTRER :
VB:
Private Sub CommandButton3_Click() 'bouton FILTRER
Dim LO As ListObject
Set LO = Sheets("TRI").ListObjects(1)
If Not LO.DataBodyRange Is Nothing Then LO.DataBodyRange.Delete xlUp 'RAZ
If Not IsDate(TextBox1) Or Not IsDate(TextBox2) Then Exit Sub
With [Tableau1].ListObject.Range
    .AutoFilter 1, ">=" & CLng(CDate(TextBox1)), xlAnd, "<=" & CLng(CDate(TextBox2))
    .SpecialCells(xlCellTypeVisible).Copy LO.Range(1)
    .AutoFilter 1 'ôte le filtre
End With
Application.Goto LO.Range(1) 'facultatif
End Sub
Edit : j'avais utilisé le nom "Tableau2" mais le tableau change de nom...

A+
 

Pièces jointes

  • Classeur1.xlsm
    66.1 KB · Affichages: 3
Dernière édition:

Marvin57

XLDnaute Occasionnel
Bonjour Marvin57, Hasco,

Dans l'UserForm le code du bouton FILTRER :
VB:
Private Sub CommandButton3_Click() 'bouton FILTRER
Dim LO As ListObject
Set LO = Sheets("TRI").ListObjects(1)
If Not LO.DataBodyRange Is Nothing Then LO.DataBodyRange.Delete xlUp 'RAZ
If Not IsDate(TextBox1) Or Not IsDate(TextBox2) Then Exit Sub
With [Tableau1].ListObject.Range
    .AutoFilter 1, ">=" & CLng(CDate(TextBox1)), xlAnd, "<=" & CLng(CDate(TextBox2))
    .SpecialCells(xlCellTypeVisible).Copy LO.Range(1)
    .AutoFilter 1 'ôte le filtre
End With
Application.Goto LO.Range(1) 'facultatif
End Sub
Edit : j'avais utilisé le nom "Tableau2" mais le tableau change de nom...

A+
Bonsoir job75, Hasco,

@job75,
Merci pour votre proposition qui me convient mieux. Juste une demande de modification SVP. Peut-on faire en sorte qu'il ne prenne en charge que à partir de la ligne 2 du tableau1, car dans mon fichier réel j'ai des boutons (shapes) et lors du filtrage il les copie aussi. Donc j'ai tous ces boutons en double sur la feuille TRI après chaque filtrage.
Je vous ai mis un exemple sur le fichier ci-joint, faites deux trois filtrages et vous verrez que les boutons seront doublés voir triplés.

Merci pour votre retour job75.

@Hasco
Alors encore une fois, je ne rejette pas votre proposition de ce matin, mais je n'arrive pas à la faire fonctionner. Je ferai dans les prochains jours plus d'essais pour mieux comprendre ce power query.
 

Pièces jointes

  • Classeur1(2).xlsm
    63.3 KB · Affichages: 3

Discussions similaires

  • Résolu(e)
Microsoft 365 Code de tri
Réponses
22
Affichages
304
Réponses
11
Affichages
482
Réponses
19
Affichages
626
Réponses
18
Affichages
555
Réponses
9
Affichages
655
Réponses
3
Affichages
402
Réponses
4
Affichages
291
Réponses
8
Affichages
397
Réponses
13
Affichages
362

Statistiques des forums

Discussions
312 211
Messages
2 086 299
Membres
103 172
dernier inscrit
Aurelyan