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 :

Lecture données tableau croisé dynamique


Sujet :

Macros et VBA Excel

  1. #1
    Nouveau Candidat au Club
    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    1
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2007
    Messages : 1
    Points : 1
    Points
    1
    Par défaut Lecture données tableau croisé dynamique
    Bonjour,

    je suis débutante en VBA et c'est la première fois que je consulte ce forum.

    En fait, j'ai un souci avce un tableau croisé dynamique.

    J'ai un premier fichier qui contient des numéros de contrats puis une autre base contenant des informations relatives à ces diiférents numéros de contrats.
    J'ai crée un tableau croisé dynamique afin de mieux présenter les données.

    A chaque nouveau numéro de contrat, un tableau croisé dynamique est généré avec la propriété Current Page.
    En fait, je lis les numéros de contrat à partir d'une première feuille, puis je fais une copie en valeur pour chercher ce numéro de contrat dans le tableau croisé dynamique et enfin je recopie les données propres à ce numéro de contrat dans une autre feuille.
    J'ai crée une boucle qui lit tous les numéros de contrats et qui exécute tout ceci à la suite.

    J'ai deux soucis:

    -quand je relance plusieurs fois la boucle, ce ne sont jamais les mêmes données correspondant à un numéro de contrat qui ressortent;

    -le tableau croisé dynamique se retrouve affecté car il ne fournit plus les bonnes données (j'ai vérifié ceci en créant un tableau croisé dynamique indépendant).

    Je vous donne les lignes de code du programme:

    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
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    Sub alim_Pyer_cotisations2()
     
    Dim ws(8) As Worksheet
    Dim rpp, garantie, survenance As String
    Dim i As Integer
     
    For i = 6 To 16 'boucle sur l'ensemble des numéros de contrat et va chercher le montant des primes dans le tableau croisé dynamique'
    Set ws(1) = ThisWorkbook.Worksheets("cotsin")
    Set ws(2) = ThisWorkbook.Worksheets("cotisations2006")
    ws(2).Cells(2, 2).Value = ws(1).Cells(i, 1).Value
    Sheets("cotisations2006").Select
    rpp = Range("cotisations2006!b2").Value
    survenance = Range("cotisations2006!b3").Value
     ActiveSheet.PivotTables("Primes").PivotFields("N° Rpp").CurrentPage = rpp
    'ActiveSheet.PivotTables("Primes").PivotFields("Année Survenance").CurrentPage = survenance
     
     'remplissage de la base globale COT-SIN garantie par garantie et détail du type de prime'
     
    'garantie décès'
     
        If ws(2).Cells(10, 3).Value <> "" Then
          ws(1).Cells(i, 2).Value = ws(2).Cells(10, 3).Value
          ws(1).Cells(i, 10).Value = "Primes définitives"
        ElseIf (ws(2).Cells(10, 2).Value > 0 Or ws(2).Cells(10, 4).Value > 0) Then
          ws(1).Cells(i, 2).Value = Application.WorksheetFunction.Max(ws(2).Cells(10, 2).Value, ws(2).Cells(10, 4).Value)
          If ws(2).Cells(10, 2).Value < ws(1).Cells(10, 4).Value Then
            ws(1).Cells(i, 10).Value = "Primes Provisoires"
          Else
            ws(1).Cells(i, 10).Value = "encaissements"
          End If
          End If
     
     
    'garantie décès accidentel'
     
        If ws(2).Cells(11, 3).Value <> "" Then
        ws(1).Cells(i, 8).Value = ws(2).Cells(11, 3).Value
        ws(1).Cells(i, 16).Value = "Primes définitives"
        ElseIf (ws(2).Cells(11, 2).Value > 0 Or ws(2).Cells(11, 4).Value > 0) Then
            ws(1).Cells(i, 8).Value = Application.WorksheetFunction.Max(ws(2).Cells(11, 2).Value, ws(2).Cells(11, 4).Value)
            If ws(2).Cells(11, 2).Value < ws(1).Cells(11, 4).Value Then
            ws(1).Cells(i, 16).Value = "Primes Provisoires"
          Else
            ws(1).Cells(i, 16).Value = "encaissements"
          End If
        End If
     
     
    'garantie rente de conjoint'
     
        If ws(2).Cells(16, 3).Value <> "" Then
        ws(1).Cells(i, 4).Value = ws(2).Cells(16, 3).Value
        ws(1).Cells(i, 12).Value = "Primes définitives"
            ElseIf (ws(2).Cells(16, 2).Value > 0 Or ws(2).Cells(16, 4).Value > 0) Then
            ws(1).Cells(i, 4).Value = Application.WorksheetFunction.Max(ws(2).Cells(16, 2).Value, ws(2).Cells(16, 4).Value)
            If ws(2).Cells(16, 2).Value < ws(1).Cells(16, 4).Value Then
            ws(1).Cells(i, 12).Value = "Primes Provisoires"
          Else
            ws(1).Cells(i, 12).Value = "encaissements"
          End If
        End If
     
    'garantie rente éducation'
     
        If ws(2).Cells(17, 3).Value <> "" Then
        ws(1).Cells(i, 3).Value = ws(2).Cells(17, 3).Value
        ws(1).Cells(i, 11).Value = "Primes définitives"
        ElseIf (ws(2).Cells(17, 2).Value > 0 Or ws(2).Cells(17, 4).Value > 0) Then
        ws(1).Cells(i, 3).Value = Application.WorksheetFunction.Max(ws(2).Cells(17, 2).Value, ws(2).Cells(17, 4).Value)
            If ws(2).Cells(16, 2).Value < ws(1).Cells(17, 4).Value Then
            ws(1).Cells(i, 11).Value = "Primes Provisoires"
          Else
            ws(1).Cells(i, 11).Value = "encaissements"
          End If
          End If
     
     
      '  garantie RF '
     
        If ws(2).Cells(18, 3).Value <> "" Then
        ws(1).Cells(i, 7).Value = ws(2).Cells(18, 3).Value
        ws(1).Cells(i, 15).Value = "Primes définitives"
        ElseIf (ws(2).Cells(18, 2).Value > 0 Or ws(2).Cells(18, 4).Value > 0) Then
        ws(1).Cells(i, 7).Value = Application.WorksheetFunction.Max(ws(2).Cells(18, 2).Value, ws(2).Cells(18, 4).Value)
            If ws(2).Cells(18, 2).Value < ws(1).Cells(18, 4).Value Then
            ws(1).Cells(i, 15).Value = "Primes Provisoires"
          Else
            ws(1).Cells(i, 15).Value = "encaissements"
          End If
          End If
     
      'garantie  "Incapacité Temporaire"
     
        If ws(2).Cells(12, 3).Value <> "" Then
        ws(1).Cells(i, 5).Value = ws(2).Cells(12, 3).Value
        ws(1).Cells(i, 13).Value = "Primes définitives"
        ElseIf (ws(2).Cells(12, 2).Value > 0 Or ws(2).Cells(12, 4).Value > 0) Then
        ws(1).Cells(i, 5).Value = Application.WorksheetFunction.Max(ws(2).Cells(12, 2).Value, ws(2).Cells(12, 4).Value)
             If ws(2).Cells(12, 2).Value < ws(1).Cells(12, 4).Value Then
            ws(1).Cells(i, 13).Value = "Primes Provisoires"
          Else
            ws(1).Cells(i, 13).Value = "encaissements"
          End If
          End If
     
      ' garantie "Invalidité Permanente"'
     
        If ws(2).Cells(13, 3).Value <> "" Then
        ws(1).Cells(i, 6).Value = ws(2).Cells(13, 3).Value
        ws(1).Cells(i, 14).Value = "Primes définitives"
        ElseIf (ws(2).Cells(13, 2).Value > 0 Or ws(2).Cells(13, 4).Value > 0) Then
        ws(1).Cells(i, 6).Value = Application.WorksheetFunction.Max(ws(2).Cells(13, 2).Value, ws(2).Cells(13, 4).Value)
           If ws(2).Cells(13, 2).Value < ws(1).Cells(13, 4).Value Then
            ws(1).Cells(i, 14).Value = "Primes Provisoires"
          Else
            ws(1).Cells(i, 14).Value = "encaissements"
          End If
          End If
     
    Next i
     
    End Sub
    J'espère que j'ai été assez claire dans mes explications et je vous remercie par avance pour votre aide.

    Jackeline

  2. #2
    Membre régulier
    Inscrit en
    Juin 2007
    Messages
    147
    Détails du profil
    Informations forums :
    Inscription : Juin 2007
    Messages : 147
    Points : 103
    Points
    103
    Par défaut
    Salutations Jacqueline,

    Essaie tout d'abord pour qu'on puisse y voir plus clair de mettre ton code entre balise [CODE]
    N'oubliez pas de cliquer sur Résolu, une fois la réponse donnée.

  3. #3
    Rédacteur/Modérateur
    Avatar de beekeep
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Octobre 2006
    Messages
    2 005
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Octobre 2006
    Messages : 2 005
    Points : 3 325
    Points
    3 325
    Par défaut
    Lut

    J'ai un premier fichier qui contient des numéros de contrats puis une autre base contenant des informations relatives à ces diiférents numéros de contrats.
    Pourquoi ne pas rassembler les données ?

    Un tcd est justement fait pour ça ..

    Meme si tu veux un tcd pour chaque num de contrat, il faudrait avoir toutes les données dans une feuille, c'est le plus pratique.

    Aprés tu peux t'arranger avec plusieurs zones nommées.

    ;)

Discussions similaires

  1. [XL-2013] Tri de données / Tableau Croisé Dynamique / Gestions des Doublons.
    Par arnachronox dans le forum Excel
    Réponses: 5
    Dernier message: 29/12/2014, 13h41
  2. Lire données tableau croisé dynamique via macro
    Par Gamack dans le forum Macros et VBA Excel
    Réponses: 6
    Dernier message: 11/08/2014, 18h53
  3. Lecture de données dans un tableau croisé dynamique
    Par jeo13 dans le forum Macros et VBA Excel
    Réponses: 9
    Dernier message: 15/04/2008, 10h13
  4. Réponses: 3
    Dernier message: 13/04/2007, 10h04
  5. Réponses: 1
    Dernier message: 22/09/2006, 13h05

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