XL 2021 Formule ou VBA pour récupération données sur plusieurs onglets

Boostez vos compétences Excel avec notre communauté !

Rejoignez Excel Downloads, le rendez-vous des passionnés où l'entraide fait la force. Apprenez, échangez, progressez – et tout ça gratuitement ! 👉 Inscrivez-vous maintenant !

didier09

XLDnaute Occasionnel
Bonjour,

Je suis bloqué et je ne trouve qui se rapprocherait de ma demande...

Je souhaite récupérer des données pour faire un état annuel des opérations enregistrées dans chaque onglets mensuels.
Avez vous une solution par formule ou faut-il passer par du VBA ?

Merci de vos retours.
Didier
 

Pièces jointes

Solution
TDS Tableau de Données Structuré.
les données recettes de l'onglet Caisse Liquide Fonctionne, mais pas les données Dépenses.
Normal. 😂
Sur tous les mois, Nature recettes en colonne 4 (D), Nature dépenses en colonne 12 (L),
SAUF pour feuille Caisse Liquide où Nature dépenses en colonne 11 (K),
En PJ j'ai rajouté une colonne dans cette feuille pour retrouver les dépenses en colonne L.
Re,
Un essai en PJ en supposant que le type d'opération est dans la colonne Nature, avec :
VB:
Sub Worksheet_Activate()
    LireDonnées                         ' On actualise quand on sélectionne la feuille
End Sub
Sub Worksheet_Change(ByVal Target As Range)
    If Target.Count > 1 Then Exit Sub   ' On actualise quand on change l'objet de la recette ou dépense
    If Not Intersect(Target, Range("A27,I27")) Is Nothing Then
         LireDonnées
    End If
End Sub
Sub LireDonnées()
Dim IndexRec%, IndexDep%, ColRecettes%, ColDépenses%, i%, Ligne%, Recette$, Dépense$, Mois$
Application.ScreenUpdating = False
On Error Resume Next
[Recettes].ListObject.DataBodyRange.Delete                              ' On efface les tableaux
[Dépenses].ListObject.DataBodyRange.Delete
IndexRec = 30: IndexDep = 30: ColRecettes = 4: ColDépenses = 12
For i = 1 To 13                                                         ' Pour tous les onglets
    Mois = [Onglets].Cells(i, 1)                                        ' On récupère le nom de l'onglet
    Recette = [A27]: Dépense = [I27]
    With Sheets(Mois)
        Ligne = 8
        While .Cells(Ligne, ColRecettes) <> ""                          ' On récupère toutes les recettes demandées
            If .Cells(Ligne, ColRecettes) = Recette Then
                Range(Cells(IndexRec, "A"), Cells(IndexRec, "G")) = _
                .Range(.Cells(Ligne, "A"), .Cells(Ligne, "G")).Value
                IndexRec = IndexRec + 1
            End If
            Ligne = Ligne + 1
        Wend
        Ligne = 8
        While .Cells(Ligne, ColDépenses) <> ""                          ' On récupère toutes les dépenses demandées
            If .Cells(Ligne, ColDépenses) = Dépense Then
                Range(Cells(IndexDep, "I"), Cells(IndexDep, "O")) = _
                .Range(.Cells(Ligne, "I"), .Cells(Ligne, "O")).Value
                IndexDep = IndexDep + 1
            End If
            Ligne = Ligne + 1
        Wend
    End With
Next i
End Sub
 

Pièces jointes

Re,
Un essai en PJ en supposant que le type d'opération est dans la colonne Nature, avec :
VB:
Sub Worksheet_Activate()
    LireDonnées                         ' On actualise quand on sélectionne la feuille
End Sub
Sub Worksheet_Change(ByVal Target As Range)
    If Target.Count > 1 Then Exit Sub   ' On actualise quand on change l'objet de la recette ou dépense
    If Not Intersect(Target, Range("A27,I27")) Is Nothing Then
         LireDonnées
    End If
