Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

TCD en VBA

4 réponses
Avatar
Mirv
Bonjour,

Je me suis servi de l'enregistreur de macro pour creer des TCD.
Mon probleme est que je me sers de cette macro sur differents types de
tableau, dont le nombre de ligne est variable. Or la macro a enregistre
le nombre de lignes du tableau initial, ce qui genere ensuite soit des
erreurs, soit des calculs partiels.

Comment adapter cette macro pour qu'elle s'applique a l'integralite des
lignes ? J'ai essaye de la modifier en definissant des plages avec des
selection.end(xldown)..etc... mais sans succes.

Merci pour votre aide,

4 réponses

Avatar
MichDenis
Bonjour Mirv,

Utilise une plage nommée en employant la fonction Decaler

tu sélectionnes la base de données
-Insertion/Nom/Définir
-Admettons que ta feuille s'appelle Denis et que tu as des données
dans les colonnes A à F
Þnis!$A$1:DECALER(Denis!$F$1;0;0;NBVAL(Denis!$A:$A))

Et tu utilises le nom que tu as donné à ta plage comme source
de données de ton TDC.






"Mirv" a écrit dans le message de groupe de discussion :

Bonjour,

Je me suis servi de l'enregistreur de macro pour creer des TCD.
Mon probleme est que je me sers de cette macro sur differents types de
tableau, dont le nombre de ligne est variable. Or la macro a enregistre
le nombre de lignes du tableau initial, ce qui genere ensuite soit des
erreurs, soit des calculs partiels.

Comment adapter cette macro pour qu'elle s'applique a l'integralite des
lignes ? J'ai essaye de la modifier en definissant des plages avec des
selection.end(xldown)..etc... mais sans succes.

Merci pour votre aide,
Avatar
Mirv
Merci pour ta reponse rapide. Je l'essaie demain matin !

Pour ma gouverne (mes ocmpetences vba sont tres limitees), le fait de
definir un nom de cette facon ne revient-il pas a faire en VBA :

- selectionner la cellule A1
- selection.end(xldown) et (xlright)
- puis insertion/nom/definir ...etc...

Faire ainsi rendrait la macro transferable et copiable sans se
preoccuper de la definition du nom. non ?

Pour info, c'est une macro enregistree dans le classeur "personnel" et
que j'applique a divers types de fichiers, et non dans un classeur
particulier.

Merci encore,



MichDenis wrote:
Bonjour Mirv,

Utilise une plage nommée en employant la fonction Decaler

tu sélectionnes la base de données
-Insertion/Nom/Définir
-Admettons que ta feuille s'appelle Denis et que tu as des données
dans les colonnes A à F
Þnis!$A$1:DECALER(Denis!$F$1;0;0;NBVAL(Denis!$A:$A))

Et tu utilises le nom que tu as donné à ta plage comme source
de données de ton TDC.






"Mirv" a écrit dans le message de groupe de discussion :

Bonjour,

Je me suis servi de l'enregistreur de macro pour creer des TCD.
Mon probleme est que je me sers de cette macro sur differents types de
tableau, dont le nombre de ligne est variable. Or la macro a enregistre
le nombre de lignes du tableau initial, ce qui genere ensuite soit des
erreurs, soit des calculs partiels.

Comment adapter cette macro pour qu'elle s'applique a l'integralite des
lignes ? J'ai essaye de la modifier en definissant des plages avec des
selection.end(xldown)..etc... mais sans succes.

Merci pour votre aide,



Avatar
MichDenis
Pour mettre à jour un TDC, tu as le bouton dans la barre
d'outils (selon la version Excel que tu possèdes). Tu fais
un clic sur ce bouton et le tour est joué. Nul besoin de
reconstituer le TDC à chaque fois !

Le code pour mettre un TDC à jour en utilisant du code :

Tu adaptes le nom de la feuille et l'index ou le nom du pivottable
à mettre à jour
'-------------------------------------
Sub Test()
Dim Pt As PivotTable
With Worksheets("Feuil1")
.PivotTables(1).RefreshTable
End With
End Sub
'-------------------------------------

Si tu veux reconstruire à chaque fois ton TDC, un exemple de code :

'-----------------------------
Sub PivotTable()
Dim Adr As String 'Source
Dim Adr1 As String 'Destination
Dim PT As PivotTable

'Définir où sera copié le pivottable
With Worksheets("Feuil1")
Adr1 = .Name & "!" & .Range("A1").Address
'Supprime l'ancien pivotcache
.Range("A1").CurrentRegion.Delete (xlUp)
End With

With Worksheets("Feuil2")
'Définir où sont les données pour le pivotcache
Adr = .Name & "!" & .Range("A1:B" & _
.Range("B65536").End(xlUp).Row).Address

'Création du PivotTable
Set PT = ActiveWorkbook.PivotCaches.Add _
(SourceType:=xlDatabase, SourceData:=Range(Adr)) _
.CreatePivotTable(TableDestination:=Range(Adr1), _
TableName:="Denis", DefaultVersion:=xlPivotTableVersion10)
With PT
.AddFields RowFields:="Élève"
.PivotFields("résultat").Orientation = xlDataField
End With
End With

End Sub
'-----------------------------



"Mirv" a écrit dans le message de groupe de discussion :

Merci pour ta reponse rapide. Je l'essaie demain matin !

