OVH Cloud OVH Cloud

Tableau croisé dynamique

6 réponses
Avatar
Philippe Muniesa
Bonjour à tous,

J'ai écris une procédure pour créer un Tableau croisé Dynamique.

Jusque la tout va bien, le tableau est créé ...

Lorsqu'on double clic sur une cellule du tableau, on en obtient le détail
dans une feuille créée par excel à cet effet.

Je voudrais maitriser la création de cette feuille, et notamment lui donner
un nom plutot que FEUILXX.

J'ai bien vu que VBA utilise la méthode .Showdetail pour lancer
l'extraction, mais je ne trouve pas de doc pour faire ce que je veux.

Si l'un d'entre vous a une idée géniale .. je suis preneur.

MErci

Philippe

6 réponses

Avatar
LSteph
Bonsoir Philippe,

'***dans module1*****
Public test As Boolean
Public myn As String

'****dans thisworkbook***

Private Sub Workbook_SheetActivate(ByVal Sh As Object)
On Error GoTo errh
If test Then ActiveSheet.Name = myn
test = False
Exit Sub
errh:
MsgBox ("Nom déjà utilisé, désolé")
test = False
End Sub



''****dans le code de feuille contenant le tcd******

Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, _
Cancel As Boolean)

On Error GoTo errh
If Not IsError(Target.LocationInTable) Then
On Error Resume Next
test = True
myn = Cells(Target.Row, 1).Value
Selection.ShowDetail
End If
Exit Sub
errh:
test = False
End Sub



'lSteph


"Philippe Muniesa" a écrit dans le message de news:
41fd13ea$0$10465$
Bonjour à tous,

J'ai écris une procédure pour créer un Tableau croisé Dynamique.

Jusque la tout va bien, le tableau est créé ...

Lorsqu'on double clic sur une cellule du tableau, on en obtient le détail
dans une feuille créée par excel à cet effet.

Je voudrais maitriser la création de cette feuille, et notamment lui
donner
un nom plutot que FEUILXX.

J'ai bien vu que VBA utilise la méthode .Showdetail pour lancer
l'extraction, mais je ne trouve pas de doc pour faire ce que je veux.

Si l'un d'entre vous a une idée géniale .. je suis preneur.

MErci

Philippe




Avatar
LSteph
(suite)....j'ai omis cette précision, cet exemple suppose
que le tcd contient des noms en colonne1 pour chaque élément mais on peut
adapter
par exemple à la place de myn Îlls(Target.Row, 1).Value mettre :

myn = InputBox("le nom: ")

'lSteph


"Philippe Muniesa" a écrit dans le message de news:
41fd13ea$0$10465$
Bonjour à tous,

J'ai écris une procédure pour créer un Tableau croisé Dynamique.

Jusque la tout va bien, le tableau est créé ...

Lorsqu'on double clic sur une cellule du tableau, on en obtient le détail
dans une feuille créée par excel à cet effet.

Je voudrais maitriser la création de cette feuille, et notamment lui
donner
un nom plutot que FEUILXX.

J'ai bien vu que VBA utilise la méthode .Showdetail pour lancer
l'extraction, mais je ne trouve pas de doc pour faire ce que je veux.

Si l'un d'entre vous a une idée géniale .. je suis preneur.

MErci

Philippe




Avatar
Philippe Muniesa
Merci,

Je vais essayer ça tout à l'heure ( je sors de la douche :-)))

Si je comprends bien,

Lors de la création de la feuille, tu la renomme via l'interception de
l'évenement SheetActivate, puis tu test le nom de la feuille avec
l'evenement beforedoubleclic ?

Philippe

"LSteph" a écrit dans le message de
news:
(suite)....j'ai omis cette précision, cet exemple suppose
que le tcd contient des noms en colonne1 pour chaque élément mais on peut
adapter
par exemple à la place de myn Îlls(Target.Row, 1).Value mettre :

