TCD VBA macro Erreur d'exécution 1004

Bonjour à toute la communauté, j'ai un souci concernant une macro pour du taff ...Je m'explique :

J'ai deux classeurs :

Un reporting absentéisme centrale ("Reporting Absentéisme 2020 3"), avec 4 TCD étalés sur 3 principaux onglets ( dont un TCD nommé "Tableau croisé Dynamique4" dans un onglet "Taux Absentéisme" qui m'intéresse).

un reporting modèle ("Reporting Absentéisme 2020 modèle Olivier") avec un onglet "Taux Absentéisme".

Manuellement, je dois filtrer à partir de l'onglet "Taux Absentéisme"' du reporting central et copier les valeurs dans l'onglet "Taux Absentéisme" du reporting modèle

En conséquence, dans "Reporting Absentéisme 2020 3" ==> onglet "taux 'absentéisme" ==> je filtre par "pole" dans Tableau croisé Dynamique4 et je copie les valeurs d'ici:

image

et je les colle dans le classeur "Reporting Absentéisme 2020 modèle Olivier " ==> onglet "Taux d'absentéisme"

image

J'ai tenté de faire taper un code à l'aide de ce que j'ai pu trouvé mais la je botte en touche :

image

Le but de ce code est de filtrer par par le pole Auto Suresnes automatiquement puis d'envoyer les valeurs trouvées sur le reporting modèle à l'onglet indiqué.

In fine, le but ce serait de le faire pour chaque pole.

J'avais déja utilisé ce code sur des doc perso et pourtatn ca avait bien marché.(sauf que c'était entre deux worksheets et non pas deux workbooks)

Bien évidemment, puisqu'il y a des données personnelles de salariés je ne peux vous envoyer le reporting central.

Pour info, quand je debug pas à pas ca me surligne en jaune directement "sub macro_test()"

Toutefois, si vous y tenez, je pourrais changer les noms et les valeurs afin que vous puissiez mieux comprendre le souci.

Merci par avance à la communauté !!!

Bonjour,

Si vous espérez obtenir une aide optimale, il vaudrait mieux joindre vos fichiers, sachant qu'on ne sait pas sur quelle ligne se trouve l'erreur.

Sinon, Il faut premièrement faire bien attention à tous les noms (majuscules, minuscules, caractères accentués - à éviter tant que possible -, espaces indésirables, ...).

Par exemple, je vois une feuille Taux Absentéisme et dans le code Worksheets("Taux absentéisme"), je vois un champ "Pôle " (avec un vilain espace et un circonflexe) que je retrouve plus loin sans espace de fin, plusieurs autres éléments avec des espaces, manifestement de saisie malencontreuse... Et les TCD ne sont pas renommés.

Ensuite, il y a un Activesheet qui peut causer problème. Il faut le remplacer par Sheets("nomdelafeuille") (a priori "Taux Absentéisme"). Enfin, je crois qu'il faut s'assurer que chaque classeur impliqué soit ouvert au moment de l'exécution.

Cdlt,

Bonjour,

@kharlos78,

Merci d'indiquer ta version Excel dans ton profil.

Cdlt.

Je vous remercie à tous les deux pour vos avis qui ont été très précieux. Ne pouvant vous envoyer mes fichiers, j'ai ré-écrit le code, le voici et il marche très bien pour l'instant. Mais je suis encore loin d'avoir fini. Ceci dit, cela m'a permis de mieux comprendre l’intérêt des variables et des référencements avec "set".

Sub Macro_Test_TCD_4()

Dim wka As Workbook
Dim wkp As Workbook
Dim wks1 As Worksheet
Dim wks2 As Worksheet

Application.ScreenUpdating = False

On Error Resume Next

Workbooks.Open "C:\Users\o.bariac\Documents\documents persos\" & "Reporting Absentéisme 2020 3"

Set wka = Workbooks("Reporting Absentéisme 2020 3")
Set wkp = Workbooks("Reporting Absentéisme 2020 modèle olivier")
Set wks1 = wka.Worksheets("Taux Absentéisme")
Set wsk2 = wkp.Worksheets("Taux Absentéisme")

wka.Activate

wks1.PivotTables("Tableau croisé dynamique4").PivotFields("Pôle").CurrentPage = "(All)"

With Worksheets("Taux Absentéisme").PivotTables("Tableau croisé dynamique4").PivotFields("Pôle")

.PivotItems("Autres").Visible = False
.PivotItems("Pôle MRH Suresnes").Visible = False
.PivotItems("Pôle MRH Rennes").Visible = False
.PivotItems("Pôle AUTO Rennes").Visible = False
.PivotItems("CLAIMS ANALYTICS").Visible = False
.PivotItems("Conquête & Fidélisation").Visible = False
.PivotItems("VOL VEI").Visible = False
.PivotItems("Equipes spécialisées").Visible = False
.PivotItems("Process Owner AUTO").Visible = False
.PivotItems("Process Owner MRH").Visible = False
.PivotItems("Stratégie Prestataires").Visible = False
.PivotItems("Pôle formation et politique métier sinistres ").Visible = False
.PivotItems(" Cellule Pilotage Rennes").Visible = False
End With

wks1.PivotTables("Tableau croisé dynamique1").PivotFields("Pôle").CurrentPage = "(All)"

With Worksheets("Taux Absentéisme").PivotTables("Tableau croisé dynamique1").PivotFields("Pôle")

