#Dranreb : merci beaucoup pour cette macro, qui va me permettre de déployer mon petit fichier excel écrit avec le fonction filtre (office 365), sur les postes de ma boite qui sont encore en 2016Bonsoir.
D'après ce que j'en ai vu, elle n'est guère compliquée à écrire en VBA. Mais il n'accepte pas que je l'appelle FILTRE. Alors j'ai enlevé le 'E' à la fin :
À valider en matriciel, en principe …VB:Function FILTR(ByVal TDonn, ByVal TCond) Dim LE&, LS&, C& If TypeOf TDonn Is Range Then TDonn = TDonn.Value If TypeOf TCond Is Range Then TCond = TCond.Value For LE = 1 To UBound(TDonn, 1) If TCond(LE, 1) Then LS = LS + 1 For C = 1 To UBound(TDonn, 2) TDonn(LS, C) = TDonn(LE, C) Next C: End If: Next LE Do While LS < UBound(TDonn, 1) LS = LS + 1 For C = 1 To UBound(TDonn, 2) TDonn(LS, C) = "" Next C: Loop FILTR = TDonn End Function
Bonjour Drandeb,Bonsoir.
D'après ce que j'en ai vu, elle n'est guère compliquée à écrire en VBA. Mais il n'accepte pas que je l'appelle FILTRE. Alors j'ai enlevé le 'E' à la fin :
À valider en matriciel, en principe …VB:Function FILTR(ByVal TDonn, ByVal TCond) Dim LE&, LS&, C& If TypeOf TDonn Is Range Then TDonn = TDonn.Value If TypeOf TCond Is Range Then TCond = TCond.Value For LE = 1 To UBound(TDonn, 1) If TCond(LE, 1) Then LS = LS + 1 For C = 1 To UBound(TDonn, 2) TDonn(LS, C) = TDonn(LE, C) Next C: End If: Next LE Do While LS < UBound(TDonn, 1) LS = LS + 1 For C = 1 To UBound(TDonn, 2) TDonn(LS, C) = "" Next C: Loop FILTR = TDonn End Function
Bonjour Dranreb,Bonsoir.
D'après ce que j'en ai vu, elle n'est guère compliquée à écrire en VBA. Mais il n'accepte pas que je l'appelle FILTRE. Alors j'ai enlevé le 'E' à la fin :
À valider en matriciel, en principe …VB:Function FILTR(ByVal TDonn, ByVal TCond) Dim LE&, LS&, C& If TypeOf TDonn Is Range Then TDonn = TDonn.Value If TypeOf TCond Is Range Then TCond = TCond.Value For LE = 1 To UBound(TDonn, 1) If TCond(LE, 1) Then LS = LS + 1 For C = 1 To UBound(TDonn, 2) TDonn(LS, C) = TDonn(LE, C) Next C: End If: Next LE Do While LS < UBound(TDonn, 1) LS = LS + 1 For C = 1 To UBound(TDonn, 2) TDonn(LS, C) = "" Next C: Loop FILTR = TDonn End Function
Bonjour,Bonsoir
Sur des version autres que 365 la formule doit être validée en matriciel (par Ctrl+Shift+Entrée)
J'ai fait Ctrl+Shift+Entrée sur la cellule vide qui aurait due contenir la deuxième valeur mais rien ne se passe. Est-ce bien cette manipulation ?Bonjour.
Oui, il faut aussi la valider ainsi sur plusieurs lignes.
Un grand merci pour votre aide !!!Non. Sélectionnez toute la plage matricielle, cliquez dans la barre de formule et validez par Ctrl+Maj+Entrée.
La fonction met des textes vides à la fin si la plage matricielle comporte trop de lignes.
Pour ceux qui préfèrent en F1, à valider par CTRL+MAJ+ENTRER puis à tirer vers le bas :=SIERREUR(AGREGAT(15;6;$B$1:$B$10/($A$1:$A$10=$D$1);LIGNE(1:1));0)
=SIERREUR(PETITE.VALEUR(SI($A$1:$A$10=$D$1;$B$1:$B$10);LIGNE(1:1));0)