TCD et VBA actualisation automatique

S

Stéphane79

Guest
Bonjour à tous,

J'essaie de faire s'actualiser un TCD automatiquement mais je n'y arrive pas !
Pourriez-vous me dire ce qui cloche dans ce que j'ai écrit ?

Merci pour vos conseils précieux !
Stéphane79

Sub Actualisation_TCD()

Application.ScreenUpdating = False

Dim age(4) As String
Dim rep(5) As String
Dim i As Integer


base = InputBox('Nom de la base utilisée ?', , 'ExBaseTCD.xls')

age(0) = 'PARIS'
age(1) = 'LYON'
age(2) = 'MARSEILLE'
age(3) = '(Tous)'


For i = 0 To age(4)
Windows(base).Activate
Sheets('TCD').Select
ActiveSheet.PivotTables('Tableau croisé dynamique1').PivotFields('Agence').CurrentPage = age ()

'Masque les lignes vident qui se crée en changeant les champs (paramètres/champs/dispositions/insérrer ou masquer une ligne
ActiveSheet.PivotTables('Tableau croisé dynamique1').PivotFields('Article').LayoutBlankLine = False
ActiveSheet.PivotTables('Tableau croisé dynamique1').PivotCache.Refresh

Range('A65000').End(xlUp).CurrentRegion.Copy

Sheets.Add

Range('A8').PasteSpecial Paste:=xlValues ', Operation:=xlNone, SkipBlanks:= _
False, Transpose:=False

Selection.PasteSpecial Paste:=xlFormats ', Operation:=xlNone, SkipBlanks:= _
False, Transpose:=False

Next i

End Sub


Merci d'avoir jeté un oeil
Stéphane79
[file name=ExBaseTCD_20051120214708.zip size=10929]http://www.excel-downloads.com/components/com_simpleboard/uploaded/files/ExBaseTCD_20051120214708.zip[/file]
 

Pièces jointes

  • ExBaseTCD_20051120214708.zip
    10.7 KB · Affichages: 55

Hervé

XLDnaute Barbatruc
Bonsoir stéphane

J'ai pas télécharger ton fichier, ca moi et les TCD ca fait plus que 2.

Par contre en voyant ton code, une ligne me choc : for i=0 to age(4)

j'aurais écrit : for i=0 to ubound(age)


c'est tout ce que je peux faire pour toi désolé.

salut
 

Hervé

XLDnaute Barbatruc
re

j'ai un peu mieux regarder ton code, essaye comme ceci :

Dim age(1 To 4) As String
Dim rep(5) As String
Dim i As Integer


base = InputBox('Nom de la base utilisée ?', , 'ExBaseTCD.xls')

age(1) = 'PARIS' '''''''''''''''''
age(2) = 'LYON' '''''''''''''''''
age(3) = 'MARSEILLE' '''''''''''''''''
age(4) = '(Tous)' '''''''''''''''''


For i = 1 To UBound(age)

Windows(base).Activate
Sheets('TCD').Select
ActiveSheet.PivotTables('Tableau croisé dynamique1').PivotFields('Agence').CurrentPage = age(i)

'reste inchangé

salut
 

Dan

XLDnaute Barbatruc
Bonsoir,

je ne comprends pas pourquoi tu veux faire cela pour actualiser le TCD. Peux tu expliquer ce que tu veux faire exactement.

Une première proposition dans mon intervention sur ce fil : Lien supprimé en date du 05/10/2005 à 15:54.


;)
 
S

Stéphane79

Guest
Bonsoir Dan, Hervé, Le Forum,

En fait le mot actualisation n'est pas bien choisi. L'idée, c'est de sélectionner les différentes agences puis de copier les résultats de chacunes sur un autre feuillet et ce les unes après les autres.

Dan, je viens de voir ton fil sur l'actualisation TCD, cela m'intéresse également.

Hervé, un grand merci cela fonctionne parfaitement !
Par contre, pourriez-vous m'expliquer exactement la fonction Ubound ? J'ai vu dans l'aide qu'il existait aussi une fonction Lbound.

Une dernière question, probablement + délicate. Ici dans ma macro j'ai nommé les agences. Comment faire, si je ne les nomme pas pour les sélectionner de la même manière les unes après les autres ?

Merci pour votre aide !
Stéphane79
 

Dan

XLDnaute Barbatruc
Re:TCD et VBA sauvegarde automatique

Re Stephane,

J'ai renommé le fil en sauvegarde automatique.

Merci de ta précision car de fait je ne voyais pas dans ta macro une actualisation mais plutôt une sauvegarde de certaines situations. D'où la question de savoir ce que tu cherchais à faire.

Mis à part cela voici ton code simplifié en y ajoutant ce que Hervé te propose :