.PivotItems("Autres").Visible = False
.PivotItems("Pôle MRH Suresnes").Visible = False
.PivotItems("Pôle MRH Rennes").Visible = False
.PivotItems("Pôle AUTO Rennes").Visible = False
.PivotItems("CLAIMS ANALYTICS").Visible = False
.PivotItems("Conquête & Fidélisation").Visible = False
.PivotItems("VOL VEI").Visible = False
.PivotItems("Equipes spécialisées").Visible = False
.PivotItems("Process Owner AUTO").Visible = False
.PivotItems("Process Owner MRH").Visible = False
.PivotItems("Stratégie Prestataires").Visible = False
.PivotItems("Pôle formation et politique métier sinistres ").Visible = False
.PivotItems(" Cellule Pilotage Rennes").Visible = False
End With


wkp.Worksheets("Taux Absentéisme").Range("A4:G42").Value = wka.Worksheets("Taux Absentéisme").Range("A10:G48").Value

wkp.Worksheets("Taux Absentéisme").Range("I4:M42").Value = wka.Worksheets("Taux Absentéisme").Range("N10:R48").Value

wkp.Worksheets("Taux Absentéisme").Range("O4:S42").Value = wka.Worksheets("Taux Absentéisme").Range("U10:Y48").Value

wkp.Worksheets("Taux Absentéisme").Range("U4:Y42").Value = wka.Worksheets("Taux Absentéisme").Range("AA10:AE48").Value

End Sub

Par contre si par hasard, vous trouvez des moyens de simplifiez le code n'hésitez pas à me l'indiquer, ou même des recommandations en terme de règles de code, je suis preneur!!!!!

Bonjour,

Pour poster du code, vous pouvez utiliser les balises </> (sur le ruban en haut lorsque vous écrivez un commentaire).

Sinon, voici une idée en bouclant sur les éléments même si je ne sais pas vraiment ce que vous cherchez et me base sur votre premier post.

Sub Macro_Test_TCD_4()

Dim wbabs As Workbook, wboliv As Workbook
Dim wsabs As Worksheet, wsoliv As Worksheet
Dim pi as PivotItem

Application.ScreenUpdating = False

On Error Resume Next

Workbooks.Open "C:\Users\o.bariac\Documents\documents persos\" & "Reporting Absentéisme 2020 3"

Set wbabs = Workbooks("Reporting Absentéisme 2020 3")
Set wboliv = Workbooks("Reporting Absentéisme 2020 modèle olivier") 'thisworkbook
Set wsabs = wbabs.Worksheets("Taux Absentéisme")
Set wsoliv = wboliv.Worksheets("Taux Absentéisme")

'wbabs.Activate

with wsabs

    with .PivotTables("Tableau croisé dynamique4").PivotFields("Pôle")
        .CurrentPage = "(All)"
        for each pi in .pivotitems
            if pi.name = "Pôle AUTO Suresnes" then '<<< si c'est ce qui est voulu, vérifier nom
                pi.visible = true
            else
                pi.visible = false
            end if
        next pi
    End With

    with .PivotTables("Tableau croisé dynamique1").PivotFields("Pôle")
        .CurrentPage = "(All)"
        for each pi in .pivotitems
            if pi.name = "Pôle AUTO Suresnes" then '<<< si c'est ce qui est voulu, vérifier nom
                pi.visible = true
            else
                pi.visible = false
            end if
        next pi
    End With

    wsoliv.Range("A4:G42").Value = .Range("A10:G48").Value
    wsoliv.Range("I4:M42").Value = .Range("N10:R48").Value
    wsoliv.Range("O4:S42").Value = .Range("U10:Y48").Value
    wsoliv.Range("U4:Y42").Value = .Range("AA10:AE48").Value

end with

End Sub

Cdlt,

Un grand merci à vous3GB !
Je ne pourrais tester ce code qu'à partir de vendredi. En effet, je ne peux me focus à 100% sur le sujet des boucles et des conditions en VBA, étant actuellement en alternance (en semaine de cours).

Excusez-moi, @Jean-Eric ma version sur mon ordi pro est celle de 2002

Le but de ma venue sur ce site n'est pas de bêtement reprendre vos codes mais de les comprendre et de voir les réadapter si possible.

C'est pour cela que je compte "attaquer " les boucles et les conditions ce weed end en théorie et en pratique (à l'aide de la macro suivante et d'un livres d'exercices...)

Toutefois, je m'interroge sur l’intérêt des instructions suivantes:

Application.ScreenUpdating = False

On Error Resume Next

Je crois qu'elles permettent d’éviter l'affichage d'un message d'erreur ou d"updating" à cause de l'ouverture du classeur.

En tout cas merci !

La ligne Application.screenupdating = false désactive la mise à jour de l'affichage à l'écran. Ça permet notamment un exécution plus rapide du code. Il faut en fin de macro remettre cette propriété sur true : Application.screenupdating = true (ce qui n'est pas le cas ici)...

la ligne on error resume next permet de prolonger l'exécution du code en cas d'erreur. Ici, elle sert surtout à passer l'éventualité où le chemin du fichier ne serait pas bon (ligne juste après de l'ouverture du classeur olivier) ou, plus particulièrement, l'éventualité où le fichier serait déjà ouvert. Selon le besoin, il faudra éventuellement trouver une solution plus adaptée.

Pour désactiver les alertes, il faudrait rajouter les lignes Application.displayalerts = false puis une fois la partie sujette aux alertes passée remettre la propriété sur true Application.displayalerts = true.

Bon courage pour votre apprentissage en tout cas !

Cdlt,

Rechercher des sujets similaires à "tcd vba macro erreur execution 1004"