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 :

Prog VBA d'intervalle dans un tableau croisé dynamique [XL-2013]


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Candidat au Club
    Homme Profil pro
    Technicien polyvalent
    Inscrit en
    Juillet 2016
    Messages
    3
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 32
    Localisation : France, Haut Rhin (Alsace)

    Informations professionnelles :
    Activité : Technicien polyvalent
    Secteur : Industrie

    Informations forums :
    Inscription : Juillet 2016
    Messages : 3
    Par défaut Prog VBA d'intervalle dans un tableau croisé dynamique
    Bonjour, bonsoir,

    Votre mission, si toute fois vous....
    Enfaite c'est un tout petit souci pour vous tous bon comme vous êtes, qui moi m'a déjà pris plus de XXh de travail...

    J'aimerais effectuer des intervalles pour regrouper mes lignes du tableau croisé dynamique. Les fichiers sont bien plus démonstratifs que du texte, je vous joins deux fichiers.

    Test_TCD_VBA : ou j'ai réussi ce dont je voulais plus ou moins (une petite erreur en fin de code...)

    TCD_VBA: application presque similaire où je bloque, il ne m'analyse pas bien les variables!

    Je vous joins les deux fichiers pour que vous avez la possibilité de les comparer.
    Fichiers attachés Fichiers attachés

  2. #2
    Expert confirmé
    Homme Profil pro
    Responsable des études
    Inscrit en
    Juillet 2014
    Messages
    2 681
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Aude (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Responsable des études
    Secteur : Santé

    Informations forums :
    Inscription : Juillet 2014
    Messages : 2 681
    Par défaut
    Bonjour,

    Les fichiers sont bien plus démonstratifs que du texte
    Ou pas, une explication claire est bien plus utile que voici mes fichiers débrouillez vous avec.

    De plus http://www.developpez.net/forums/d84...s-discussions/

  3. #3
    Membre averti Avatar de shynen
    Homme Profil pro
    Étudiant
    Inscrit en
    Juin 2016
    Messages
    35
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 31
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Enseignement

    Informations forums :
    Inscription : Juin 2016
    Messages : 35
    Par défaut
    Effectivement tu auras nettement plus de chance de te faire aider en indiquant la partie de code où tu as besoin d'aide à l'aide de la balise code
    Sur ce coup tu risques de ne pas avoir de retour car beaucoup de personnes n'ouvriront pas ton fichier macro

  4. #4
    Candidat au Club
    Homme Profil pro
    Technicien polyvalent
    Inscrit en
    Juillet 2016
    Messages
    3
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 32
    Localisation : France, Haut Rhin (Alsace)

    Informations professionnelles :
    Activité : Technicien polyvalent
    Secteur : Industrie

    Informations forums :
    Inscription : Juillet 2016
    Messages : 3
    Par défaut
    Effectivement veuillez bien m'excuser j'ai sauté une étape pensant bien faire.

    Pour explication, je souhaite regrouper mes données de ligne du tableau croisé dynamique en intervalle. Je sais que pour les dates et valeurs numériques cela est possible directement avec la fonction grouper, mais dans mon cas ce n'est pas applicable.
    J'ai pour données des valeurs en % de 0 à 100, et du texte. Et je souhaite recueillir les informations en plusieurs intervalles:
    - X=0%
    - 0%<X<=25%
    - 25%<X<=50%
    - 50%<X<=75%
    - 75%<X<100%
    - X=100%
    - reste en texte comme le fait automatiquement Excel.

    J'ai réussi à établir une macro (fichier joint test_TCD_VBA) qui a été un fichier créé pour simplifier la prog. Mais sur mon fichier source (TCD_VBA), du fait que j'ai trop de champ dans mon tableau j'ai dû élargir mes sources de données et je n'arrive pas à comparer mes variables à celles du TCD.

    Ci-dessous le code:

    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
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    Sub test()
     
    'Crée des groupes en fonction de deux intervales
     
    Dim t() As Variant, i As Byte, c As Range, p As Range, pi As PivotItem, t2 As String
    'déclaration des intervales
    t = Array(0, 0.25, 0.5, 0.75, 1)
    With Feuil5.PivotTables("Tableau croisé dynamique9")
        'trie des valeurs numérique plus petit au plus grand
        .PivotFields("[Machine_ISL].[avanc.].[avanc.]").AutoSort xlAscending, "[Machine_ISL].[avanc.].[avanc.]"
        'commencement des 5 boucles
        i = 0
            For Each c In .PivotFields("[Machine_ISL].[avanc.].[avanc.]").DataRange
                If c = t(i) Then If p Is Nothing Then Set p = c Else Set p = Union(p, c)
            Next c
            'écriture en mémoire de l'intervale des groupes
            If Not p Is Nothing Then t2 = t(i) & ";": If p.Count > 1 Then p.Group
            Set p = Nothing
         For i = 1 To 3
            For Each c In .PivotFields("[Machine_ISL].[avanc.].[avanc.]").DataRange
                If c > t(i - 1) And c <= t(i) Then If p Is Nothing Then Set p = c Else Set p = Union(p, c)
            Next c
            'écriture en mémoire de l'intervale des groupes
            If Not p Is Nothing Then t2 = t2 & t(i - 1) & " à " & t(i) & ";": If p.Count > 1 Then p.Group
            Set p = Nothing
        Next i
       i = 4
            For Each c In .PivotFields("[Machine_ISL].[avanc.].[avanc.]").DataRange
                If c > t(i - 1) And c < t(i) Then If p Is Nothing Then Set p = c Else Set p = Union(p, c)
            Next c
            'écriture en mémoire de l'intervale des groupes
            If Not p Is Nothing Then t2 = t2 & t(i - 1) & " à " & t(i) & ";": If p.Count > 1 Then p.Group
            Set p = Nothing
        i = 4
            For Each c In .PivotFields("[Machine_ISL].[avanc.].[avanc.]").DataRange
                If c = t(i) Then If p Is Nothing Then Set p = c Else Set p = Union(p, c)
            Next c
            'écriture en mémoire de l'intervale des groupes
            If Not p Is Nothing Then t2 = t2 & t(i) & (";VR;VR(FC.GW;"): If p.Count > 1 Then p.Group
            Set p = Nothing
     
     
     
        With .PivotFields(.PivotFields.Count)
            i = 0
            'boucle renomme les groupes avec nom intervalle
            For Each pi In .PivotItems
            If pi.Visible Then pi.Name = Split(t2, ";")(i): i = i + 1
            Next pi
     
    End With
    End With
    End Sub

  5. #5
    Expert éminent

    Profil pro
    Conseil, Formation, Développement - Indépendant
    Inscrit en
    Février 2010
    Messages
    8 566
    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 566
    Par défaut
    Bonjour

    La source de ton TCD est dans PowerPivot : est-ce volontaire ?

  6. #6
    Candidat au Club
    Homme Profil pro
    Technicien polyvalent
    Inscrit en
    Juillet 2016
    Messages
    3
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 32
    Localisation : France, Haut Rhin (Alsace)

    Informations professionnelles :
    Activité : Technicien polyvalent
    Secteur : Industrie

    Informations forums :
    Inscription : Juillet 2016
    Messages : 3
    Par défaut
    Exactement, je pensais qu'il était nécessaire parce que tous mes champs n'apparaissaient pas dans mon TCD.
    Après avoir actualisé j'ai réussi à avoir tous les champs, du coup j'ai plus ou moins réussi la prog. (encore des erreurs mais fonctionne tout de même)

    Merci de m'avoir aiguillé sur le problème, je modifie le statut en résolu

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [XL-2010] VBA filtre dans un tableau croisé dynamique
    Par gauthier69 dans le forum Macros et VBA Excel
    Réponses: 8
    Dernier message: 06/04/2014, 12h17
  2. [XL-2007] Utilisation d'une fonction VBA dans un tableau croisé dynamique?
    Par Keketo dans le forum Macros et VBA Excel
    Réponses: 1
    Dernier message: 13/01/2011, 10h36
  3. VBA Excel :séparation dans un tableau croisé dynamique
    Par hiline6 dans le forum Macros et VBA Excel
    Réponses: 1
    Dernier message: 28/11/2006, 08h52
  4. Réponses: 4
    Dernier message: 27/11/2006, 23h20
  5. [VBA-Excel] Faire un filtre dans un tableau croisé dynamique
    Par Invité dans le forum Macros et VBA Excel
    Réponses: 8
    Dernier message: 27/11/2006, 15h05

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