Fonction qui récupère des données filtrés et sort un tableau comme résultat

Bonjour Jean-Eric,

C'est fait! :)

Lucy

Je m'y mets de ce pas Franck! ;)

Bonjour,

C'est quand même bizarre de ne toujours pas avoir de message de Jean-Éric avec la solution Power Query !

J'espère que tout va bien pour toi 😁

Hello la team!

Je suis toute ouïe si vous avez tout les deux quelques choses a proposer^^

Et franck, je suis encore d'essayer de produire un résultat à te(vous) présenter à partir du document que tu m'as fournie merci!!

Lucy

Hello l'équipe,

Je suis parvenue plus ou moins à une fonction qui fonctionne mais j'ai un dernier soucis la faire fonctionner sur excel,

Public Function dataHistosResize(ticker As String, Datedebut As Date, Datefin As Date) As Variant    

Application.ScreenUpdating = False

Dim FilePath As String
Dim wbTicker As Workbook
Dim wsTicker As Worksheet
Dim Rng As Range
Dim datas()

Dim classeur As Workbook, feuille As Worksheet, cellule As Range

Set wb = ActiveWorkbook
Set ws = ActiveSheet
Set wc = ActiveCell

FilePath = "C:\" & ticker & ".xlsx"

Set wbTicker = Workbooks.Open(FilePath)
Set wsTicker = wbTicker.Sheets("Feuil1")

    With wsTicker
        .AutoFilterMode = False
        .Range("A2").AutoFilter Field:=1, Criteria1:=">=" & Format(Datedebut, "mm/dd/yyyy"), _
        Operator:=xlAnd, Criteria2:="<=" & Format(Datefin, "mm/dd/yyyy"), VisibleDropDown:=False
        Set Rng = .AutoFilter.Range.Cells.SpecialCells(xlCellTypeVisible)

    End With

    With wbTicker.Worksheets.Add

        Rng.Copy .Range("A1")
        datas = .UsedRange.Value
        Application.DisplayAlerts = False
        .Delete
        Application.DisplayAlerts = True

    End With

Workbooks(wb.Name).Sheets(ws.Name).Range(wc.Address).Resize(UBound(datas, 1), UBound(datas, 2)) = datas

wbTicker.Close SaveChanges:=False
Application.ScreenUpdating = True

End Function

J'ai fais une tentative débugage grace à ceci

Sub testResize()

Debug.Print dataHistosResize("ticker1", "22/06/2020", "07/07/2020")

End Sub

mais la fonction fonctionne bien, mais si je l’exécute sur excel, je ressors avec #Valeur!

Auriez vous une idée ?

