Simplifier automatiquement un tableau

Y compris Power BI, Power Query et toute autre question en lien avec Excel
C
Cardi
Jeune membre
Jeune membre
Messages : 38
Inscrit le : 3 juin 2019
Version d'Excel : 2016

Message par Cardi » 20 juin 2019, 08:41

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
cardi.xlsx
(11.11 Kio) Téléchargé 6 fois
G
Gli73
Membre fidèle
Membre fidèle
Messages : 291
Appréciations reçues : 37
Inscrit le : 12 avril 2019
Version d'Excel : PC 2013
Contact :

Message par Gli73 » 20 juin 2019, 09:32

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 ?
Excelement Vôtre
Cogito ergo Excel
Per espera ad Excel

Développeur Indépendant sur Excel et 40 ans d'expérience informatique, je peux vous aider à apporter une touche "pro" à vos réalisations !
C
Cardi
Jeune membre
Jeune membre
Messages : 38
Inscrit le : 3 juin 2019
Version d'Excel : 2016

Message par Cardi » 20 juin 2019, 09:37

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.
G
Gli73
Membre fidèle
Membre fidèle
Messages : 291
Appréciations reçues : 37
Inscrit le : 12 avril 2019
Version d'Excel : PC 2013
Contact :

Message par Gli73 » 20 juin 2019, 09:55

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 ?
Excelement Vôtre
Cogito ergo Excel
Per espera ad Excel

Développeur Indépendant sur Excel et 40 ans d'expérience informatique, je peux vous aider à apporter une touche "pro" à vos réalisations !
C
Cardi
Jeune membre
Jeune membre
Messages : 38
Inscrit le : 3 juin 2019
Version d'Excel : 2016

Message par Cardi » 20 juin 2019, 09:59

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.
h
h2so4
Passionné d'Excel
Passionné d'Excel
Messages : 9'451
Appréciations reçues : 428
Inscrit le : 16 juin 2013
Version d'Excel : 365 UK Windows 10

Message par h2so4 » 20 juin 2019, 10:21

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
C
Cardi
Jeune membre
Jeune membre
Messages : 38
Inscrit le : 3 juin 2019
Version d'Excel : 2016

Message par Cardi » 20 juin 2019, 10:24

Merci h2so4 mais je ne souhaite pas passer par VBA.
G
Gli73
Membre fidèle
Membre fidèle
Messages : 291
Appréciations reçues : 37
Inscrit le : 12 avril 2019
Version d'Excel : PC 2013
Contact :

Message par Gli73 » 20 juin 2019, 10:44

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 ;;)
Excelement Vôtre
Cogito ergo Excel
Per espera ad Excel

Développeur Indépendant sur Excel et 40 ans d'expérience informatique, je peux vous aider à apporter une touche "pro" à vos réalisations !
Avatar du membre
Jean-Eric
Fanatique d'Excel
Fanatique d'Excel
Messages : 16'704
Appréciations reçues : 701
Inscrit le : 27 août 2012
Version d'Excel : 365 Personnel

Message par Jean-Eric » 20 juin 2019, 11:14

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.
cardi.xlsx
(22.2 Kio) Téléchargé 1 fois
Jean-Eric

Je ne réponds pas aux M.P. non sollicités.
Avatar du membre
James007
Fanatique d'Excel
Fanatique d'Excel
Messages : 12'007
Appréciations reçues : 421
Inscrit le : 30 août 2014
Version d'Excel : 2007 EN

Message par James007 » 20 juin 2019, 11:27

Bonjour,

Une proposition par formules ...

Pas forcément très digeste ...

Beaucoup plus simple d'utiliser Power Query ... (dixit Jean-Eric) :wink:
cardi.xlsx
(11.67 Kio) Téléchargé 2 fois
A+

:)

Quand on n’a qu’un marteau, tous les problèmes deviennent des clous…
Répondre
  • Sujets similaires
    Réponses
    Vues
    Dernier message