myn = InputBox("le nom: ")

'lSteph


"Philippe Muniesa" a écrit dans le message de news:
41fd13ea$0$10465$
Bonjour à tous,

J'ai écris une procédure pour créer un Tableau croisé Dynamique.

Jusque la tout va bien, le tableau est créé ...

Lorsqu'on double clic sur une cellule du tableau, on en obtient le
détail


dans une feuille créée par excel à cet effet.

Je voudrais maitriser la création de cette feuille, et notamment lui
donner
un nom plutot que FEUILXX.

J'ai bien vu que VBA utilise la méthode .Showdetail pour lancer
l'extraction, mais je ne trouve pas de doc pour faire ce que je veux.

Si l'un d'entre vous a une idée géniale .. je suis preneur.

MErci

Philippe








Avatar
Philippe Muniesa
Re:

J'ai un problème avec cette procédure.

- J'ai bien mis les variables en public
- Mais si Test prend bien la valeur True dans le module de la feuille,
il repasse à faux par la suite.

J'ai essayé plusieurs solution .. ça passe pas, et je ne comprend pas
pourquoi.

Merci de vos conseils éclairés.

Philippe

"LSteph" a écrit dans le message de
news:
(suite)....j'ai omis cette précision, cet exemple suppose
que le tcd contient des noms en colonne1 pour chaque élément mais on peut
adapter
par exemple à la place de myn Îlls(Target.Row, 1).Value mettre :

myn = InputBox("le nom: ")

'lSteph


"Philippe Muniesa" a écrit dans le message de news:
41fd13ea$0$10465$
Bonjour à tous,

J'ai écris une procédure pour créer un Tableau croisé Dynamique.

Jusque la tout va bien, le tableau est créé ...

Lorsqu'on double clic sur une cellule du tableau, on en obtient le
détail


dans une feuille créée par excel à cet effet.

Je voudrais maitriser la création de cette feuille, et notamment lui
donner
un nom plutot que FEUILXX.

J'ai bien vu que VBA utilise la méthode .Showdetail pour lancer
l'extraction, mais je ne trouve pas de doc pour faire ce que je veux.

Si l'un d'entre vous a une idée géniale .. je suis preneur.

MErci

Philippe








Avatar
LSteph
Bonjour Philippe,

- J'ai bien mis les variables en public
Elles y sont déjà et dans un module standard j'indique module1 par ex .


- Mais si Test prend bien la valeur True dans le module de la feuille,
il repasse à faux par la suite.
C'est fait exprès pour que l'évènement ne se déclenche que s'il y a eu

un doubleclic sur une valeur de TCD

J'ai essayé plusieurs solutions


Essaie en copiant simplement le code
dans le gestionnaire de projet (Ctrl+r)
tu trouvera l'icône des modules désignés (dblclick pour afficher module)
sauf pour la déclaration de variables Public qui va dans un module standard.

Explication du code:

'***dans module1*****
'déclaration des variables

Public test As Boolean 'sera vrai si on vient de dblcliquer dans tcd
Public myn As String 'stockera le nom
'****dans thisworkbook***

Private Sub Workbook_SheetActivate(ByVal Sh As Object)
On Error GoTo errh ' si err va à gestion d'err
If test Then ActiveSheet.Name = myn
'si vrai l'onglet prend le nom contenu dans myn
test = False
'on remet à faux
Exit Sub
errh:
'si le nom utilisé déclenche une err on affiche un message
MsgBox ("Nom déjà utilisé, désolé")
'et on remet test à false
test = False
End Sub



''****dans le code de feuille contenant le tcd******

Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, _
Cancel As Boolean)

On Error GoTo errh ' si err va à gestion d'err