Pour ma gouverne (mes ocmpetences vba sont tres limitees), le fait de
definir un nom de cette facon ne revient-il pas a faire en VBA :

- selectionner la cellule A1
- selection.end(xldown) et (xlright)
- puis insertion/nom/definir ...etc...

Faire ainsi rendrait la macro transferable et copiable sans se
preoccuper de la definition du nom. non ?

Pour info, c'est une macro enregistree dans le classeur "personnel" et
que j'applique a divers types de fichiers, et non dans un classeur
particulier.

Merci encore,



MichDenis wrote:
Bonjour Mirv,

Utilise une plage nommée en employant la fonction Decaler

tu sélectionnes la base de données
-Insertion/Nom/Définir
-Admettons que ta feuille s'appelle Denis et que tu as des données
dans les colonnes A à F
Þnis!$A$1:DECALER(Denis!$F$1;0;0;NBVAL(Denis!$A:$A))

Et tu utilises le nom que tu as donné à ta plage comme source
de données de ton TDC.






"Mirv" a écrit dans le message de groupe de discussion :

Bonjour,

Je me suis servi de l'enregistreur de macro pour creer des TCD.
Mon probleme est que je me sers de cette macro sur differents types de
tableau, dont le nombre de ligne est variable. Or la macro a enregistre
le nombre de lignes du tableau initial, ce qui genere ensuite soit des
erreurs, soit des calculs partiels.

Comment adapter cette macro pour qu'elle s'applique a l'integralite des
lignes ? J'ai essaye de la modifier en definissant des plages avec des
selection.end(xldown)..etc... mais sans succes.

Merci pour votre aide,



Avatar
Mirv
Merci, je suis en excel 2003 et je vois bien ce bouton (le point
d'exclamation rouge). Je pense que cette solution va egalement fonctionner!

un grand merci, bonne soiree,


MichDenis wrote:
Pour mettre à jour un TDC, tu as le bouton dans la barre
d'outils (selon la version Excel que tu possèdes). Tu fais
un clic sur ce bouton et le tour est joué. Nul besoin de
reconstituer le TDC à chaque fois !

Le code pour mettre un TDC à jour en utilisant du code :

Tu adaptes le nom de la feuille et l'index ou le nom du pivottable
à mettre à jour
'-------------------------------------
Sub Test()
Dim Pt As PivotTable
With Worksheets("Feuil1")
.PivotTables(1).RefreshTable
End With
End Sub
'-------------------------------------

Si tu veux reconstruire à chaque fois ton TDC, un exemple de code :

'-----------------------------
Sub PivotTable()
Dim Adr As String 'Source
Dim Adr1 As String 'Destination
Dim PT As PivotTable

'Définir où sera copié le pivottable
With Worksheets("Feuil1")
Adr1 = .Name & "!" & .Range("A1").Address
'Supprime l'ancien pivotcache
.Range("A1").CurrentRegion.Delete (xlUp)
End With

With Worksheets("Feuil2")
'Définir où sont les données pour le pivotcache
Adr = .Name & "!" & .Range("A1:B" & _
.Range("B65536").End(xlUp).Row).Address

'Création du PivotTable
Set PT = ActiveWorkbook.PivotCaches.Add _
(SourceType:=xlDatabase, SourceData:=Range(Adr)) _
.CreatePivotTable(TableDestination:=Range(Adr1), _
TableName:="Denis", DefaultVersion:=xlPivotTableVersion10)
With PT
.AddFields RowFields:="Élève"
.PivotFields("résultat").Orientation = xlDataField
End With
End With

End Sub
'-----------------------------



"Mirv" a écrit dans le message de groupe de discussion :

Merci pour ta reponse rapide. Je l'essaie demain matin !

Pour ma gouverne (mes ocmpetences vba sont tres limitees), le fait de
definir un nom de cette facon ne revient-il pas a faire en VBA :

- selectionner la cellule A1
- selection.end(xldown) et (xlright)
- puis insertion/nom/definir ...etc...

Faire ainsi rendrait la macro transferable et copiable sans se
preoccuper de la definition du nom. non ?

Pour info, c'est une macro enregistree dans le classeur "personnel" et
que j'applique a divers types de fichiers, et non dans un classeur
particulier.

Merci encore,



MichDenis wrote:
Bonjour Mirv,

Utilise une plage nommée en employant la fonction Decaler

tu sélectionnes la base de données
-Insertion/Nom/Définir
-Admettons que ta feuille s'appelle Denis et que tu as des données
dans les colonnes A à F
Þnis!$A$1:DECALER(Denis!$F$1;0;0;NBVAL(Denis!$A:$A))

Et tu utilises le nom que tu as donné à ta plage comme source
de données de ton TDC.






"Mirv" a écrit dans le message de groupe de discussion :

Bonjour,

Je me suis servi de l'enregistreur de macro pour creer des TCD.
Mon probleme est que je me sers de cette macro sur differents types de
tableau, dont le nombre de ligne est variable. Or la macro a enregistre
le nombre de lignes du tableau initial, ce qui genere ensuite soit des
erreurs, soit des calculs partiels.

Comment adapter cette macro pour qu'elle s'applique a l'integralite des
lignes ? J'ai essaye de la modifier en definissant des plages avec des
selection.end(xldown)..etc... mais sans succes.

Merci pour votre aide,