( Concernant toutes les propositions précédentes, je n'ai pas encore pu les intégrer mais je ferais suivre par la suite merci encore!)

Merci et bonne semaine!

Lucy

Bonjour …

Voilà un exemple pour la récupération du tableau Tb filtré dans le tableau Tf

.

   ...
  If L1 = "" Or L2 = "" Then Exit Sub
  Dim R As Range
  [Tb].AutoFilter 1, Criteria1:=">=" & Format(L1, "mm/dd/yyyy"), _
      Operator:=xlAnd, Criteria2:="<=" & Format(L2, "mm/dd/yyyy")
  Set R = [Tb].SpecialCells(12)
  If Application.CountA([Tf]) > 0 Then [Tf].Delete
  Set R = [Tb].SpecialCells(12)
  R.Copy [Tf].Rows(1)
  [Tb].AutoFilter
  ...

Re

ne sachant pas comment modifier le message envoyé ,

effacer une des 2 lignes

Set R = [Tb].SpecialCells(12)

Bonjour,

Ta fonction de "feuille" ne peut pas fonctionner, à cause de l'ouverture du classeur.

Je vais regarder de mon côté, mais, pourquoi ne pas te contenter d'une procédure ????

Perso le "fil est coupé" dès que j'essaie d'accéder à un fichier fermé.

Ce que tu demandes est donc impossible, pour moi en tout cas.

Hello Franck,

Merci pour la remarque, je n'arrivais pas voir le souci

Simplement parce que je vois pas comment faire autrement, je ne vois pas comment appeler une procédure depuis une cellule excel( hormis un bouton ou raccourci )

Merci de ton aide en tout cas, je vais persévérer et j'arriverai bien à un résultat à un moment donné

Lucy

Penches toi sur les événements de feuille (Worksheets Event)

Tu as le choix : déclenchement au double-clic dans une cellule, lorsque le contenu d'une cellule change, lorsque tu changes de sélection, etc...

Regarde déjà ici : https://www.excel-pratique.com/fr/vba/evenements_feuille

et reviens nous dire vers quoi tu t'orienterais...

Bonjour Ordonc,

Je n'avais pas vu ton message la dernière fois desolé!

enfaîte c'était pas vraiment mon soucis à ce moment mais je garde ton code sous la main!

Merci en tous cas

Lucy

helloo Franck!!

J'espère que çava! Je ne t'ai pas fais de retour immédiat désolé mais j'ai bien regardé les documents que tu m'as envoyé, je me suis entêtée dans ma fonction mais sans résultat, je me suis donc pencher sur les worksheets events et j'ai opté le worksheets change cela donne ceci !

Reminder fonction

Public Function donneeFuncFinale(ticker As String, Datedebut As String, Datefin As String) As Variant

Application.ScreenUpdating = False

Dim FilePath As String
Dim wbTicker As Workbook
Dim wsTicker As Worksheet
Dim Rng As Range
Dim datas()

Dim wb As Workbook, ws As Worksheet, wc As Range

Set wb = ActiveWorkbook
Set ws = ActiveSheet
Set wc = ActiveCell

FilePath = "C:\" & ticker & ".xlsx"

Set wbTicker = Workbooks.Open(FilePath)
Set wsTicker = wbTicker.Sheets("Feuil1")

    With wsTicker
        .AutoFilterMode = False
        .Range("A2").AutoFilter Field:=1, Criteria1:=">=" & Format(Datedebut, "mm/dd/yyyy"), _
        Operator:=xlAnd, Criteria2:="<=" & Format(Datefin, "mm/dd/yyyy"), VisibleDropDown:=False
        Set Rng = .AutoFilter.Range.Cells.SpecialCells(xlCellTypeVisible)

    End With

    With wbTicker.Worksheets.Add

        Rng.Copy .Range("A1")
        datas = .UsedRange.Value
        Application.DisplayAlerts = False
        .Delete
        Application.DisplayAlerts = True

    End With

donneeFuncFinale = datas

wbTicker.Close SaveChanges:=False
Application.ScreenUpdating = True

Set wb = Nothing: Set ws = Nothing: Set wc = Nothing: Set wbTicker = Nothing: Set wsTicker = Nothing:

End Function

Ensuite, l’événement

Private Sub Worksheet_Change(ByVal Target As Range)

Application.EnableEvents = False

Dim datas As Variant
Dim ContenuInitial As String
Dim a() As String
Dim ticker As String, d1 As String, d2 As String

ContenuInitial = Target.Value
a() = Split(ContenuInitial, ";")

ticker = a(0)
d1 = a(1)
d2 = a(2)

datas = donneeFuncFinale(ticker, d1, d2)

Target.Resize(UBound(datas, 1), UBound(datas, 2)).Value = datas

Application.EnableEvents = True

End Sub

donc je rentre dans la cellule active -> ticker; dateDebut; dateFin et ça me sort le résulat ( du coup le tableau trié).

Mais je me retrouve face à plusieurs problématiques:

-adapter le code pour qu"ils puissent marcher sur n'importe quelle classeur et feuilles du coup, je pense donc utiliser une module de classe

- et faire en sorte d'utiliser le work sheet change plusieurs fois d'affilés car dans mon coté il ne fonctionne qu'une seule fois

Si vous avez des idées ou autres, je suis preneuse

Merci et bonne journée :)

Lucy

Rechercher des sujets similaires à "fonction qui recupere donnees filtres sort tableau comme resultat"