Code:
Sub Actualisation_TCD()
Dim age(1 To 4) As String
Dim rep(5) As String
Dim i As Integer
Application.ScreenUpdating = False
    base = InputBox('Nom de la base utilisée ?', , 'ExBaseTCD.xls')
    age(0) = 'PARIS'
    age(1) = 'LYON'
    age(2) = 'MARSEILLE'
    age(3) = '(Tous)'
    For i = 1 To UBound(age)
    Windows(base).Activate
    Sheets('TCD').Select
    With ActiveSheet.PivotTables('Tableau croisé dynamique1')
        .PivotFields('Agence').CurrentPage = age(i)
        .PivotFields('Article').LayoutBlankLine = False
        .PivotCache.Refresh
        .PivotSelect '', xlDataAndLabel
    End with
    Sheets.Add
    Range('A8').PasteSpecial Paste:=xlValues ', Operation:=xlNone, SkipBlanks:= _False, Transpose:=False
    Selection.PasteSpecial Paste:=xlFormats ', Operation:=xlNone, SkipBlanks:= _
        False, Transpose:=False
    Next i
    Application.ScreenUpdating = True
End Sub

Je pense que tu devrais aussi déclarer la variable Base
donc Dim Base as String

Ubound est utilisé pour reconnaitre le plus grand indice de ton tableau. donc ici c'est 'age(4)' d'après ta déclaration Dim.

Reste à regarder ton pb pour les agences/

;)

Edition : Rajouter après End With --> selection.copy

;)

Message édité par: Dan, à: 20/11/2005 23:40
 

Hervé

XLDnaute Barbatruc
Re:TCD et VBA sauvegarde automatique

re stéphane, salut dan

Merci dan pour ton travail de synthèse.

stéphane, ci-dessous un code pour la gestion des agences, j'ai du tricher un peu pour le 'tous', car apparement cet item ne fait pas partie de la collection pivotitem :eek:

Ou alors j'ai pas trouvé la syntaxe, ce qui est fort possible.

Sub Actualisation_TCD()
Dim j As Integer
Dim agence As String
Dim base

Application.ScreenUpdating =
False

base = InputBox('Nom de la base utilisée ?', , 'ExBaseTCD.xls')
   
With ActiveSheet.PivotTables('Tableau croisé dynamique1')
   
For j = 1 To .PivotFields('Agence').PivotItems.Count + 1
       
If j = .PivotFields('Agence').PivotItems.Count + 1 Then
            agence = '(Tous)'
       
Else
            agence = CStr(.PivotFields('Agence').PivotItems(j))
       
End If
       
        .PivotFields('Agence').CurrentPage = agence
       
'Masque les lignes vident qui se crée en changeant les champs (paramètres/champs/dispositions/insérrer ou masquer une ligne
        .PivotFields('Article').LayoutBlankLine =
False
        .PivotCache.Refresh
        Range('A65000').End(xlUp).CurrentRegion.Copy
   
        Sheets.Add
        ActiveSheet.Name = agence
        Range('A8').PasteSpecial Paste:=xlValues
', Operation:=xlNone, SkipBlanks:= _
        False, Transpose:=False
       
        Selection.PasteSpecial Paste:=xlFormats
', Operation:=xlNone, SkipBlanks:= _
        False, Transpose:=False
        Windows(base).Activate
        Sheets('TCD').Select
   
Next j
End With
Application.ScreenUpdating =
True
End Sub


salut

PS : j'ai rajouté une ligne, pour que les nouvelles feuilles prennent le nom des agences, pense à les supprimer avant de relancer le code (fait toi une macro pour ca).
 

Dan

XLDnaute Barbatruc
Re:TCD et VBA sauvegarde automatique

Re,

Compte tenu qu'il s'agit de sélectionner le TCD pour le copier dans une nouvelle feuille on peut remplacer :
Code:
Range('A65000').End(xlUp).CurrentRegion.Copy
par
Code:
.PivotSelect '', xlDataAndLabel
Selection.Copy

;)

Message édité par: Dan, à: 20/11/2005 23:37
 
S

Stéphane79

Guest
Re:TCD et VBA sauvegarde automatique

Bonsoir Hervé,

C'est tout simplement formidable, ça fonctionne parfaitement !
Meci beaucoup !
J'avoue qu'en terme de synthaxe j'ai du mal à suivre ...
Je ne sais pas si j'y arriverais seul un jour !!!

Peux-tu me dire à quoi correspond la ligne suivante :
agence = CStr(.PivotFields('Agence').PivotItems(j))

Merci encore à tous et bonne nuit !
Stéphane79
 

Hervé

XLDnaute Barbatruc
Re:TCD et VBA sauvegarde automatique

re stéphane

Pivotitems est l'ensemble des éléments se trouvant dans un champs

chaque élément (sauf 'tous') est répertorié par un index (1,2,3...)

PivotItems.Count=nombre d'éléments dans le champs agence

il suffit donc de faire une boucle dessus :

For j = 1 To .PivotFields('Agence').PivotItems.Count + 1

et ensuite les transformer en string (cstr()) car currentpage n'accepte que des strings.

voilà

salut
 

Discussions similaires

Réponses
3
Affichages
550
Réponses
17
Affichages
1 K

Statistiques des forums

Discussions
311 735
Messages
2 082 023
Membres
101 873
dernier inscrit
excellllll