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 :

Condition If ne fonctionne pas


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
    Étudiant
    Inscrit en
    Février 2021
    Messages
    4
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Février 2021
    Messages : 4
    Par défaut Condition If ne fonctionne pas
    Bonjour,

    J'ai réalisé une procédure afin de récupérer les champs d'un tableau croisé dynamique. Je souhaite récupérer les champs des zones Ligne et Colonne du TCD dans un premier tableau vba (ChAxe), puis les champs de la zone Valeur du TCD dans un second tableau vba (ChVal) (sous forme "Somme de champs" "Moyenne de champs" etc)

    Toutefois lorsque je rédige la condition sous cette forme : PivotFields("Somme de " & champs), le programme s'exécute comme s'il n'y avait pas de if ce qui créé une erreur lorsque le champs n'est pas dans le TCD.
    (sous cette forme : PivotFields(champs), le If fonction normalement mais ça ne me permet pas d'obtenir les champs de la zone Valeur du TCD..)

    Merci pour votre aide,
    Cordialement

    Voici mon 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
    54
    55
    56
    57
    Sub ChampsTCD()
     
    Dim n As Integer
    Dim m As Integer
    Dim PT As PivotTable
    Dim PF As PivotField
    Dim PFnom As String
    Dim ChAxe() As String
    Dim ChVal() As String
     
    n = 0
    m = 0
     
    Set PT = Worksheets("Feuil2").PivotTables("tcd1")
     
    For Each PF In PT.PivotFields
     
        If PT.PivotFields(PF.Name).Orientation = xlColumnField _
        Or PT.PivotFields(PF.Name).Orientation = xlRowField Then
            n = n + 1
            ReDim Preserve ChAxe(1 To n)
            ChAxe(n) = PF.Name
     
        ElseIf PT.PivotFields("Somme de " & PF.Name).Orientation = xlDataField Then
            m = m + 1
            ReDim Preserve ChVal(1 To m)
            ChVal(m) = "Somme de " & PF.Name
     
        ElseIf PT.PivotFields("Nombre de " & PF.Name).Orientation = xlDataField Then
            m = m + 1
            ReDim Preserve ChVal(1 To m)
            ChVal(m) = "Nombre de " & PF.Name
     
        ElseIf PT.PivotFields("Moyenne de " & PF.Name).Orientation = xlDataField Then
            m = m + 1
            ReDim Preserve ChVal(1 To m)
            ChVal(m) = "Moyenne de " & PF.Name
     
        ElseIf PT.PivotFields("Max. de " & PF.Name).Orientation = xlDataField Then
            m = m + 1
            ReDim Preserve ChVal(1 To m)
            ChVal(m) = "Max de " & PF.Name
     
        ElseIf PT.PivotFields("Min. de " & PF.Name).Orientation = xlDataField Then
            m = m + 1
            ReDim Preserve ChVal(1 To m)
            ChVal(m) = "Min de " & PF.Name
     
        ElseIf PT.PivotFields("Produit de " & PF.Name).Orientation = xlDataField Then
            m = m + 1
            ReDim Preserve ChVal(1 To m)
            ChVal(m) = "Produit de " & PF.Name
        End If
     
    Next PF
     
    End Sub
    Fichiers attachés Fichiers attachés

  2. #2
    Rédacteur/Modérateur


    Homme Profil pro
    Formateur et développeur chez EXCELLEZ.net
    Inscrit en
    Novembre 2003
    Messages
    19 125
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 58
    Localisation : Belgique

    Informations professionnelles :
    Activité : Formateur et développeur chez EXCELLEZ.net
    Secteur : Enseignement

    Informations forums :
    Inscription : Novembre 2003
    Messages : 19 125
    Billets dans le blog
    131
    Par défaut
    Citation Envoyé par Lulul Voir le message
    Bonjour,

    J'ai réalisé une procédure afin de récupérer les champs d'un tableau croisé dynamique.[...]

    Et ça sert à quoi? C'est un "exercice" ou bien cela a une quelconque utilité pratique? Un tcD étant par définition Dynamique, il est appelé à être modifié, tes arrays n'étant alors que sa "photo" à un instant T. Quel est l'intérêt?
    "Plus les hommes seront éclairés, plus ils seront libres" (Voltaire)
    ---------------
    Mes billets de blog sur DVP
    Mes remarques et critiques sont purement techniques. Ne les prenez jamais pour des attaques personnelles...
    Pensez à utiliser les tableaux structurés. Ils vous simplifieront la vie, tant en Excel qu'en VBA ==> mon tuto
    Le VBA ne palliera jamais une mauvaise conception de classeur ou un manque de connaissances des outils natifs d'Excel...
    Ce ne sont pas des bonnes pratiques parce que ce sont les miennes, ce sont les miennes parce que ce sont des bonnes pratiques
    VBA pour Excel? Pensez D'ABORD en EXCEL avant de penser en VBA...
    ---------------

  3. #3
    Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Février 2021
    Messages
    4
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Février 2021
    Messages : 4
    Par défaut
    Citation Envoyé par Pierre Fauconnier Voir le message
    Et ça sert à quoi? C'est un "exercice" ou bien cela a une quelconque utilité pratique? Un tcD étant par définition Dynamique, il est appelé à être modifié, tes arrays n'étant alors que sa "photo" à un instant T. Quel est l'intérêt?
    Je réalise un programme permettant à l'utilisateur de générer des TCD par un bouton, puis d'entrer ses champs et enfin de générer des Graphiques avec les TCD avec un autre bouton. Les graphiques sont fait à partir des TCD à un instant T et je souhaite personnaliser les titres de graphiques automatiquement grâce aux champs du TCD.

    exemple titre : "Somme de champs1 par champs2 et par champs3"

    Je souhaite donc faire :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    titre = Join(ChVal, "et ") & " par " & Join(ChAxe, "et par ")

  4. #4
    Rédacteur/Modérateur


    Homme Profil pro
    Formateur et développeur chez EXCELLEZ.net
    Inscrit en
    Novembre 2003
    Messages
    19 125
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 58
    Localisation : Belgique

    Informations professionnelles :
    Activité : Formateur et développeur chez EXCELLEZ.net
    Secteur : Enseignement

    Informations forums :
    Inscription : Novembre 2003
    Messages : 19 125
    Billets dans le blog
    131
    Par défaut
    Ce ne serait pas plus simple de le former à utiliser l'interface TCD d'Excel?

    Ca n'a aucun sens de réinventer, forcément en plus fragile, ce qui fait une des forces d'Excel et qui, de plus, est d'une simplicité d'utilisation extrême! Le temps de développer ton usine à gaz pleine de fuites et d'expliquer à l'utilisateur comment ça fonctionne, il aurait pu suivre des dizaines d'heures de formation sur l'outil (et franchement, la prise en mains des TCD ne nécessite pas des dizaines d'heures de formation, trèèèès loin de là). De plus, l'outil natif est disponible dans tous les classeurs alors que ton outil, vba oblige, est lié à un seul classeur, sauf xlam.

    il y a des démarches que j'ai vraiment des difficultés à comprendre
    "Plus les hommes seront éclairés, plus ils seront libres" (Voltaire)
    ---------------
    Mes billets de blog sur DVP
    Mes remarques et critiques sont purement techniques. Ne les prenez jamais pour des attaques personnelles...
    Pensez à utiliser les tableaux structurés. Ils vous simplifieront la vie, tant en Excel qu'en VBA ==> mon tuto
    Le VBA ne palliera jamais une mauvaise conception de classeur ou un manque de connaissances des outils natifs d'Excel...
    Ce ne sont pas des bonnes pratiques parce que ce sont les miennes, ce sont les miennes parce que ce sont des bonnes pratiques
    VBA pour Excel? Pensez D'ABORD en EXCEL avant de penser en VBA...
    ---------------

  5. #5
    Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Février 2021
    Messages
    4
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Février 2021
    Messages : 4
    Par défaut
    Lorsque l'utilisateur a beaucoup de graphiques a réaliser quotidiennement, la tâche devient très répétitive. Particulièrement la mise en forme de graphique. Je souhaite simplement automatiser un maximum cela. Si l'utilisateur le souhaite, il peut ensuite reprendre les graphiques pour les personnaliser davantage à souhait.

    Je fais surtout ce programme pour me former au VBA, en faisant cela j'utilise un grand nombre de méthodes, fonctionnalités, etc

    J'aimerais donc vraiment comprendre pourquoi mon code ne fonctionne pas.. merci d'avance.

  6. #6
    Rédacteur/Modérateur


    Homme Profil pro
    Formateur et développeur chez EXCELLEZ.net
    Inscrit en
    Novembre 2003
    Messages
    19 125
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 58
    Localisation : Belgique

    Informations professionnelles :
    Activité : Formateur et développeur chez EXCELLEZ.net
    Secteur : Enseignement

    Informations forums :
    Inscription : Novembre 2003
    Messages : 19 125
    Billets dans le blog
    131
    Par défaut
    Un TCD se crée en 3 ou 4 clics sur base d'un tableau structuré, plus la descente des champs dans les zones. Je ne vois pas comment ton outil pourrait être plus simple qu'Excel à ce niveau.

    Lorsque le TCD est créé, poser un GCD se fait en 3 clics; Là aussi, je ne vois pas comment ton ergonomie pourrait être plus simple ou plus rapide.

    Créer "beaucoup" de graphiques sur la journée, ça veut dire quoi? Ca n'a pas de sens de créer "beaucoup de graphiques". Lors de la conception de ses tableaux de bord, on crée avec l'interface d'Excel les graphiques dont on a besoin. Ils sont créés une fois pour toutes puis on actualise les données du TCD et c'est tout. On ne revient pas sur la structure des graphiques par la suite. A noter qu'à partir de ce moment, les TCD/GCD perdent un peu (beaucoup?) de leur Dynamisme, car on ne réinvente pas les tableaux de bord tous les jours. Ils sont en quelque sort structurellement figés. Ca, c'est pour les tableaux de bord.

    Si maintenant on veut analyser dynamiquement des flots de données, les graphiques créés à la volée sont alors temporaires et permettent une analyse ponctuelle des données, et de mon expérience, je n'ai jamais vu des managers évoluer avec des grahiques temporaires et se prendre le chou à modifier à chaque fois les titres des graphiques, d'où l'inutilité de s'amuser à adapter les titres des graphiques par macro (selon moi, en tout cas).

    Mais soit, si tu veux t'amuser à programmer ce bazar, amuse-toi
    "Plus les hommes seront éclairés, plus ils seront libres" (Voltaire)
    ---------------
    Mes billets de blog sur DVP
    Mes remarques et critiques sont purement techniques. Ne les prenez jamais pour des attaques personnelles...
    Pensez à utiliser les tableaux structurés. Ils vous simplifieront la vie, tant en Excel qu'en VBA ==> mon tuto
    Le VBA ne palliera jamais une mauvaise conception de classeur ou un manque de connaissances des outils natifs d'Excel...
    Ce ne sont pas des bonnes pratiques parce que ce sont les miennes, ce sont les miennes parce que ce sont des bonnes pratiques
    VBA pour Excel? Pensez D'ABORD en EXCEL avant de penser en VBA...
    ---------------

  7. #7
    Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Février 2021
    Messages
    4
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Février 2021
    Messages : 4
    Par défaut
    Je comprends et peut être que mon code n'est pas bien utile mais il me permet de me former au VBA. Et je suis face à un problème dont je ne comprends pas la source.
    Comprendre ce problème m'évitera surement de retomber dessus un jour lorsque je programmerai quelque chose dont tu verrais du sens.

    Je redemande, peut-on m'aider à comprendre le problème s'il vous plait ?

Discussions similaires

  1. Condition qui ne fonctionne pas
    Par korked dans le forum Général Java
    Réponses: 0
    Dernier message: 16/05/2015, 21h44
  2. Condition qui ne fonctionne pas
    Par Moymoy dans le forum Langage
    Réponses: 28
    Dernier message: 09/09/2013, 16h31
  3. Condition qui ne fonctionne pas dans une page jsp
    Par Lopak dans le forum Servlets/JSP
    Réponses: 0
    Dernier message: 29/04/2010, 17h37
  4. condition qui ne fonctionne pas
    Par Invité(e) dans le forum Langage
    Réponses: 6
    Dernier message: 07/02/2010, 17h27
  5. [vb.net] Condition qui ne fonctionne pas
    Par dyree dans le forum ASP.NET
    Réponses: 3
    Dernier message: 13/06/2006, 10h55

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