gratifiant > microsoft.* > microsoft.excel

NoyeuxJoel (14/03/2019, 22h58)
Bonjour à tous !

Quelqu'un saurait comment faire une macro pour copier les données d'un TCD san
les entêtes pour les coller dans une autre feuille sans les fameux "(vide)"

Je bute sur 2 problèmes, la plage de données des TCD qui peut s'étire
variablement sur pas mal de lignes selon l'évolution de la source des données e
le collage qui doit se faire à chaque fois sur la 1ere ligne vide de la nouvell
feuille.

En gros je veux lancer cette macro via un bouton. Je fais un filtre sur mon TC
puis je clique le bouton, il me copie toutes les données à partir de A2 (autr
feuille déjà existante avec entêtes pré-remplies), je fais un filtre différent
je clique le bouton puis il colle à la suite etc etc

Trop chaud pour moi mais je sais qu'il y a des crack ici donc si vous pouve
m'aider je vous paye un coup si vous passez par l'Alsace ;)
MichD (15/03/2019, 01h12)
Le 2019-03-14 à 16:58, NoyeuxJoel a écrit :
[..]
> je clique le bouton puis il colle à la suite etc etc
> Trop chaud pour moi mais je sais qu'il y a des crack ici donc si vous pouvez
> m'aider je vous paye un coup si vous passez par l'Alsace ;)


Bonjour,

Voici un exemple d'une procédure pour copier toutes les données de tous
les TDC sans l'étiquette de ligne ou colonnes vers une autre feuille.

Pour les cellules vides du tdc, un clic droit sur le TDC,
options du tableau croisé dynamique
Onglet : Disposition et mise en forme
Case : Format, tu indiques ce que tu veux inscrire
dans les cellules vides

En VBA, c'est cette ligne de code qui fait le travail:
..PivotTables(A).NullString = "0"

'------------------------------------------
Sub test()
Dim DerLig As Long, Nb As Long, A As Long
Dim T As PivotTable, Rg As Range

'Feuil1 = endroit où sont les TDC
With Feuil1 ' Worksheets("Feuil1")
'Nombre de TDC dans la feuille
Nb = .PivotTables.Count
'pour boucler sur tous les TDC de la feuille
For A = 1 To Nb
'Mettre des 0 dans les cellules vides du TDC
.PivotTables(A).NullString = "0"
'Détermine la plage de cellules occupée seulement
'par les données sans les étiquettes de colonnes
'ou de lignes
Set Rg = .PivotTables(A).DataBodyRange

'Endroit où seront copiées les données
With Worksheets("Feuil2")
'Si la feuil2 est totalement vide, la ligne suivante
'Provoque une erreur d'où On Error resume next
On Error Resume Next
'Trouve la dernière ligne vide dans la feuil2
DerLig = .Cells.Find("*", LookIn:=xlFormulas, _
SearchOrder:=xlByRows, SearchDirection:=xlPrevious).Row

'Trouve la dernière ligne vide dans la feuil2
If Err <> 0 Then
DerLig = 1
Err = 0
Else
'Si tu veux une ligne vide entre les 2 tableaux,
DerLig = DerLig + 2
End If
'La copie elle-même
Rg.Copy .Range("A" & DerLig)

End With
Next
End With
End Sub
'------------------------------------------

MichD
Discussions similaires