Simplifier automatiquement un tableau

Bonjour,

Etant débutant, je bloque sur un point qui je pense n'est pas si simple.

J'ai une liste composée avec des Titres (en gras), des budgets d'heures (en rouge) et de la fourniture (en vert).

Imaginons que ma liste est composé comme cela :

Poste n°1, je n'ai pas d'heures ni d'achats

Poste n°2, j'ai des heures type 1, 2 et 3 et des achats n°1/2/3 et 4

Poste n°3, j'ai des heures type 2 et 4 et des achats n°5/6/7 et 8

Poste n°4, j'ai des heures type 5 et un achat n°9

Les heures sont forcément soit type 1 ou 2 ou 3 ou 4 ou 5.

Pour les achats, ils sont tous différents.

En face des heures, j'ai une valeur avec un nombre d'heures.

En face des achats, j'ai une valeur avec le prix.

J'aimerai cumuler les achats par poste et chaque type d'heures par poste également.

Je joins un fichier excel pour mon explication n'est peut être pas très clair.

Merci d'avance,

Cardi

6cardi.xlsx (11.11 Ko)

Bonjour

Petite question complémentaire avant d'étudier ton besoin... La présentation que tu donnes ta PJ (en colonne H et I) est-elle celle que tu souhaites obtenir de manière absolue ?

Titre n°1, titre n°2, pourra être par exemple Parquet, Peinture. Ils pourront être modifiés.

Par contre, H1/H2/H3/H4/H5 et fourniture ne changera jamais.

Bonjour

Je ne vois pas Titre n°1 ou Titre n°2 dans ta PJ !

Est-ce que tu voulais dire Poste n°1, Poste n°2 ?

Et je suppose alors que F1, F2, Fn peuvent également être variables, cependant que H1, H2, H3 et H4 seront toujours écrit comme ça et pour pas plus de 4 valeurs

Est-ce correct ?

Oui désolé, titre n°1 = Poste n°1.

H1, H2, H3 et H4 seront toujours écrit comme ça, il y a H5 également. Il y aura 5 types d'heure maximum.

Fourniture sera toujours écrit comme cela également.

bonjour,

une proposition

Option Explicit
Sub Synthèse()
    Dim dernièreLigne As Long, ligneEnCoursCible As Long, totalFournitures As Currency, ligneEnCoursSource As Long, premièreLigneGroupe As Long
    Dim dernièreLigneGroupe As Long, ligneFournitures As Long, résultatRecherche As Range

    Range("H:I").Clear
    dernièreLigne = Cells(Rows.Count, 3).End(xlUp).Row
    ligneEnCoursCible = 5
    totalFournitures = 0

    For ligneEnCoursSource = 6 To dernièreLigne + 1

        If Cells(ligneEnCoursSource, 2) = 1 Or Cells(ligneEnCoursSource, 2) = "" Then

            If totalFournitures <> 0 Then
                ligneEnCoursCible = ligneEnCoursCible + 1
                Cells(ligneFournitures, 3).Copy Cells(ligneEnCoursCible, "H")
                Cells(ligneFournitures, 5).Copy Cells(ligneEnCoursCible, "I")
                Cells(ligneEnCoursCible, "H") = "Fournitures"
                Cells(ligneEnCoursCible, "I") = totalFournitures
            End If

            ligneEnCoursCible = ligneEnCoursCible + 1
            premièreLigneGroupe = ligneEnCoursCible
            dernièreLigneGroupe = ligneEnCoursCible
            totalFournitures = 0
            Cells(ligneEnCoursSource, 3).Copy Cells(ligneEnCoursCible, "H")

        ElseIf Left(Cells(ligneEnCoursSource, 3), 1) = "H" Then
            Set résultatRecherche = Range(Cells(premièreLigneGroupe, "H"), Cells(dernièreLigneGroupe, "H")).Find(Cells(ligneEnCoursSource, 3), lookat:=xlWhole)

            If résultatRecherche Is Nothing Then
                ligneEnCoursCible = ligneEnCoursCible + 1
                dernièreLigneGroupe = ligneEnCoursCible
                Cells(ligneEnCoursSource, 3).Copy Cells(ligneEnCoursCible, "H")
                Cells(ligneEnCoursSource, 4).Copy Cells(ligneEnCoursCible, "I")
            Else
                Cells(résultatRecherche.Row, "I") = Cells(résultatRecherche.Row, "I") + Cells(ligneEnCoursSource, 4)
            End If

        Else
            ligneFournitures = ligneEnCoursSource
            totalFournitures = totalFournitures + Cells(ligneEnCoursSource, 5)
        End If

    Next ligneEnCoursSource
End Sub

Merci h2so4 mais je ne souhaite pas passer par VBA.

Bonjour, (h2so4)

J'étais également sur une proposition VBA...

Il me semble que sans VBA tu vas te retrouver avec une formule et/ou des calculs/tableaux intermédiaires très complexe

Bonjour,

Une proposition sans VBA mais avec Récupérer et transformer (Power Query).

Pour le résultat par formules, je passe la main !...

A te relire.

Cdlt.

2cardi.xlsx (22.20 Ko)

Bonjour,

Une proposition par formules ...

Pas forcément très digeste ...

Beaucoup plus simple d'utiliser Power Query ... (dixit Jean-Eric)

3cardi.xlsx (11.67 Ko)

Re,

Bonjour James007,

Je n'ai pas écrit que Power Query était plus simple !...

Que ce soit avec des formules, du VBA ou Power Query, l'objectif est de tenter de faire au plus simple et compréhensible.

Il faut pouvoir expliquer ce que l'on fait.

Je suis Power Query quand il facilite les choses (?). En résumé, pas d'usine à gaz.

Bonne journée.

Cdlt.

Salut Jean-Eric,

Comme tu le sais ... je ne connais pas du tout Power Query ...

mais compte tenu des contorsions que les formules imposent dans ce cas ...

je suis pratiquement persuadé que Power Query offre de facto une solution beaucoup plus digeste ...

Merci pour votre aide, j'ai utilisé vos solutions, cela fonctionne, merci.

Rechercher des sujets similaires à "simplifier automatiquement tableau"