[VBA] liste déroulante et tableau croisé dynamique

phyx

XLDnaute Nouveau
Bonjours tout le monde,

J'essaie de lier un tableau croisé dynamique à une liste déroulante.
En somme, dès que l'on bouge la liste déroulante, par exemple, le nom d'une personne, le tableau mit dans une autre feuille change le nom qui est placé en haut, à droite du tableau.

Avec mes maigres compétences, je suis bloqué. J'en suis à tester deux codes qui ne fonctionnent pas...
Code:
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
If Target.Address = "D1" Then
    Sheets("TCD Heures").PivotTables("TCD heures").PivotFields("salarié").CurrentPage = _
        Sheets("Fiche salarié").Range("D1").Value
End If
End Sub
ou
Code:
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
If Range("D1").Value <> Target.Value Then
    Sheets("TCD Heures").PivotTables("TCD heures").PivotFields("salarié").CurrentPage = _
        Sheets("Fiche salarié").Range("D1").Value
End If

End Sub

L'autre solution, c'est de mettre un bouton à côté, mais, avouez que c'est moins bien...

Merci d'avance.
Phyx
 

phyx

XLDnaute Nouveau
Re : [VBA] liste déroulante et tableau croisé dynamique

Re,
Bon, je me suis planter. Cela fonctionne bien.
La chose à ne pas oublier, c'est de mettre un "On error goto fin" (le goto 0 plante) car, dès que l'on touche à la colonne lié, ça grogne.
Sinon, cela marche si l'on n'oublie pas d'aller cliquer sur une autre cellule...

Phyx
 
Dernière édition:

chris

XLDnaute Barbatruc
Re : [VBA] liste déroulante et tableau croisé dynamique

Bonjour

Le changement valeur dans la liste déroulante n'est pas un évènement.
Il serait peut-être plus simple, si le TCD est juste consulté, de gérer l'évènement activate de la sheet TCD heures pour valoriser la cellule concernée (si elle ne bouge pas de place on peut utiliser la notation de type range("A12")
 

phyx

XLDnaute Nouveau
Re : [VBA] liste déroulante et tableau croisé dynamique

Et bien, le changement de sélection change malgré tout.
Mais, ce n'est pas une simple consultation qui est recherchée... Le but est de récupérer des données (sur une feuille1) par l'intermédiaire d'une "rechercheV" dans une base (dans une feuille "TCD Heures") qui s'auto-actualise, le TCD.

Mais, dans la suite de mon code, la seule chose qui fonctionne ensuite est le changement du nom. J'ai un code suivant qui calcul l'étendue de la base. Mais, bizarrement, le code bloque quand la ligne de code "Range("A5").Select" se met en route...
Et, ce blocage arrive uniquement dans la macro événementielle... car, dans un module normal, cela fonctionne, ce qui est pas cool... Et, dont je ne vois pas la raison...

Pour éclaircir la chose :
Code:
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
Dim i, machaine
i = 0
'On Error GoTo fin
If Range("D1").Value <> Target.Value Then
    Sheets("TCD Heures").PivotTables("TCD heures").PivotFields("salarié").CurrentPage = _
        Sheets("Fiche salarié").Range("D1").Value
        
Range("A1").Select

Sheets("TCD Heures").Select
Range("A5").Select

Do While ActiveCell.Offset(i, 0) <> ""
    i = i + 1
Loop
machaine = "A5:E" & i + 4
Range(machaine).Select
ActiveWorkbook.Names.Add Name:="TCDheures", RefersToLocal:=Range(machaine)

End If
Exit Sub
fin:
End Sub

La sélection en A1 dans la première feuille ne pose aucun problème.
Mais, quelque soit la cellule sélectionnée dans la feuille TCD Heures, un message d'erreur bloque avec le range... "erreur d'exécution 1004".

phyx
 
Dernière édition:

phyx

XLDnaute Nouveau
Re : [VBA] liste déroulante et tableau croisé dynamique

Bonjours le forum,

ça y est, j'ai compris !
je mets une première partie dans le "change selection", et la suite du programme dans l'activate de l'autre feuille "TCD heures".
Et, ça marche.

Bon, le seul iq, c'est que maintenant, cela bloque d'autre macro, qui rentre en conflit, car, le "change sélection" prend le pas sur toute macro que je veux effectué sur la feuille où il est situé.
Merci beaucoup chris, j'ai eu du mal à comprendre ce que tu voulais dire, mais, le faite de revenir après avoir tassé la chose, ça aide : la nuit porte conseil.

Bon, le seul iq, c'est qu'il faut que je fasse cohabiter la macro événementielle (qui n'en est pas un apparemment) de sélection avec la macro de mise à jour des infos qui intervient sur la même feuille...
J'espère qu'il existe une option pouvant stopper le fonctionnement temporaire d'une macro événementielle, sinon, je vois pas d'autre option. Car, la macro de sélection se fait tous les 2-3 clics...

phyx
 

phyx

XLDnaute Nouveau
Re : [VBA] liste déroulante et tableau croisé dynamique

Bonjours le forum,

Et bien, je m'y suis remit et ça marche. J'avais pas bien compris ce que tu disais chris, mais, c'est bon maintenant. L'idée de partitionner la macro en deux est impect...
Une dans le Worksheet_SelectionChange, l'autre dans l'activate du TCD.

Par contre, je me rend comte que la macro "événementielle" Worksheet_SelectionChange bloque le fonctionnement de toutes macros voulant se faire sur cette feuille.
Là, je me demande si il n'y aurait pas une option de désactivation temporaire de cette macro événementielle. Sinon, je vois pas...

Phyx
 

phyx

XLDnaute Nouveau
Re : [VBA] liste déroulante et tableau croisé dynamique

Bonjours le forum,

Et bien, je m'y suis remit et ça marche. J'avais pas bien compris ce que tu disais chris, mais, c'est bon maintenant. L'idée de partitionner la macro en deux est impect...
Une dans le Worksheet_SelectionChange, l'autre dans l'activate du TCD.

Par contre, je me rend comte que la macro "événementielle" Worksheet_SelectionChange bloque le fonctionnement de toutes macros voulant se faire sur cette feuille.
Là, je me demande si il n'y aurait pas une option de désactivation temporaire de cette macro événementielle. Sinon, je vois pas...

PS: désolé pour ces messages à répétition, je pensais que les messages ne fonctionnaient pas, je tombais sur des pages blanches...

Et pour limiter la place, je vais répondre ici, c'est bon, j'ai trouver comment désactiver les macros événementielles :

'GESTION des macro événementielles
' désactive les macro événementielles
'Application.EnableEvents = False
'réactive les macro événementielles
'Application.EnableEvents = True
si cela peut être utile...

phyx
 
Dernière édition:

bcharef

XLDnaute Accro
Re : [VBA] liste déroulante et tableau croisé dynamique

Bonjour phyx & chris,
Bonjour à toutes et à tous.

Le présent sujet m'intéresse en matiére de TCD, et comme, je suis un ignare en matiére de VBA, j'ai le grand plaisir de vous demander de bien vouloir nous joindre votre fichier.

En attente d'une suite, veuillez agréer messieurs mes salutations distinguées.

Bcharef.
 

Discussions similaires

Réponses
1
Affichages
249