Automatisation des champs TCD

Bonjour DAN,

Merci pour tes réponses mais mon réel problème pour l'heure est la question de la boucle sur les sociétés. Je n'arrive pas à la mettre en place. Je voudrais savoir si tu sais comment je peux faire sachant que je vais ouvrir une nouvelle discussion consacré seulement au problème de ma boucle qui devrait prendre toutes les noms de sociétés de la Feuil 3 de la colonne B et les mettre tour à tour dans une variable nommée société.

Je te remercie encore par avance.

re,

Pas besoin d'ouvrir un nouveau fil.

Fais un test avec ce fichier. Il te faut démarrer avec la macro "Liste".

La boucle société est comprise

Je n'ai pas testé vu les instructions qui ne passent pas sur mes versions excel

A te relire

Amicalement

32poussin4.zip (39.04 Ko)

Merci beaucoup Dan pour cette solution, j'ai réussi à la mettre en application sur mon projet. Par contre je viens d'ajouter quelques champs dans mon TCD et après la création de Mon TCD 1, l'application part directement sur :fin et ne veut pas continuer.

La seule modification que j'ai faite est d'ajouter ceci :

 .AddDataField ActiveSheet.PivotTables("Mon TCD" & n). _
                      PivotFields("Effectifs"), "Moyenne de Effectifs/VA", xlAverage
        .PivotFields("Moyenne de Effectifs/VA").NumberFormat = "0.00%"

Je ne comprends donc pas pourquoi je passe forcément vers :fin à quoi cela est-il du ? Merci pour ton éclaircissement sur ce problème et encore merci pour ton travail.

Cordialement

-- 18 Août 2011, 14:57 --

L'erreur se fait après avoir créé 2 TCD, il sélectionne le troisième et à ce niveau là il affiche l'erreur : impossible de définir la propriété Orientation de la classe PivotFields :

With ActiveSheet.PivotTables("Mon TCD" & n)
        .AddFields
'        On Error GoTo fin:
        With .PivotFields("Métier")
            .Orientation = xlPageField            
            .CurrentPage = metier
            If i = 1 Or i = 4 Or i = 7 Then .CurrentPage = "All"
        End With

Merci pour ton aide.

re,

Tu es sur qu'il y a assez de place entre les TCD ? Si tu as rajout des champs, évidemment le code peut planter comme cela

A te relire

Effectivement il manquait de la place cela n'empêche maintenant que sur mes 80 sociétés, la boucle en traite 70 et ensuite finit l'application en passant par :fin.

Les 10 sociétés manquantes ont comme par hasard seulement une seule année de données ( 2008 ou 2009 ou 2010 ) alors que les autres en ont au moins 2. Y-a-t-il un lien par rapport à la construction du code.

Je te remercie d'avance pour ta réponse, n'hésites pas à me demander si je ne suis pas clair dans mes explications. Bonne soirée à toi.

re,

ensuite finit l'application en passant par :fin.

C'est que tu as une erreur dans la lecture du code et l'instruction "On error go to fin" qui t'envoie vers la fin de la macro

Je suppose que tu as bien le message qui te dit que l'année est manquante

Au début, tu as dit que tu avais trois années. Là tu me dis qu'il n'y a qu'une année pour certaines sociétés. Cela change bien sûr

Dans le début du code on définit l'année départ comme étant 2008.

Et lorsque tu demandes au code de mettre un champ de page avec une année inexistante le code te renvoie une erreur.

Je n'ai pas testé mais essaie en modifiant cette partie de code

With .PivotFields("Date")
            .Orientation = xlPageField
        '   .Position = 1
            If Err <> 0 Then
                .CurrentPage = "All"
            Else: .CurrentPage = annee + j - 1
            End If
 End With

Meric pour votre explication. J'ai donc tenté de modifier malheureusement le problème persiste.

Merci pour votre aide sur ce problème persistant.

re

Pas évident sans voir ton fichier là...

Essaie comme ceci :

on error resume next
With .PivotFields("Date")
            .Orientation = xlPageField
           .CurrentPage = annee + j - 1
            End If
 End With
on error goto 0

A te relire

Il met un problème avec la boucle if voilà les trois propositions.

J'ai mis les 2 autres en commentaires et cela ne fonctionne pas.

    On Error Resume Next
    With .PivotFields("Date")
            .Orientation = xlPageField
           .CurrentPage = annee + j - 1
            End If
    End With
    On Error GoTo 0

'        With .PivotFields("Date")
'            .Orientation = xlPageField
'        '   .Position = 1
'           If Err <> 0 Then
'                .CurrentPage = "All"
'            Else: .CurrentPage = annee + j - 1
'            End If
'        End With

'        With .PivotFields("Date")
'            .Orientation = xlPageField
'
'
'            .CurrentPage = annee + j - 1
'        End With

        .AddDataField ActiveSheet.PivotTables("Mon TCD" & n). _
                      PivotFields("FP / Bilan"), "Moyenne de FP / Bilan", xlAverage
        .PivotFields("Moyenne de FP / Bilan").NumberFormat = "0.00%"

De plus je me suis rendu compte que j eprenais le mauvais métier je prenais celui d'en-dessous donc j'ai ajouté -1 et le code suivant ne marche plus :

metier = Range("Tableau2[Métier]")(Range("Tableau2[Nom]").Find(societe, lookat:=xlWhole).Row)

Merci pour ton aide sur ces 2 problèmes qui m'empêche de progresser. Encore merci pour ta disponibilité.

-- 19 Août 2011, 15:06 --

Le deuxième problème avec le ROw-1 est résolu.

Re,

Pas facile sans voir ton fichier .... car je ne peux rien tester.

Essaie l'instruction

With .PivotFields("Date")
        .Orientation = xlPageField
   '   .Position = 1
        If Err.number <> 0 Then
             .CurrentPage = "All"
            Err.clear
        Else: .CurrentPage = annee + j - 1
        End If
 End With

Vérifie que tu as bien 0 (le chiffre 0 et non la lettre O) et essaie aussi en remplaçant "All" par "(All)" ou "(Tous)"

Sinon il faudrait au moins que tu me dises sur quelle ligne le code s'arrête et ce, en inhibant la ligne "On error goto fin"

Amicalement

Rechercher des sujets similaires à "automatisation champs tcd"