IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Macros et VBA Excel Discussion :

Synthétiser un tableau


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre à l'essai
    Homme Profil pro
    Logisticien
    Inscrit en
    Décembre 2022
    Messages
    4
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Maine et Loire (Pays de la Loire)

    Informations professionnelles :
    Activité : Logisticien
    Secteur : Industrie

    Informations forums :
    Inscription : Décembre 2022
    Messages : 4
    Par défaut Synthétiser un tableau
    Bonjour,

    Je suis débutant en VBA et j'arrive à coder grâce à mes recherches sur internet. Il m'arrive de trouver mes réponses sur ce forum mais là je sèche sur le fait d'avoir besoin d'un résumé en automatique du contenu d'un tableau que je veux placer dans un second tableau. J'ai fait une macro avec un bouton pour trier ce 1er tableau et un autre pour effacer le contenu qui sera dans le second.

    Il est inscrit dans le 1er tableau les personnes qui ont été arrêtées pour différents motif avec la date de chaque jour concerné. J'aimerai automatiser le fait d'avoir dans le second tableau, un regroupement des lignes qui concernent une même personne pour le même motif d'arrêt avec la date de début (qui correspond à la ligne contenant la date la plus ancienne) et la date de fin (qui correspond à la ligne contenant la plus récente en s'assurant que les dates se suivent) .Bien entendu, une ligne dans le 1er tableau peut être la seule concernée pour un motif particulier et donc avoir une date de début et une date de fin identique.

    Je mets à disposition le fichier avec le second tableau contenant le résumé comme il faudrait qu'il soit à l'aide d'une macro.

    J'ai mis des valeurs comme exemple pour comprendre la logique et le résultat que j'ai besoin d'avoir.

    Merci d'avance pour votre aide

    PS: C'est la 1ère fois que je poste, donc n'hésitez pas à m'indiquer si je n'ai pas bien respecté les règles du forum afin que je puisse me corriger pour les prochaines fois .

    Résumé des arrêts.xlsm

  2. #2
    Expert éminent

    Profil pro
    Conseil, Formation, Développement - Indépendant
    Inscrit en
    Février 2010
    Messages
    8 564
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Conseil, Formation, Développement - Indépendant

    Informations forums :
    Inscription : Février 2010
    Messages : 8 564
    Par défaut
    Bonjour

    Faisable par PowerQuery, intégéré à Excel, selon ce principe http://www.excel-formations.fr/Trucs_astuces/PQ05.php

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    let
        Source = Excel.CurrentWorkbook(){[Name="Tab_ListeArrets"]}[Content],
        #"Type modifié" = Table.TransformColumnTypes(Source,{{"Matricule", type text}, {"Prénom", type text}, {"Nom", type text}, {"Type", type text}, {"Date", type date}}),
        #"Lignes triées" = Table.Sort(#"Type modifié",{{"Matricule", Order.Ascending}, {"Date", Order.Ascending}, {"Type", Order.Ascending}}),
        #"Index ajouté" = Table.AddIndexColumn(#"Lignes triées", "Index0", 0, 1, Int64.Type),
        #"Index ajouté1" = Table.AddIndexColumn(#"Index ajouté", "Index1", 1, 1, Int64.Type),
        #"Requêtes fusionnées" = Table.NestedJoin(#"Index ajouté1", {"Index1"}, #"Index ajouté1", {"Index0"}, "Index ajouté1", JoinKind.LeftOuter),
        #"Index ajouté1 développé" = Table.ExpandTableColumn(#"Requêtes fusionnées", "Index ajouté1", {"Matricule", "Type", "Date"}, {"Matricule.1", "Type.1", "Date.1"}),
        #"Personnalisée ajoutée" = Table.AddColumn(#"Index ajouté1 développé", "Date fin", each if [Matricule]=[Matricule.1] and [Type]=[Type.1] and Date.AddDays([Date],1)=[Date.1] then null else [Date], type date),
        #"Rempli vers le haut" = Table.FillUp(#"Personnalisée ajoutée",{"Date fin"}),
        #"Personnalisée ajoutée1" = Table.AddColumn(#"Rempli vers le haut", "JO", each if Date.DayOfWeek([Date])+1>5 then 0 else 1),
        #"Lignes groupées" = Table.Group(#"Personnalisée ajoutée1", {"Matricule", "Prénom", "Nom", "Type", "Date fin"}, {{"Date début", each List.Min([Date]), type nullable date}, {"Nb Jours", each List.Sum([JO]), type number}}),
        #"Colonnes permutées" = Table.ReorderColumns(#"Lignes groupées",{"Matricule", "Prénom", "Nom", "Type", "Date début", "Date fin", "Nb Jours"}),
        #"Lignes triées1" = Table.Sort(#"Colonnes permutées",{{"Date début", Order.Ascending}})
    in
        #"Lignes triées1"
    Ta formule ne tenant pas compte des jours fériés, j'ai fait de même mais on pourrait en tenir compte
    Fichiers attachés Fichiers attachés

  3. #3
    Membre à l'essai
    Homme Profil pro
    Logisticien
    Inscrit en
    Décembre 2022
    Messages
    4
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Maine et Loire (Pays de la Loire)

    Informations professionnelles :
    Activité : Logisticien
    Secteur : Industrie

    Informations forums :
    Inscription : Décembre 2022
    Messages : 4
    Par défaut
    Citation Envoyé par 78chris Voir le message
    Bonjour

    Faisable par PowerQuery, intégéré à Excel, selon ce principe http://www.excel-formations.fr/Trucs_astuces/PQ05.php
    [...]

    Ta formule ne tenant pas compte des jours fériés, j'ai fait de même mais on pourrait en tenir compte
    Merci beaucoup 78chris pour ta réponse qui semble être d'être d'une grande efficacité. Cependant, je ne connais pas encore PowerQuery.
    J'ai pu consulter le lien que tu as mis dans ton poste. Même si cela correspond exactement à mon problème, j'aimerai savoir s'il serait possible de faire la même chose en code VBA afin que je puisse comprendre la logique de la fonction ?

    Je garde précieusement ta solution par PowerQuery pour le jour où je pourrai commencer à me servir de cet outil, mais seulement après avoir eu des notions suffisantes pour l'exploiter.

    Peut-être qu'à partir des explications présentent dans ton lien, je pourrai trouver son équivalent en code VBA en continuant mes recherches.

    En tout cas, je te remercie pour ta réponse rapide à mon problème.

  4. #4
    Membre Expert
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    1 508
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Juillet 2006
    Messages : 1 508
    Par défaut
    Citation Envoyé par 0spawn Voir le message
    j'aimerai savoir s'il serait possible de faire la même chose en code VBA afin que je puisse comprendre la logique de la fonction ?
    C'est certainnement fesable via VBA avec plutôt plus que moins d'efforts.

    Cependant, avec toutes les fonctionnalités intégrées à Excel, VBA devient de moins en moins utile.
    Renseignes-toi sur Power Query, tu n'en tireras que des avantages.

  5. #5
    Membre à l'essai
    Homme Profil pro
    Logisticien
    Inscrit en
    Décembre 2022
    Messages
    4
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Maine et Loire (Pays de la Loire)

    Informations professionnelles :
    Activité : Logisticien
    Secteur : Industrie

    Informations forums :
    Inscription : Décembre 2022
    Messages : 4
    Par défaut
    Il est certain que pour des habitués de ces fonctionnalités d'Excel, l'utilisation d'un outil plus facile et efficace comme Power Query est logique.

    De mon côté j'ai besoin d'avoir la fonction que je recherche avec une macro VBA (langage que je connais un peu à la différence de Power Query où je suis au niveau 0)

    Si quelqu'un sait comment faire pour avoir le même résultat en VBA, je suis preneur.

    Encore merci pour l'intérêt que vous portez à ma demande.

  6. #6
    Expert confirmé Avatar de BENNASR
    Homme Profil pro
    Responsable comptable & financier
    Inscrit en
    Décembre 2013
    Messages
    2 974
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Tunisie

    Informations professionnelles :
    Activité : Responsable comptable & financier
    Secteur : Finance

    Informations forums :
    Inscription : Décembre 2013
    Messages : 2 974
    Par défaut
    Bonjour
    PowerQuery la solution la plus efficace. Personnellement j'ai été retissant et voir ce nouveau langage (code en rouge et des requêtes pour un autodidacte !!! )
    mais j'ai osé et appliquer les conseils des amis du site et j'ai trouvé que c'est un outil simple et très efficace ..bref
    pour ton cas j'ai pensé à une solution plus simple
    à ton tableau j'ajoute 4 colonnes
    * un pour concaténer le matricule, le nom et le prénom
    * un pour mettre 1 (nbre de jour devant chaque date)
    * un pour extraire le mois avec la formule (= texte(date;"mmm")
    * un pour extraire l'année avec la formule (=annee(date))
    puis j'insère un tableau dynamique croisée et des segments et tu aura se que tu veux sans casse de tète
    J'espère que ça t'aide à avancer

    NB pour effacer un tableau structuré tu peux faire avec :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    Sub EFFACERRESUME()
    Dim Tab_SyntheseArrets As ListObject
    Set t = Worksheets("RESUME ARRETS").ListObjects("Tab_SyntheseArrets")
     t.DataBodyRange.Clear
    End Sub
    Fichiers attachés Fichiers attachés

Discussions similaires

  1. [XL-2010] Extraire données d'un tableau pour synthétiser les résultats
    Par popopo25 dans le forum Excel
    Réponses: 7
    Dernier message: 27/03/2017, 22h50
  2. [XL-2010] synthétiser un tableau
    Par UDSP50 dans le forum Excel
    Réponses: 3
    Dernier message: 27/02/2016, 19h14
  3. Réponses: 7
    Dernier message: 07/12/2015, 14h17
  4. [XL-2007] Synthétiser un tableau Excel
    Par glbaa dans le forum Excel
    Réponses: 1
    Dernier message: 20/10/2015, 13h08
  5. [ XL 2003 ] - Synthétiser un tableau
    Par EFFLYINGJOKER dans le forum Excel
    Réponses: 1
    Dernier message: 02/12/2009, 13h58

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo