Précédent   Forum des professionnels en informatique > Logiciels > Microsoft Office > Excel > Macros et VBA Excel
Macros et VBA Excel Vos questions relatives aux macros Excel, à l'utilisation de VBA et à l'automatisation de vos classeurs Excel.
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 19/08/2011, 09h25   #1
Invité régulier
 
Inscription : avril 2005
Messages : 25
Détails du profil
Informations forums :
Inscription : avril 2005
Messages : 25
Points : 8
Points : 8
Par défaut MAJ de plusieurs TCD d'un classeur Excel

Bonjour

Je voudrais mettre à jour des tcd en modifiant la plage "source" de données, pour cela j'utilise le code suivant:

Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
 
Sub MajTCD(classeurActif As Workbook)
 
Dim oPvt As Excel.PivotTable
 
nbligne = classeurActif.Worksheets("Source").Range("A65536").End(xlUp).Row
 
Set oPvt = classeurActif.Worksheets("TCD1").PivotTables("Tableau croisé dynamique5")
oPvt.SourceData = "'Source'!R2C1:R" & nbligne & "C87"
Set oPvt = Nothing
Set oPvt = classeurActif.Worksheets("TCD1").PivotTables("Tableau croisé dynamique1")
oPvt.SourceData = "'Source'!R2C1:R" & nbligne & "C87"
Set oPvt = Nothing
Set oPvt = classeurActif.Worksheets("TCD2").PivotTables("Tableau croisé dynamique5")
oPvt.SourceData = "'Source'!R2C1:R" & nbligne & "C87"
Set oPvt = Nothing
 
End Sub

Le problème est que l'utilisateur peut rajouter d'autres TCD dans le classeur... Je cherche donc un code pour mettre à jour tous les TCD du classeur ( meme si il y en a plusieurs par onglet) avec l'aide d'une boucle .. Est ce que c'est possible?


Cordialement
Bluchy est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 19/08/2011, 09h44   #2
Responsable Visual Basic
 
Avatar de bbil
 
Inscription : juin 2003
Messages : 11 773
Détails du profil
Informations personnelles :
Âge : 45
Localisation : France, Ariège (Midi Pyrénées)

Informations forums :
Inscription : juin 2003
Messages : 11 773
Points : 16 849
Points : 16 849
Envoyer un message via Skype™ à bbil
Ton code n'effectue pas cette action pour les 2 TCD de ta feuille TCD1 ?
bbil est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 19/08/2011, 10h19   #3
Invité régulier
 
Inscription : avril 2005
Messages : 25
Détails du profil
Informations forums :
Inscription : avril 2005
Messages : 25
Points : 8
Points : 8
Non justement
Bluchy est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 19/08/2011, 10h23   #4
Responsable Visual Basic
 
Avatar de bbil
 
Inscription : juin 2003
Messages : 11 773
Détails du profil
Informations personnelles :
Âge : 45
Localisation : France, Ariège (Midi Pyrénées)

Informations forums :
Inscription : juin 2003
Messages : 11 773
Points : 16 849
Points : 16 849
Envoyer un message via Skype™ à bbil
Citation:
Envoyé par Bluchy Voir le message
Non justement
à bon il fait quoi alors ? ..., pas de message d'erreur ? il n'y as bien que 2 TCD sur ta feuille TCD1 ?
bbil est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 19/08/2011, 10h31   #5
Invité régulier
 
Inscription : avril 2005
Messages : 25
Détails du profil
Informations forums :
Inscription : avril 2005
Messages : 25
Points : 8
Points : 8
Désolé je me suis peut être mal exprimé, le code que j'ai marqué dans mon premier post fonctionne très bien, le pb c'est que ce fichier est destiné a des utilisateurs qui vont peut être changer nom des onglets, rajouter d'autres tcds...
Je voudrais pouvoir anticiper cela, ne plus faire de MAJ en précisant le nom de l'onglet ainsi que le nom du tcd.
Faire quelque chose de plus "automatique" , qui me liste tous les tcd présents dans mes onglets et me change automatiquement ma source de données dès qu'elle varie.
Bluchy est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 19/08/2011, 10h56   #6
Responsable Visual Basic
 
Avatar de bbil
 
Inscription : juin 2003
Messages : 11 773
Détails du profil
Informations personnelles :
Âge : 45
Localisation : France, Ariège (Midi Pyrénées)

Informations forums :
Inscription : juin 2003
Messages : 11 773
Points : 16 849
Points : 16 849
Envoyer un message via Skype™ à bbil
ok dans ce cas tu peu boucler sur tes feuilles et tes TCD :


Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
Sub MajTCD(classeurActif As Workbook)
 
Dim oPvt As Excel.PivotTable
Dim sh As Worksheet 'Feuille à traite
nbligne = classeurActif.Worksheets("Source").Range("A65536").End(xlUp).Row
For Each sh In classeurActif.Worksheets 'Boucle feuille
  For Each oPvt In sh.PivotTables
    '>>> pour mon de test (j'ai du passer en français et modifier plage) :     oPvt.SourceData = "Source!L1C1:L" & nbligne & "C5"
    oPvt.SourceData =  "'Source'!R2C1:R" & nbligne & "C87"
    Debug.Print "Modifie : " & oPvt.Name ' Pour debug : affiche message dans fenêtre exécution CTRL+G
  Next
 Next
End Sub
bbil est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 19/08/2011, 12h18   #7
Invité régulier
 
Inscription : avril 2005
Messages : 25
Détails du profil
Informations forums :
Inscription : avril 2005
Messages : 25
Points : 8
Points : 8
Merci beaucoup pour ton aide, ca marche très bien
Bluchy est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 16h26.


 
 
 
 
Partenaires

Hébergement Web