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 :

Lire une valeur dans un tableau croisé dynamique


Sujet :

Macros et VBA Excel

  1. #1
    Nouveau membre du Club
    Inscrit en
    Février 2010
    Messages
    49
    Détails du profil
    Informations forums :
    Inscription : Février 2010
    Messages : 49
    Points : 35
    Points
    35
    Par défaut Lire une valeur dans un tableau croisé dynamique
    Bonjour,

    J'ai regardé pas mal sur le net, mais je ne trouve rien qui corresponde à ma recherche...

    Je cherche par macro à lire dans mon TCD 2 colonnes et à comparer leur valeurs pour faire une conditionnelle. Je precise toutes les lignes sauf celle qui fait le sous total.

    Par exemple si la valeur de la colonne A>5 et la valeur de la colonne B<75 alors message "Résultat non conforme".

    Si quelqu'un a une idée?

    Je ne sais pas si j'ai été assez clair?

    Merci pour votre aide!

  2. #2
    Membre éclairé
    Profil pro
    Inscrit en
    Juin 2008
    Messages
    682
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France

    Informations forums :
    Inscription : Juin 2008
    Messages : 682
    Points : 723
    Points
    723
    Par défaut
    Bonjour,

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    For i = 1 To 10
     
        If Range("A" & i).Value > 5 And Range("B" & i).Value < 75 Then
            Range("C" & i).Value = "Résultat non conforme"
        End If
     
    Next
    Ici, j'ai pris le cas de ton exemple. Le résultat se retrouve dans la colonne C.

    Tu peux préciser les lignes en dur comme je l'ai fait ici : de la ligne 1 à 10. Il te suffit alors de préciser la première et la dernière à comparer.

    Bonne chance pour la suite.
    DeaD

  3. #3
    Nouveau membre du Club
    Inscrit en
    Février 2010
    Messages
    49
    Détails du profil
    Informations forums :
    Inscription : Février 2010
    Messages : 49
    Points : 35
    Points
    35
    Par défaut
    En fait, c'est plus compliqué...

    Voici à quoi ressemble mon TDC:


    Données
    Colonne X |Colonne A |Colonne B|Colonne C
    toto|8|13|57
    tata|1|100|100
    tutu|1|100|99
    titi|1|1|95

    Je voudrais venir dans la première ligne de la colonne A (en controlant qu'elle s'appelle bien Colonne A) et lire jusqu'à la dernière ligne et en même temps je compare la valeur qu'il y a dans la colonne C... Après si le resultat est mauvais je veux recuperer la valeur de la colonne x.

    Je sais vous allez me dire que c'est tordu...

    J'ai trouvé ça sur le net... Ca me permet de savoir quels champs j'ai dans Données


    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
    Sub tata()
     
    Dim sho As String
     
    For Each pvt In ActiveSheet.PivotTables
    For i = 1 To pvt.ColumnFields.Count
     
    sho = pvt.ColumnFields(i).Name
    sho = sho & vbCrLf
     
    For j = 1 To pvt.ColumnFields(i).PivotItems.Count
     
    MsgBox (pvt.ColumnFields(i).PivotItems(j).Name)
     
    Next j
    Next i
    Next pvt
     
    End Sub

  4. #4
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Mai 2010
    Messages
    27
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Mai 2010
    Messages : 27
    Points : 25
    Points
    25
    Par défaut
    Es-tu certain de vouloir une macros pour cela?

    Tu peux mettre une formule SI(ET(LIREDONNEESTABCROISDYNAMIQUE....)) avec tes conditions, tu auras seulement à changer des éléments pour pouvoir recopier ta formule pour tous ton tcd, ensuite tu fais un filtre automatique et tu sélectionnes tous tes "non conforme".

    Regarde l'exemple en pièce jointe
    Fichiers attachés Fichiers attachés

  5. #5
    Nouveau membre du Club
    Inscrit en
    Février 2010
    Messages
    49
    Détails du profil
    Informations forums :
    Inscription : Février 2010
    Messages : 49
    Points : 35
    Points
    35
    Par défaut
    Oui il me faut absolument faire cette opération par macro, car mon application est une succession de macro.
    Je connais cette fonction mais elle ne m'interresse pas.

    Merci pour ton aide!

  6. #6
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Mai 2010
    Messages
    27
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Mai 2010
    Messages : 27
    Points : 25
    Points
    25
    Par défaut
    Ok alors tu peux mixer les deux, tu entre dans ta feuille la formule ensuite dans ta macro utilise

    Range("F1:F10").Find("Résultat non conforme", lookat:=xlWhole)

    Ce que va te renvoyer un objet range, ensuite tu adaptes à ta macro.

  7. #7
    Nouveau membre du Club
    Inscrit en
    Février 2010
    Messages
    49
    Détails du profil
    Informations forums :
    Inscription : Février 2010
    Messages : 49
    Points : 35
    Points
    35
    Par défaut
    J'ai reussi à faire qqchose mais pas ce que je veux...

    Rappel de mon TCD:

    +---ColonneA ---+---ColonneB---+---ColonneC---+---ColonneD---+
    |------toto------|------6--------|----20---------|------80------|
    |------tata------|------5--------|----44 --------|------67-------|

    etc...

    J'arrive à lire les valeurs jusqu'à la dernière ligne de ma Colonne A ainsi qu'à determiner le nombre exacte des lignes, mais ce que je voudrais faire maintenant c'est:

    Je me place sur toto, je lis la valeur de la ColonneB et la valeur de ma ColonneD ensuite je fait ma conditionnelle (si ColonneB>5 et Colonne D<75 alors...), puis je me place sur tata et ainsi de suite...

    Voici mon bout de code (j'ai pris un peu par tout sur le net...):

    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
     
     
    Sub Ctrl_QteTaux() 
     
    Sheets("Feuil1").Select
     
    'On compte le nombre de ligne dans le champ fournisseur
    For Each pvt In ActiveSheet.PivotTables
    MsgBox (pvt.PivotFields("Fournisseur").PivotItems.Count & " fournisseurs")
     
    If pvt.PivotFields("Fournisseur").PivotItems.Count = 0 Then
    MsgBox ("Pas de données trouvées...")
    End If
    Next pvt
     
    'On vient lire les item dans le champ fournisseur
     
    For Each pvt In ActiveSheet.PivotTables
     
    For i = 1 To pvt.RowFields.Count
    'MsgBox pvt.RowFields(i).Name
     
    For j = 1 To pvt.RowFields(i).PivotItems.Count
    MsgBox pvt.RowFields(i).PivotItems(j).Name
     
    Next j
    Next i
    Next pvt
     
     
     
    End Sub
    En vous remerciant par avance pour votre aide

  8. #8
    Membre éclairé
    Profil pro
    Inscrit en
    Avril 2008
    Messages
    633
    Détails du profil
    Informations personnelles :
    Âge : 56
    Localisation : France

    Informations forums :
    Inscription : Avril 2008
    Messages : 633
    Points : 877
    Points
    877
    Par défaut
    Bonjour
    récapitulatif

    1ere demande
    Par exemple si la valeur de la colonne A>5 et la valeur de la colonne B<75 alors message "Résultat non conforme".
    2eme demande
    Je voudrais venir dans la première ligne de la colonne A (en controlant qu'elle s'appelle bien Colonne A) et lire jusqu'à la dernière ligne et en même temps je compare la valeur qu'il y a dans la colonne C... Après si le resultat est mauvais je veux recuperer la valeur de la colonne x.
    3eme demande
    Je me place sur toto, je lis la valeur de la ColonneB et la valeur de ma ColonneD ensuite je fait ma conditionnelle (si ColonneB>5 et Colonne D<75 alors...), puis je me place sur tata et ainsi de suite...
    pourrais tu être plus précis

    si ColonneB>5 et Colonne D<75 alors... je fais quoi de la colonne C et de la colonne A?
    Cordialement.

    N'oubliez pas de cliquer sur Résolu quand vous avez obtenu la réponse à votre question.
    Citation
    Il y a 10 sortes de gens au monde : ceux qui connaissent le binaire et les autres » - Anonyme
    Compter en octal, c’est comme compter en décimal, si on n’utilise pas ses pouces » - Tom Lehrer

  9. #9
    Nouveau membre du Club
    Inscrit en
    Février 2010
    Messages
    49
    Détails du profil
    Informations forums :
    Inscription : Février 2010
    Messages : 49
    Points : 35
    Points
    35
    Par défaut
    Salut zyhack,

    Je ne touche pas mon TCD, c'est juste de la lecture de valeurs.
    Je souhaite recuperer les valeurs de ma colonneA, colonneB, colonneD si elles sont non conformes pour les retravailler dans une autre macro...

  10. #10
    Membre éclairé
    Profil pro
    Inscrit en
    Avril 2008
    Messages
    633
    Détails du profil
    Informations personnelles :
    Âge : 56
    Localisation : France

    Informations forums :
    Inscription : Avril 2008
    Messages : 633
    Points : 877
    Points
    877
    Par défaut
    essaye ce 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
     
    Sub test()
    Dim c As Range
    With Sheets("Feuil1")
      For Each c In Range("A1:A" & Cells(Rows.Count, 1).End(xlUp).Row)
        If c.Offset(0, 1) > 5 And c.Offset(0, 3) < 75 Then
     
        MsgBox "Ligne " & c.Row & vbCrLf & _
               " ColA : " & c.Value & vbCrLf & _
               " ColB : " & c.Offset(0, 1).Value & vbCrLf & _
               " ColC : " & c.Offset(0, 1).Value & vbCrLf & _
               " ColD : " & c.Offset(0, 1).Value
        End If
      Next
    End With
    End Sub
    en utilisant les références de cellule utilisé pour le message box tu peux facilement les récupérer et les utiliser ailleurs
    Cordialement.

    N'oubliez pas de cliquer sur Résolu quand vous avez obtenu la réponse à votre question.
    Citation
    Il y a 10 sortes de gens au monde : ceux qui connaissent le binaire et les autres » - Anonyme
    Compter en octal, c’est comme compter en décimal, si on n’utilise pas ses pouces » - Tom Lehrer

  11. #11
    Nouveau membre du Club
    Inscrit en
    Février 2010
    Messages
    49
    Détails du profil
    Informations forums :
    Inscription : Février 2010
    Messages : 49
    Points : 35
    Points
    35
    Par défaut
    Merci de ton aide, j'ai fait un mixe de tout ça et ca fonctionne...
    Maintenant je vais essayer de mettre les valeurs dans une listbox... Un nouveau challenge lol.

    On peut dire que ce topic est clos.

    Merci à tous pour votre aide!!!

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

Discussions similaires

  1. Forcer une valeur dans un tableau croisé.
    Par jeffidf dans le forum Cognos
    Réponses: 1
    Dernier message: 03/04/2009, 12h20
  2. Remplacer valeur dans un tableau croisé dynamique
    Par caro93150 dans le forum Excel
    Réponses: 16
    Dernier message: 04/07/2008, 09h13
  3. Réponses: 0
    Dernier message: 13/02/2008, 12h11
  4. Réponses: 1
    Dernier message: 21/01/2008, 18h04
  5. Réponses: 4
    Dernier message: 27/11/2006, 23h20

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