XLS 2010 - Un problème de boucle sur des tcd
ap49
Messages postés
8
Date d'inscription
Statut
Membre
Dernière intervention
-
ap49 Messages postés 8 Date d'inscription Statut Membre Dernière intervention -
ap49 Messages postés 8 Date d'inscription Statut Membre Dernière intervention -
Bonjour,
Je me tourne vers vous car je suis bloqué sur une macro qui ne veut pas fonctionner.
Le fichier ( https://www.cjoint.com/?0HDjXK9uWb7 ) contient une feuille 'saisie' dans laquelle il va y avoir plein de données au cours de l'année.
A tout moment je veux pouvoir actualiser tous mes tcd (qui sont sur des feuilles séparées)
et en meme temps leur décocher les (Vide) et " " et autres choses indésirables.
Du coup j'ai codé la macro qui est associé au bouton ''ACTUALISER TOUS LES TCD" de cette feuille saisie, mais elle ne fonctionne pas...
Selon vous, d'où vient le soucis.... ?
Le code de la macro est le suivant :
(il coince à p.Visible=False)
j'ai aussi essayé avec comme condition p.Value au lieu de p.Name, mais rien n'y fait ...
Sachant qu'à la base j'avais tapé une looooooongue macro qui sélectionnait feuille après feuille, tcd après tcd (avec leur nom) et ensuite qui changeait p.Visible et là ça fonctionnait mais la macro était longue, lente et spécifique aux noms des tcd déjà créés (donc assez limitée !)
Bref, voilà la bête :
Merci d'avance !
ap.
Je me tourne vers vous car je suis bloqué sur une macro qui ne veut pas fonctionner.
Le fichier ( https://www.cjoint.com/?0HDjXK9uWb7 ) contient une feuille 'saisie' dans laquelle il va y avoir plein de données au cours de l'année.
A tout moment je veux pouvoir actualiser tous mes tcd (qui sont sur des feuilles séparées)
et en meme temps leur décocher les (Vide) et " " et autres choses indésirables.
Du coup j'ai codé la macro qui est associé au bouton ''ACTUALISER TOUS LES TCD" de cette feuille saisie, mais elle ne fonctionne pas...
Selon vous, d'où vient le soucis.... ?
Le code de la macro est le suivant :
(il coince à p.Visible=False)
j'ai aussi essayé avec comme condition p.Value au lieu de p.Name, mais rien n'y fait ...
Sachant qu'à la base j'avais tapé une looooooongue macro qui sélectionnait feuille après feuille, tcd après tcd (avec leur nom) et ensuite qui changeait p.Visible et là ça fonctionnait mais la macro était longue, lente et spécifique aux noms des tcd déjà créés (donc assez limitée !)
Bref, voilà la bête :
Sub Mise_a_jour_des_TCD() '_______définition des variables_______________________________________________________________________ Dim ws As Worksheet Dim wb As Workbook Dim TCD As PivotTable Dim CHAMP As PivotField Dim p As PivotItem Set wb = ThisWorkbook '_______Conditions d'application de la macro : si il y a des données dais saisie________________________ If Cells(11, 7) <> "" Then '_______Freeze de l'écran, pour ne pas trop ralentir le système_______________________________________________________________________________ Application.ScreenUpdating = False '_______MAJ des TCD_____________________________________________________________________________________ For Each ws In wb.Worksheets For Each TCD In ws.PivotTables For Each CHAMP In TCD.PivotFields For Each p In CHAMP.PivotItems If p.Name = "(blank)" Then p.Visible = False End If If p.Name = """" Then p.Visible = False End If Next p Next CHAMP Next TCD Next ws '_______défreeze de l'écran____________________________________________________________________________ Application.ScreenUpdating = True '_______Message de réussite____________________________________________________________________________ MsgBox ("Les TCD ont été mis à jour, reste à définir la précocité & vérifier les récap") '_______Fin des conditions_____________________________________________________________________________ End If '_______Fin de la macro_____________________________________________________________________________ End Sub
Merci d'avance !
ap.
A voir également:
- XLS 2010 - Un problème de boucle sur des tcd
- Tcd excel - Guide
- Clé activation office 2010 gratuit - Télécharger - Sécurité
- Comment ouvrir un fichier xls? - Guide
- Word 2010 - Télécharger - Traitement de texte
- Xls viewer - Télécharger - Tableur
7 réponses
Bonjour,
C'est étrange ; chez moi, il n'y a pas d'erreur (j'ai fait des TCD très légers, mais le principe y est). Si tu désélectionnes "à la main", Excel le tolère ? Peux-tu fournir ton fichier sur cjoint.com ?
Par ailleurs si tu as beaucoup de données, j'aurais tendance à plutôt écrire :
pour me passer des contrôles avec If qui ralentissent la macro.
A+
C'est étrange ; chez moi, il n'y a pas d'erreur (j'ai fait des TCD très légers, mais le principe y est). Si tu désélectionnes "à la main", Excel le tolère ? Peux-tu fournir ton fichier sur cjoint.com ?
Par ailleurs si tu as beaucoup de données, j'aurais tendance à plutôt écrire :
On Error Resume Next For Each CHAMP In TCD.PivotFields CHAMP.PivotItems("(blank)").Visible=False CHAMP.PivotItems("""").Visible=False Next CHAMP On Error GoTo 0
pour me passer des contrôles avec If qui ralentissent la macro.
A+
Je vais essayer de suite ta solution !
j'ai actualisé mon premier post, le fichier est sur cjoint avec le lien.
Est ce que ca pourrait venir du fait qu'à un moment donné dans mes manip j'ai fait une erreur de code et au lieux d'écrire p.Visible = False j'ai écrit p.Value = False (ou True) ? Et du coup il ne reconnait plus (blank) et "" comme du texte mais des bouléens ou quelque chose du genre ?
Et si oui, que faire ^^
merci de ton aide, je reviens dès que j'ai testé ton code
j'ai actualisé mon premier post, le fichier est sur cjoint avec le lien.
Est ce que ca pourrait venir du fait qu'à un moment donné dans mes manip j'ai fait une erreur de code et au lieux d'écrire p.Visible = False j'ai écrit p.Value = False (ou True) ? Et du coup il ne reconnait plus (blank) et "" comme du texte mais des bouléens ou quelque chose du genre ?
Et si oui, que faire ^^
merci de ton aide, je reviens dès que j'ai testé ton code
Je me suis trompé dans le code, il ne doit plus y avoir de p. J'ai corrigé dans https://forums.commentcamarche.net/forum/affich-28608242-xls-2010-un-probleme-de-boucle-sur-des-tcd#1
Avec ce que tu m'as donné comme code, chez moi ca tourne sans interruption depuis quelques minutes déjà !
Sachant que mon fichier est le même que celui de cjoint, mais avec des onglets en plus, ce qui ne devrait rien changer ...
Sachant que mon fichier est le même que celui de cjoint, mais avec des onglets en plus, ce qui ne devrait rien changer ...
En fait la macro ne bug pas si on laisse On Error Resume Next, mais elle ne fait rien de ce qui est demandé, elle ne décoche pas les vides si il y en a.
mais si je l'enlève, ca ne marche pas, ''erreur 1004, impossible de définir la propriété PivotItems de la classe PivotField"
(à la ligne : CHAMP.PivotItems("""").Visible = False, ou à l'autre d'ailleurs)
..
mais si je l'enlève, ca ne marche pas, ''erreur 1004, impossible de définir la propriété PivotItems de la classe PivotField"
(à la ligne : CHAMP.PivotItems("""").Visible = False, ou à l'autre d'ailleurs)
..
En fait la macro ne bug pas si on laisse On Error Resume Next, mais elle ne fait rien de ce qui est demandé, elle ne décoche pas les vides si il y en a.
Je n'aurais pas dû me fier à ta syntaxe pour les vides ; en mettant "" (au lieu de """"), chez moi ça retire les vides.
Pour les blank, j'ai dû utiliser un autre fichier que celui de cjoint, et ça marche aussi.
mais si je l'enlève, ca ne marche pas, ''erreur 1004, impossible de définir la propriété PivotItems de la classe PivotField"
(à la ligne : CHAMP.PivotItems("""").Visible = False, ou à l'autre d'ailleurs)
Je n'ai pas mis le On Error par hasard (il est d'ailleurs généralement à éviter). Si la macro tente de décocher une case qui n'existe pas, il y aura une erreur : l'erreur 1004 que tu mentionnes.
Je n'aurais pas dû me fier à ta syntaxe pour les vides ; en mettant "" (au lieu de """"), chez moi ça retire les vides.
Pour les blank, j'ai dû utiliser un autre fichier que celui de cjoint, et ça marche aussi.
mais si je l'enlève, ca ne marche pas, ''erreur 1004, impossible de définir la propriété PivotItems de la classe PivotField"
(à la ligne : CHAMP.PivotItems("""").Visible = False, ou à l'autre d'ailleurs)
Je n'ai pas mis le On Error par hasard (il est d'ailleurs généralement à éviter). Si la macro tente de décocher une case qui n'existe pas, il y aura une erreur : l'erreur 1004 que tu mentionnes.
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
effectivement ca fonctionne pour les "" avec ta correction, pour les blank je cherche encore mais je pense que ca vient d'une erreur précédente de codage :
J'ai à un moment donné, malheureusement écrit PivotItems("(blank)").Value = False au lieu de PivotItems("(blank)").Visible = False
Alors du coup ca avait changé tous les (vide) par Faux, logique .... !
J'ai alors rajouté dans le code
PivotItems("Faux").Value = (vide)
pour me remettre des (vide) au lieu des Faux
puis je suis revenu à un code correctement rédigé (que j'ai collé plus haut donc)
Et je pense que c'est depuis ce moment qu'il ne veut pas fonctionner sur les (vide) (et qu'il fonctionne bien sur "")...
le problème c'est surement qu'il ne reconnait plus (blank) ou quelque chose du genre...
En tout cas ma macro progresse déja bien, c'est ma chef qui est ravie ^^ merci !
J'ai à un moment donné, malheureusement écrit PivotItems("(blank)").Value = False au lieu de PivotItems("(blank)").Visible = False
Alors du coup ca avait changé tous les (vide) par Faux, logique .... !
J'ai alors rajouté dans le code
PivotItems("Faux").Value = (vide)
pour me remettre des (vide) au lieu des Faux
puis je suis revenu à un code correctement rédigé (que j'ai collé plus haut donc)
Et je pense que c'est depuis ce moment qu'il ne veut pas fonctionner sur les (vide) (et qu'il fonctionne bien sur "")...
le problème c'est surement qu'il ne reconnait plus (blank) ou quelque chose du genre...
En tout cas ma macro progresse déja bien, c'est ma chef qui est ravie ^^ merci !
Ah ben j'étais presque agacé par le fait que tu veuilles décocher les "(vide)" alors qu'il n'y en avait pas... Je m'étonnais en revanche de la présence de "Faux".
En actualisant les données, je pensais que tout se remettrait en ordre, mais ça ne marche pas sur mon fichier. Et sur le tien.
Sinon, j'espère que tu peux repartir d'un ancien fichier (avant de baptiser les Faux)...
En actualisant les données, je pensais que tout se remettrait en ordre, mais ça ne marche pas sur mon fichier. Et sur le tien.
Sinon, j'espère que tu peux repartir d'un ancien fichier (avant de baptiser les Faux)...
Et bien merci beaucoup pour ton aide, maintenant tout fonctionne.
La macro pourrait surement être plus simplement codée, mais bon, j'ai mis les vérif sur (blank) & (vide); et comme ça ils se décochent bien tous.
Je mets le code qui fonctionne, à adapter.
La macro pourrait surement être plus simplement codée, mais bon, j'ai mis les vérif sur (blank) & (vide); et comme ça ils se décochent bien tous.
Je mets le code qui fonctionne, à adapter.
Sub Mise_a_jour_des_TCD() '_______définition des variables_______________________________________________________________________ Dim ws As Worksheet Dim wb As Workbook Dim TCD As PivotTable Dim CHAMP As PivotField Dim p As PivotItem Set wb = ThisWorkbook '_______Conditions d'application de la macro : si il y a des données dans saisie________________________ If Cells(110, 7) <> "" Then '_______Freeze de l'écran, pour ne pas trop ralentir le système_______________________________________________________________________________ Application.ScreenUpdating = False '_______MAJ des TCD_____________________________________________________________________________________ For Each ws In wb.Worksheets For Each TCD In ws.PivotTables On Error Resume Next For Each CHAMP In TCD.PivotFields CHAMP.PivotItems("(blank)").Visible = False CHAMP.PivotItems("(vide)").Visible = False CHAMP.PivotItems((blank)).Visible = False CHAMP.PivotItems((vide)).Visible = False CHAMP.PivotItems("").Visible = False Next CHAMP On Error GoTo 0 Next TCD Next ws '_______défreeze de l'écran____________________________________________________________________________ Application.ScreenUpdating = True '_______Message de réussite____________________________________________________________________________ MsgBox ("Les TCD ont été mis à jour, reste à définir la précocité & vérifier les récap") '_______Fin des conditions_____________________________________________________________________________ End If '___________Actualisation 3 fois de suite, pour les tcd dépendant d'autres tcd, sinon tout n'est pas à jour ... ActiveWorkbook.RefreshAll ActiveWorkbook.RefreshAll ActiveWorkbook.RefreshAll '_______Fin de la macro_____________________________________________________________________________ End Sub