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 :

Macro TDC


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Septembre 2005
    Messages
    12
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2005
    Messages : 12
    Par défaut Macro TDC
    bonjour à tous

    j'ai un problème avec une macro qui crée un tcd automatiquement. Tout part d'une requête excel que je récupère sur une feuille excel. ensuite je crée automatiquement, sur une autre feuille un deux TCD, le second étant la copie du premier. Cela veut dire que si je retire u champ sur ce 2eme tableau, il va, en réalité le faire sur le 1er. Jusque là cela ne me dérange pas.

    Le problème commence lorsque je fais la copie du 2emetableau pour créer un troisième. Le retrait d'un champ sur ce 3eme tableau entraine un retrait non pas sur le second (comme je le souhaite) mais sur le premier. Est ce que quelqu'un sait comment créer automatiquement(par macro) plus de deux TCD. Merci d'avance.

    Je ne sais pas si mon explication est claire, sinon je pourrais mettre en ligne le fichier source avec des exemples de ce que je veux.

    Merci d'avance.

  2. #2
    Membre Expert
    Avatar de JackOuYA
    Inscrit en
    Juin 2008
    Messages
    1 040
    Détails du profil
    Informations forums :
    Inscription : Juin 2008
    Messages : 1 040
    Par défaut
    Bonjour, rjphel

    Tu les crées comment ces 2 TCD , on peut voir le code ..?
    ton probléme ressemble à l'utilisation abusive de Select , Activate , ActiveSheet... ! il faut éviter d'utiliser les "objets" par défaut tel que range("A... sans rien devant le range et qui agit donc sur la feuille en cour ...

  3. #3
    Membre averti
    Profil pro
    Inscrit en
    Septembre 2005
    Messages
    12
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2005
    Messages : 12
    Par défaut
    Bonjour

    Pour créer mes tcd, j'ai procédé le plus simplement posible par l'enregistreur de macro. (excel 2003). Mais je ne suis pas sûr que ça vous permettra de comprendre mon probleme. Le mieux serait que je vous envoie le fichier avec les tcd que je veux creer . J'ai essayé au mieux de commenter la procedure. Je commence par inserer 4 colonnes dans lesquelles j'insère les données et, je crée ensuite un tcd que je recopie pour créer d'autres tcd.

    voici un exemple de procedure de creation de TCD
    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
    123
    124
    125
    126
    127
    128
    129
    130
    131
    132
    133
    134
    135
    136
    137
    138
    139
    140
    141
    142
    143
    144
    145
    146
    147
    148
    149
    150
    151
    152
    153
    154
    155
    156
    157
    158
    159
    160
    161
    162
    163
    164
    165
    166
    167
    168
    169
    170
    171
    172
    173
    174
    175
    176
    177
    178
    179
    180
    181
    182
    183
    184
    185
    186
    187
    188
    189
    190
    191
    192
    193
    194
    195
    196
    197
    198
    199
    200
    201
    202
    203
    204
    205
    206
    207
    208
    209
    210
    211
    212
    213
    214
    215
    216
    217
    218
    219
    220
    221
    222
    223
    224
    225
    226
    227
    228
    229
    230
    231
    232
    233
    234
    235
    236
    237
    238
    239
    240
    241
    242
    243
    244
    245
    246
    247
    248
    249
    250
    251
    252
    253
    254
    255
    256
    257
    258
    259
    260
    261
    262
    263
    264
    265
    266
    267
    268
    269
    270
    271
    272
    273
    274
    275
    276
    277
    278
    279
    280
    281
    282
    283
    284
    285
    286
    287
    288
    289
    290
    291
    292
    293
    294
    295
    296
    297
    298
    299
    300
    301
    302
    303
    304
    305
    306
    307
    308
    309
    310
    311
    312
    313
    314
    315
    316
    317
    318
    319
    320
    321
    322
    323
    324
    325
    326
    327
    328
    329
    330
    331
    332
    333
    334
    335
    336
    337
    338
    339
    340
    341
    342
    343
    344
    345
    346
    347
    348
    349
    350
    351
    352
    353
    354
    355
    356
    357
    358
    359
    360
    361
    362
    363
    364
    365
    366
    367
    368
    369
    370
    371
    372
    373
    374
    375
    376
    377
    378
    379
    380
    381
    382
    Sub creationTCD()
     
    '
     
        'insertion de4 colonnes à partir de la colonne E
        Columns("E:E").Select
        'Insertion de 4 colonnes
        Call insertColonne
        Call insertColonne
        Call insertColonne
        Call insertColonne
     
        'Titre de la colonne E
        Range("E1").Select
        ActiveCell.FormulaR1C1 = "date du jour"
        Call format
     
        'Format de la colonne E
        Range("E2").Select
        ActiveCell.FormulaR1C1 = "=TODAY()"
     
        'Titre  de la colonne F
        Range("F1").Select
        ActiveCell.FormulaR1C1 = "date (année)"
        Call format
     
        'Format de la colonne F
        Range("F2").Select
        ActiveCell.FormulaR1C1 = "=YEAR(RC[-2])"
        Selection.NumberFormat = "General"
     
        'incrémentation automatique
        Call Autofill
     
        'titre de la colonne G
        Range("G1").Select
        ActiveCell.FormulaR1C1 = "date (mois)"
        Call format
     
        'Format de la colonne G
        Range("G2").Select
        ActiveCell.FormulaR1C1 = "=MONTH(RC[-3])"
        Range("G2").Select
        Selection.NumberFormat = "mmm"
        Selection.NumberFormat = "General"
     
        'incrémentation automatique
        Call Autofill
     
     
        'Titre de la colonne H
        Range("H1").Select
        ActiveCell.FormulaR1C1 = "age dossier (en mois)"
        Call format
     
        'format de la colonne H
        Range("H2").Select
        ActiveCell.FormulaR1C1 = "=DATEDIF(RC[-4],R2C5,""m"")"
        Range("H2").Select
     
        'auto incrémentation
        Selection.NumberFormat = "General"
        Call Autofill
     
        'selection de toutes les cellules
        Cells.Select
        Range("I1").Activate
        ActiveWorkbook.PivotCaches.Add(SourceType:=xlDatabase, SourceData:= _
            "report!A1:AA10000").CreatePivotTable TableDestination:="", TableName:= _
            "Tableau croisé dynamique1", DefaultVersion:=xlPivotTableVersion10
        ActiveSheet.PivotTableWizard TableDestination:=ActiveSheet.Cells(3, 1)
        ActiveSheet.Cells(3, 1).Select
     
        'insertion de deux lignes
        Rows("1:1").Select
        Call insertLigne
        Call insertLigne
     
     
        'selection des colonnes de titre
        Range("A1:D2").Select
     
        'format du titre
        Call formatTitre
     
        'Nom du titre
        ActiveCell.FormulaR1C1 = "Nombre de dossiers (par année et par mois)"
     
        'selection cellule A6
        Range("A6").Select
     
         'ajout de la colonne Nombre de référence
        ActiveSheet.PivotTables("Tableau croisé dynamique1").AddDataField ActiveSheet. _
            PivotTables("Tableau croisé dynamique1").PivotFields("Référence"), _
            "Nombre de Référence", xlCount
     
     
        'pas de sous totaux pour la date (année)
        ActiveSheet.PivotTables("Tableau croisé dynamique1").PivotFields("date (année)" _
            ).Subtotals = Array(False, False, False, False, False, False, False, False, False, False _
            , False, False)
     
        'ajout de la colonne resultat dossier
        With ActiveSheet.PivotTables("Tableau croisé dynamique1").PivotFields( _
            "Résultat du dossier")
            .Orientation = xlColumnField
            .Position = 1
        End With
     
        'ajout de la colonne date(annee)
        With ActiveSheet.PivotTables("Tableau croisé dynamique1").PivotFields( _
            "date (année)")
            .Orientation = xlRowField
            .Position = 1
        End With
     
        'ajout de la colonne date( mois)
        With ActiveSheet.PivotTables("Tableau croisé dynamique1").PivotFields( _
            "date (mois)")
            .Orientation = xlRowField
            .Position = 2
        End With
     
        'Pas de sous totaux pour la date (mois)
        ActiveSheet.PivotTables("Tableau croisé dynamique1").PivotFields("date (mois)") _
            .Subtotals = Array(False, False, False, False, False, False, False, False, False, False, _
            False, False)
     
        'Format des cellules contenant les dates
        Range("A7:B18").Select
        Selection.NumberFormat = "General"
     
     
        'Titre et format du second tableau
        Range("A21:D22").Select
        Call formatTitre
     
        'Nom du titre
        ActiveCell.FormulaR1C1 = "Nombre de dossiers (par résultats)"
     
        'selection et copie du tableau
        Range("A5:G18").Select
        Selection.Copy
     
        'copie
        Range("A25").Select
        ActiveSheet.Paste
     
        'retrait de la colonne resultat du 1er tableau
        Range("C5").Select
        ActiveSheet.PivotTables("Tableau croisé dynamique1").PivotFields( _
            "Résultat du dossier").Orientation = xlHidden
     
        'Titre et format du titre du 3eme tableau
        Range("A40:D41").Select
        Call formatTitre
     
        'Nom du titre
        ActiveCell.FormulaR1C1 = "Moyenne d'âge des dossiers (en mois)"
     
        'selection et copie du 2eme tableau
        Range("A25:G38").Select
        Range("G38").Activate
        Selection.Copy
     
        'on colle sur cette cellule
        Range("A44").Select
        ActiveSheet.Paste
     
        '
        Range("A44").Select
        Application.CutCopyMode = False
     
        'retrait
        Range("C44").Select
        ActiveSheet.PivotTables("Tableau croisé dynamique1").PivotFields( _
            "Résultat du dossier").Orientation = xlHidden
     
        Range("A44").Select
        ActiveSheet.PivotTables("Tableau croisé dynamique1").PivotFields( _
            "Nombre de Référence").Orientation = xlHidden
     
        ActiveSheet.PivotTables("Tableau croisé dynamique1").AddDataField ActiveSheet. _
            PivotTables("Tableau croisé dynamique1").PivotFields("age dossier (en mois)") _
            , "Nombre de age dossier (en mois)", xlCount
     
        Range("A44").Select
        ActiveSheet.PivotTables("Tableau croisé dynamique1").PivotFields( _
            "Nombre de age dossier (en mois)").Function = xlAverage
     
        Range("A45").Select
        With ActiveSheet.PivotTables("Tableau croisé dynamique1").PivotFields( _
            "date (année)")
            .Orientation = xlColumnField
            .Position = 1
        End With
     
     
     
     
     
     Range("A44:G57").Select
        Range("G57").Activate
        Selection.Copy
     
        Range("A64").Select
        ActiveSheet.Paste
     
       ' ActiveWorkbook.ShowPivotTableFieldList = True
        Range("C44").Select
        Application.CutCopyMode = False
        ActiveSheet.PivotTables("Tableau croisé dynamique1").PivotFields( _
            "Résultat du dossier").Orientation = xlHidden
     
        Range("A44").Select
       ' ActiveSheet.PivotTables("Tableau croisé dynamique1").PivotFields( _
         '   "Nombre de Référence").Orientation = xlHidden
        'ActiveSheet.PivotTables("Tableau croisé dynamique1").AddDataField ActiveSheet. _
           ' PivotTables("Tableau croisé dynamique14").PivotFields("age dossier (en mois)") _
            ', "Nombre de age dossier (en mois)", xlCount
        'Range("A44").Select
        'ActiveSheet.PivotTables("Tableau croisé dynamique1").PivotFields( _
            '"Nombre de age dossier (en mois)").Function = xlAverage
        With ActiveSheet.PivotTables("Tableau croisé dynamique1").PivotFields( _
            "date (année)")
            .PivotItems("1900").Visible = False
        End With
        Range("A60:D61").Select
        Selection.Font.Bold = True
     
     
        With Selection
            .HorizontalAlignment = xlCenter
            .VerticalAlignment = xlBottom
            .WrapText = False
            .Orientation = 0
            .AddIndent = False
            .IndentLevel = 0
            .ShrinkToFit = False
            .ReadingOrder = xlContext
            .MergeCells = False
        End With
        Selection.Merge
        With Selection
            .HorizontalAlignment = xlLeft
            .VerticalAlignment = xlBottom
            .WrapText = False
            .Orientation = 0
            .AddIndent = False
            .IndentLevel = 0
            .ShrinkToFit = False
            .ReadingOrder = xlContext
            .MergeCells = True
        End With
     
        Selection.Font.ColorIndex = 3
        Range("A60:D61").Select
        ActiveCell.FormulaR1C1 = "Prétentions"
        Range("A64:G77").Select
     
        Range("G77").Activate
        Selection.Copy
     
        Range("A84").Select
        ActiveSheet.Paste
     
        Range("C64").Select
        Application.CutCopyMode = False
        ActiveSheet.PivotTables("Tableau croisé dynamique1").PivotFields( _
            "Résultat du dossier").Orientation = xlHidden
     
        Range("A64").Select
        ActiveSheet.PivotTables("Tableau croisé dynamique1").PivotFields( _
            "Nombre de Référence").Orientation = xlHidden
     
        ActiveSheet.PivotTables("Tableau croisé dynamique1").AddDataField ActiveSheet. _
            PivotTables("Tableau croisé dynamique1").PivotFields( _
            "Prétentions adverses (somme)(Valeur)"), _
            "Nombre de Prétentions adverses (somme)(Valeur)", xlCount
     
        Range("A64").Select
        ActiveSheet.PivotTables("Tableau croisé dynamique1").PivotFields( _
            "Nombre de Prétentions adverses (somme)(Valeur)").Function = xlSum
     
        Range("A84:G99").Select
        Range("G99").Activate
        Selection.Copy
     
        Range("A106").Select
        ActiveSheet.Paste
     
        Range("C84").Select
        Application.CutCopyMode = False
        ActiveSheet.PivotTables("Tableau croisé dynamique1").PivotFields( _
            "Résultat du dossier").Orientation = xlHidden
     
        Range("A84").Select
        ActiveSheet.PivotTables("Tableau croisé dynamique1").PivotFields( _
            "Nombre de Référence").Orientation = xlHidden
        ActiveSheet.PivotTables("Tableau croisé dynamique1").AddDataField ActiveSheet. _
            PivotTables("Tableau croisé dynamique1").PivotFields( _
            "Condamné / Obtenu(Valeur)"), "Nombre de Condamné / Obtenu(Valeur)", xlCount
     
        Range("A84").Select
        ActiveSheet.PivotTables("Tableau croisé dynamique1").PivotFields( _
            "Nombre de Condamné / Obtenu(Valeur)").Function = xlSum
     
        Range("A80:D81").Select
        Selection.Font.Bold = True
        With Selection
            .HorizontalAlignment = xlLeft
            .VerticalAlignment = xlBottom
            .WrapText = False
            .Orientation = 0
            .AddIndent = False
            .IndentLevel = 0
            .ShrinkToFit = False
            .ReadingOrder = xlContext
            .MergeCells = False
        End With
        With Selection
            .HorizontalAlignment = xlCenter
            .VerticalAlignment = xlBottom
            .WrapText = False
            .Orientation = 0
            .AddIndent = False
            .IndentLevel = 0
            .ShrinkToFit = False
            .ReadingOrder = xlContext
            .MergeCells = False
        End With
        Selection.Merge
        Selection.Font.ColorIndex = 3
     
        Range("A80:D81").Select
        ActiveCell.FormulaR1C1 = "Condamnations"
        Range("A102:D103").Select
        Selection.Font.Bold = True
        With Selection
            .HorizontalAlignment = xlLeft
            .VerticalAlignment = xlBottom
            .WrapText = False
            .Orientation = 0
            .AddIndent = False
            .IndentLevel = 0
            .ShrinkToFit = False
            .ReadingOrder = xlContext
            .MergeCells = False
        End With
        With Selection
            .HorizontalAlignment = xlCenter
            .VerticalAlignment = xlBottom
            .WrapText = False
            .Orientation = 0
            .AddIndent = False
            .IndentLevel = 0
            .ShrinkToFit = False
            .ReadingOrder = xlContext
            .MergeCells = False
        End With
        Selection.Merge
        Selection.Font.ColorIndex = 3
     
        Range("A102:D103").Select
        ActiveCell.FormulaR1C1 = "exécutions"
     
        Range("C106").Select
        ActiveSheet.PivotTables("Tableau croisé dynamique1").PivotFields( _
            "Résultat du dossier").Orientation = xlHidden
     
        Range("A106").Select
        ActiveSheet.PivotTables("Tableau croisé dynamique1").PivotFields( _
            "Nombre de Référence").Orientation = xlHidden
     
        ActiveSheet.PivotTables("Tableau croisé dynamique1").AddDataField ActiveSheet. _
            PivotTables("Tableau croisé dynamique1").PivotFields("Exécuté(Devise)"), _
            "Nombre de Exécuté(Devise)", xlCount
     
        Range("A106").Select
        ActiveSheet.PivotTables("Tableau croisé dynamique1").PivotFields( _
            "Nombre de Exécuté(Devise)").Function = xlSum
    End Sub

  4. #4
    Membre Expert
    Avatar de JackOuYA
    Inscrit en
    Juin 2008
    Messages
    1 040
    Détails du profil
    Informations forums :
    Inscription : Juin 2008
    Messages : 1 040
    Par défaut
    Oui c'est bien ce que je pensai,l'enregistreur de macro c'est bien mais c'est un enregistreur de macro, cela enregistre bétement les divers ordres, donc et l'utilisation des selection, active, select... implique une rigueur dans l'ordre des commandes et n'adment d'influence extérieure (changement de feuille active, de sélection .. par l'opérateur)..

    tu devrai donc supprimer tous ces select ,activate, selection et il y as des chances que ton probléme se résolve tout seul ainsi pour accéder à une cellule tu précise le classeur et la feuille au lieu de :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    Workbooks("MonClasseur.xls").Activate
    sheets("Feuil1").activate
    Range("a1").select
    Selection = "J'écris dans A1"
    tu met
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    Workbooks("Monclasseru.xls").Sheers("Feuil1").Range("A1") = "J'écris dans A1"
    si cela te semble long tu peu utiliser des variables, par exemple une variable feuille de calcul , tiens cela donne (dans le cas ou en plus ta feuille et dans le même classeur que ton code)

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    dim yaWh as WorkSheet
    set yaWh = ThisWorkbook.Sheets("Feuil1")
    yaWh.range("A1") = "J"écris ans A1 de feuil1"

  5. #5
    Membre averti
    Profil pro
    Inscrit en
    Septembre 2005
    Messages
    12
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2005
    Messages : 12
    Par défaut
    Bjr

    j'ai bien compris ton code mais, je ne sais pas où est ce que je dois le mettre. Pourrais tu récupérer certains morceaux dans mon code et dire qu'à la place, je dois remplacer par tel autre code ? Merci

Discussions similaires

  1. macro pour sélectionner une valeur dans un TDC
    Par sebogoss dans le forum Macros et VBA Excel
    Réponses: 0
    Dernier message: 19/11/2009, 14h50
  2. [VB6] Exécuter une macro Access
    Par Nektanebos dans le forum VB 6 et antérieur
    Réponses: 8
    Dernier message: 22/02/2006, 16h32
  3. [VBA-E] [Excel] Lancer une macro à une heure donnée
    Par Lysis dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 16/10/2002, 12h15
  4. Qu'est-ce qu'une macro ?
    Par karli dans le forum Assembleur
    Réponses: 2
    Dernier message: 01/09/2002, 03h38
  5. Réponses: 2
    Dernier message: 22/07/2002, 12h13

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