If Not IsError(Target.LocationInTable) Then
'on teste si le target du dblclic est bien dans un tcd
'très important:
On Error Resume Next
'on sait qu'il y aura erreur sur l'appel à showdétail
' mais qui se fera qd même alors on passera à l'instruction suivante
test = True
'on met test à vrai
myn = Cells(Target.Row, 1).Value
'on va chercher la valeur dans colonne1 de la ligne du target dblcliqué
'mis dans la variable myn il sera utilisé comme nom d'onglet
Selection.ShowDetail
'on lance le showdétail qui va les ajouter dans une feuille
'et ainsi déclencher l'évènement Sheetactivate du module thisworkbook
End If
Exit Sub
errh:
test = False
End Sub


"Philippe Muniesa" a écrit dans le message de news:
41fdf1a3$0$19419$
Re:

J'ai un problème avec cette procédure.

- J'ai bien mis les variables en public
- Mais si Test prend bien la valeur True dans le module de la feuille,
il repasse à faux par la suite.

J'ai essayé plusieurs solution .. ça passe pas, et je ne comprend pas
pourquoi.

Merci de vos conseils éclairés.

Philippe

"LSteph" a écrit dans le message de
news:
(suite)....j'ai omis cette précision, cet exemple suppose
que le tcd contient des noms en colonne1 pour chaque élément mais on peut
adapter
par exemple à la place de myn Îlls(Target.Row, 1).Value mettre :

myn = InputBox("le nom: ")

'lSteph


"Philippe Muniesa" a écrit dans le message de news:
41fd13ea$0$10465$
Bonjour à tous,

J'ai écris une procédure pour créer un Tableau croisé Dynamique.

Jusque la tout va bien, le tableau est créé ...

Lorsqu'on double clic sur une cellule du tableau, on en obtient le
détail


dans une feuille créée par excel à cet effet.

Je voudrais maitriser la création de cette feuille, et notamment lui
donner
un nom plutot que FEUILXX.

J'ai bien vu que VBA utilise la méthode .Showdetail pour lancer
l'extraction, mais je ne trouve pas de doc pour faire ce que je veux.

Si l'un d'entre vous a une idée géniale .. je suis preneur.

MErci

Philippe












Avatar
Philippe Muniesa
Ok, ça marche...

En fait, je ne sais pas pourquoi, mais j'ai réinitialisé ma machine, et ça
fonctionne correctement maintenant.

En fait, j'ai un peu adapté ton code.

MERCI POUR TON AIDE .....

Philippe

Dans Workbook_sheetBeforedoubleclick (ça évirte de mettre du code dans la
feuille et de gérer des erreurs VBA dans le cas ou j'extrait la feuille du
classeur)

" si le double clic part depuis la feuille qui contient le TCD
''evenement sur ~Tcd_Cpte_Jx_Mois
If ActiveSheet.Name = "~Tcd_Cpte_Jx_Mois" Then
'si pas d'appel depuis TCD, pasTCD
On Error GoTo PasTCD
'test si dblclick depuis une cellule du tcd
If Not IsError(Target.LocationInTable) Then
'si oui et si erreur sur supp feuille >>> suite
On Error GoTo ErrSupSheet
'Donne à la variable public la valeur True
testTCD = True

Application.DisplayAlerts = False
'supprime la feuille détail du TCD
Sheets("Ext_TCD_jx").Delete
Application.DisplayAlerts = True
Else
PasTCD:
'Donne à la variable public la valeur false
testTCD = False
On Error GoTo 0
End If
ErrSupSheet:
On Error Resume Next
'reinitialise gest err
On Error GoTo 0
'donne à la varialble public Myn le nom de la feuille qui récupère le
détail du TCD
myn = "Ext_TCD_jx"
End If


A la crétion de la feuille détail du TCD

Private Sub Workbook_SheetActivate(ByVal Sh As Object)
'pour la gestion de la feuille detail des tcd
Application.EnableEvents = False
Application.ScreenUpdating = False
Si Myn est non nulle et test à true, alors renome la feuille
If myn <> "" And testTCD = True Then
ActiveSheet.Name = myn
myn = ""
'routine de présentation du détail du TCD
ajuste_col_ext_tcd
End If
Application.EnableEvents = True
Application.ScreenUpdating = True
End Sub