End Sub
Sub LireDonnées()
Dim IndexRec%, IndexDep%, ColRecettes%, ColDépenses%, i%, Ligne%, Recette$, Dépense$, Mois$
Application.ScreenUpdating = False
On Error Resume Next
[Recettes].ListObject.DataBodyRange.Delete                              ' On efface les tableaux
[Dépenses].ListObject.DataBodyRange.Delete
IndexRec = 30: IndexDep = 30: ColRecettes = 4: ColDépenses = 12
For i = 1 To 13                                                         ' Pour tous les onglets
    Mois = [Onglets].Cells(i, 1)                                        ' On récupère le nom de l'onglet
    Recette = [A27]: Dépense = [I27]
    With Sheets(Mois)
        Ligne = 8
        While .Cells(Ligne, ColRecettes) <> ""                          ' On récupère toutes les recettes demandées
            If .Cells(Ligne, ColRecettes) = Recette Then
                Range(Cells(IndexRec, "A"), Cells(IndexRec, "G")) = _
                .Range(.Cells(Ligne, "A"), .Cells(Ligne, "G")).Value
                IndexRec = IndexRec + 1
            End If
            Ligne = Ligne + 1
        Wend
        Ligne = 8
        While .Cells(Ligne, ColDépenses) <> ""                          ' On récupère toutes les dépenses demandées
            If .Cells(Ligne, ColDépenses) = Dépense Then
                Range(Cells(IndexDep, "I"), Cells(IndexDep, "O")) = _
                .Range(.Cells(Ligne, "I"), .Cells(Ligne, "O")).Value
                IndexDep = IndexDep + 1
            End If
            Ligne = Ligne + 1
        Wend
    End With
Next i
End Sub
Merci pour vos retours.

Désolé je vous ai envoyé un fichier sans données. J'ai complété le fichier afin que vous voyez ce que je souhaite.
Vgendron, PowerQuery, je n'ai pas encore utilisé cette possibilité.
Sylvanu, je regarde ta proposition.
 
Merci pour vos retours.

Désolé je vous ai envoyé un fichier sans données. J'ai complété le fichier afin que vous voyez ce que je souhaite.
Vgendron, PowerQuery, je n'ai pas encore utilisé cette possibilité.
Sylvanu, je regarde ta proposition.
le fichier.....
 

Pièces jointes

Re,
En PJ le nouveau fichier avec des TDS dans la feuille Récap RecettesDépenses, et des listes déroulantes pour les choix.
( attention aux fautes d'orthographes, en Janvier on a "Eau " au lieu de "Eau" , il vaudrait mieux passer par des listes déroulantes ce qui évite ce genre de souci indétectable ))
 

Pièces jointes

TDS Tableau de Données Structuré.
les données recettes de l'onglet Caisse Liquide Fonctionne, mais pas les données Dépenses.
Normal. 😂
Sur tous les mois, Nature recettes en colonne 4 (D), Nature dépenses en colonne 12 (L),
SAUF pour feuille Caisse Liquide où Nature dépenses en colonne 11 (K),
En PJ j'ai rajouté une colonne dans cette feuille pour retrouver les dépenses en colonne L.
 

Pièces jointes

Merci Sylvanu pour ton temps et ta solution.

Ok pour TDS, j'avais pas l'abréviation. Je me contraint depuis peu à présenter les données sous forme de tableau. Je les nomme à ma façon, je sais pas s'il y a une convention d'écriture pour ça.... Je nomme sans espace et au plus près de la représentation des données.

Je regarde ton code pour comprendre les macros que tu as déjà bien commenté. Je me permettrai de revenir vers toi si j'ai un doute.

Cela correspond bien à mon besoin. Juste une remarque sur la recopie des données (dont je vais m'accommoder) : La colonne Pointé est recopié sans la mise en forme couleur du texte. En changeant la propriété de la colonne sur le tableau Recettes et dépenses cela se complète en rouge mais ne tient pas compte des P en vert sur l'onglet original.

Bonne soirée
Didier
 
- Navigue sans publicité
- Accède à Cléa, notre assistante IA experte Excel... et pas que...
- Profite de fonctionnalités exclusives
Ton soutien permet à Excel Downloads de rester 100% gratuit et de continuer à rassembler les passionnés d'Excel.
Je deviens Supporter XLD

Discussions similaires

Réponses
4
Affichages
114
  • Question Question
Microsoft 365 Formule ou VBA
Réponses
6
Affichages
333
Retour