Problème de langue Excel dans une macro et utilisation du segment

Bonjour,

J'ai effectué une macro qui demande de me positionner sur le champs "vide" d'un segment et puis de revenir sur un TCD afin de le rafraichir.

La macro fonctionne dans ma version française de excel.

Mais chez ma collège qui a une version anglaise, cela ne fonctionne plus car le champs "vide", s'appelle "blank" et le problème se posera chez les néerlandophone où ce champs s'appelera "leeg"

Je ne sais pas comment adapter ma macro pour que cela fonctionne dans tous les cas.

Voici la macro:

Sub Macro1()
'
' Macro1 Macro
'

'
With ActiveWorkbook.SlicerCaches("Segment_ID")
.SlicerItems("(vide)").Selected = True

End With
Range("A4").Select
ActiveSheet.PivotTables("Tableau croisé dynamique1").PivotCache.Refresh
End Sub

Merci pour votre aide,

Aline

Bonjour et bienvenue

Pensez à utiliser les balises de codes lorsque vous placez un code en cliquant sur l'icone </> dans la barre de menu et en collant votre code dans la fenêtre.
J'ai corrigé votre post pour que vous voyiez


Pour votre code, à moins que je ne me trompe si vous utilisez l'anglais cela devrait fonctionner

Essayez en remplaçant "vide" par "blank"

Sinon pourquoi voulez-vous vous positionner sur vide ? Peut être voulez-vous supprimer tous les choix en ré-affichant l'option Vide ??
Vous pourriez montrer une image de ce que vous avez pour que je comprenne comment vous fonctionnez ou alors avoir le fichier sans données sensibles

Cordialement


Edit : ce que je vous ai proposé ne fonctionnera pas. Essayez votre macro comme ceci

Sub Macro2()
Dim si As SlicerItem

With ThisWorkbook.SlicerCaches("Segment_ID")
For Each si In .SlicerItems
    With si
        If .Name = "(vide)" Or .Name = "(blank)" Or .Name = "(leeg)" Then
            .Selected = True
        Else: .Selected = False
        End If
    End With
Next si
ActiveSheet.PivotTables("Tableau croisé dynamique1").PivotCache.Refresh
End With
End Sub

Le code sélectionnera uniquement les options "Vide"

Si ok et terminé pensez à cloturer le fil comme ceci

Crdlt

Bonjour Dan et merci pour la réponse.

Il s'agit d'un fichier qui sera a disposition de plusieurs personnes qui sont amenées à exécuter la macro pour rafraichir les données. Les versions d' excel peut donc varier au niveau de la langue.

En effet, si je remplace par "blank" cela fonctionne dans la version Anglais mais plus dans le français.

En fait, je doit séléctionner un seul élément dans mon segment pour pouvoir rafairchir mes tableaux car sinon ils vont se superposer. Quand je mets à jour, tous les ID de ma liste sont des nouveaux ID (ils sont liés à une bd externe mise à jour automatiquement) donc par défaut les tableaux reprennent tous les éléments lors du rafraichissement (et donc il ne veut pas rafraichir car ils se superposent)

- Cela pourrait être de sélectionner le premier ou le dernier si l'on peut faire cette commande en VBA ou désélectionner le tout

J'avoue que je ne m'y connais pas en macro et que j'ai enregistré mes manipulations.

- Ma solution serait de créer 3 boutons avec 3 macros différentes mais je trouve cela dommage.

- Ou un système

SI le segment contient Vide, sélectionner vide

Si le segment contien Blank sélectionner blank

Si le segment contient Leeg seléctinner leeg

Je joint un fichier d'exemple mais hyper simplifié....

13exemple-macro.xlsm (31.96 Ko)

Je viens de voir la suite de votre message,

Je teste !

Je viens de voir la suite de votre message,

Je teste !

Ok. Après dites-moi combien vous avez de TCD sur la feuille "tableau"
Là j'en vois 2

Bonjour,

Hello Dan

Sinon, vérifier la propriété "HasData", au lieu du nom?

....
With si
       .Selected = IIf(.HasData, False, True)
End With
....

Bonne journée

Merci! Cela fonctionne!

J'en ai 6 mais j'effectue d'autres manipulations dans la Macro.

Je vais y intégrer votre partie en modifiant la macro.

Pouvez-vous m'expliquer ce que fait le

Dim si

Il donne un nom à un élément du segment? "si"

Encore merci,

Aline

Dim si

Il donne un nom à un élément du segment? "si"

"SI" est une variable que je déclare par Dim

Dans la boucle For each si, "si" prend la valeur de chaque item dans la liste des ID


Hello Cousinhub
Cela est plus simple sur une ligne mais chez moi le code plante sur Hasdata.


Hi,

Hello Cousinhub
Cela est plus simple sur une ligne mais chez moi le code plante sur Hasdata.

Pas les mêmes priorités sur MAC?

Regarde un exemple tout con

Edit, celui-ci plutôt (pas de scories...)

re Cousinhub

Là je ne suis pas sur MAC

Dans le fichier du demandeur, il y a deux TCD
Avec 1 TCD cela fonctionne oui.

Re-,

Oui, vu...

Bah, j'ai essayé...

Re Cousinhub

Non ça marche aussi !

Suis bête... Le souci est que les deux TCD sont l'un en dessous de l'autre.

Donc le code comme ceci

Sub Macro2()
Dim si As SlicerItem

With ThisWorkbook.SlicerCaches("Segment_ID")
    For Each si In .SlicerItems
        With si
            .Selected = IIf(.HasData, False, True)
        End With
Next si
'ActiveSheet.PivotTables("Tableau croisé dynamique1").PivotCache.Refresh
End With
End Sub

Là donc plus besoin de penser au libellé vide, blank et autre.... (j'arrive pas à comprendre comment Microsoft a laissé ce truc là depuis des décennies ... on avait déjà ce souci avec la version 2003 !)


@ A Collin

Maintenant à voir combien il y a de TCD dans la feuille et surtout dans le fichier.

Si terminé pensez à cloturer le fil

Rechercher des sujets similaires à "probleme langue macro utilisation segment"