"LSteph" a écrit dans le message de
news:enFu%
Bonjour Philippe,

- J'ai bien mis les variables en public
Elles y sont déjà et dans un module standard j'indique module1 par ex .


- Mais si Test prend bien la valeur True dans le module de la
feuille,


il repasse à faux par la suite.
C'est fait exprès pour que l'évènement ne se déclenche que s'il y a eu

un doubleclic sur une valeur de TCD

J'ai essayé plusieurs solutions


Essaie en copiant simplement le code
dans le gestionnaire de projet (Ctrl+r)
tu trouvera l'icône des modules désignés (dblclick pour afficher module)
sauf pour la déclaration de variables Public qui va dans un module
standard.


Explication du code:

'***dans module1*****
'déclaration des variables

Public test As Boolean 'sera vrai si on vient de dblcliquer dans tcd
Public myn As String 'stockera le nom
'****dans thisworkbook***

Private Sub Workbook_SheetActivate(ByVal Sh As Object)
On Error GoTo errh ' si err va à gestion d'err
If test Then ActiveSheet.Name = myn
'si vrai l'onglet prend le nom contenu dans myn
test = False
'on remet à faux
Exit Sub
errh:
'si le nom utilisé déclenche une err on affiche un message
MsgBox ("Nom déjà utilisé, désolé")
'et on remet test à false
test = False
End Sub



''****dans le code de feuille contenant le tcd******

Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, _
Cancel As Boolean)

On Error GoTo errh ' si err va à gestion d'err

If Not IsError(Target.LocationInTable) Then
'on teste si le target du dblclic est bien dans un tcd
'très important:
On Error Resume Next
'on sait qu'il y aura erreur sur l'appel à showdétail
' mais qui se fera qd même alors on passera à l'instruction suivante
test = True
'on met test à vrai
myn = Cells(Target.Row, 1).Value
'on va chercher la valeur dans colonne1 de la ligne du target dblcliqué
'mis dans la variable myn il sera utilisé comme nom d'onglet
Selection.ShowDetail
'on lance le showdétail qui va les ajouter dans une feuille
'et ainsi déclencher l'évènement Sheetactivate du module thisworkbook
End If
Exit Sub
errh:
test = False
End Sub


"Philippe Muniesa" a écrit dans le message de news:
41fdf1a3$0$19419$
Re:

J'ai un problème avec cette procédure.

- J'ai bien mis les variables en public
- Mais si Test prend bien la valeur True dans le module de la
feuille,


il repasse à faux par la suite.

J'ai essayé plusieurs solution .. ça passe pas, et je ne comprend pas
pourquoi.

Merci de vos conseils éclairés.

Philippe

"LSteph" a écrit dans le message de
news:
(suite)....j'ai omis cette précision, cet exemple suppose
que le tcd contient des noms en colonne1 pour chaque élément mais on
peut



adapter
par exemple à la place de myn Îlls(Target.Row, 1).Value mettre :

myn = InputBox("le nom: ")

'lSteph


"Philippe Muniesa" a écrit dans le message de news:
41fd13ea$0$10465$
Bonjour à tous,

J'ai écris une procédure pour créer un Tableau croisé Dynamique.

Jusque la tout va bien, le tableau est créé ...

Lorsqu'on double clic sur une cellule du tableau, on en obtient le
détail


dans une feuille créée par excel à cet effet.

Je voudrais maitriser la création de cette feuille, et notamment lui
donner
un nom plutot que FEUILXX.

J'ai bien vu que VBA utilise la méthode .Showdetail pour lancer
l'extraction, mais je ne trouve pas de doc pour faire ce que je veux.

Si l'un d'entre vous a une idée géniale .. je suis preneur.

MErci

Philippe