Forum |  HardWare.fr | News | Articles | PC | Prix | S'identifier | S'inscrire | Aide | Shop Recherche
518 connectés 

  FORUM HardWare.fr
  Programmation
  VB/VBA/VBS

  Selection de valeurs d'un champ TCD fonctionne sur 2007 mais pas 2010

 



 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

Selection de valeurs d'un champ TCD fonctionne sur 2007 mais pas 2010

n°2246577
yanounou91
Posté le 19-12-2014 à 19:11:06  profilanswer
 

Bonjour,
 
J'ai créé un TCD sur VBA 2003 (qui fonctionne egalement sur VBA 2007). Mais lors du code de la condition (sélection) de valeurs sur un champ de tableau croisé dynamique, il y a une erreur "incompatibilité de type" lors de l'execution de la macro sur VBA 2010 [b](ligne code 131 et 132)

Code :
  1. . J'ai joint le code ci-dessous.
  2. Pourriez vous me dire, SVP, pourquoi cette partie de code ne fonctionne pas sur VBA 2010 alors qu'il n'y a aucun probleme sur les versions 2007 et 2003 ?
  3. En vous remerciant.
  4. [cpp]Sub FFonctionnement()
  5. '
  6. ' Macro enregistrée le 15/01/2013 par b276573
  7. '
  8. '
  9.     'Sheets("intéresst" ).Select
  10.     'ActiveWindow.SelectedSheets.Visible = False
  11.     'And sht.Name <> "nom onglet" à ajouter si on veut laisser un autre onglet egalement
  12.  
  13.    Dim sht As Object
  14.    For Each sht In ActiveWorkbook.Worksheets
  15.    If sht.Name <> "Extraction H - frais fonct" Then sht.Visible = False
  16.    Next sht
  17.    Application.DisplayAlerts = False
  18.    Worksheets("Extraction H - frais fonct" ).Name = "Base"
  19.  
  20.  
  21.     Worksheets("Base" ).Activate
  22.     ActiveWorkbook.PivotCaches.Add(SourceType:=xlDatabase, SourceData:= _
  23.         "'Base'!R1C1:R65000C22" ).CreatePivotTable TableDestination:="", TableName:= _
  24.         "Tableau croisé dynamique1", DefaultVersion:=xlPivotTableVersion10
  25.     ActiveSheet.PivotTableWizard TableDestination:=ActiveSheet.Cells(3, 1)
  26.     ActiveSheet.Cells(3, 1).Select
  27.     ActiveSheet.PivotTables("Tableau croisé dynamique1" ).AddFields RowFields:= _
  28.         Array("Service Herakles", "centre de frais", "Données" )
  29.            
  30.     With ActiveSheet.PivotTables("Tableau croisé dynamique1" ).PivotFields( _
  31.         "Solde Réalise 2012" )
  32.         .Orientation = xlDataField
  33.         .Caption = "Réalisé 2012"
  34.         .Position = 1
  35.         .Function = xlSum
  36.         .NumberFormat = "#,##0"
  37.     End With
  38.     With ActiveSheet.PivotTables("Tableau croisé dynamique1" ).PivotFields( _
  39.         "Solde Réalisé" )
  40.         .Orientation = xlDataField
  41.         .Caption = "Réalisé 2013"
  42.         .Position = 2
  43.         .Function = xlSum
  44.         .NumberFormat = "#,##0"
  45.     End With
  46.     With ActiveSheet.PivotTables("Tableau croisé dynamique1" ).PivotFields( _
  47.         "ENGAGE" )
  48.         .Orientation = xlDataField
  49.         .Caption = "Engagé"
  50.         .Position = 3
  51.         .Function = xlSum
  52.         .NumberFormat = "#,##0"
  53.     End With
  54.     With ActiveSheet.PivotTables("Tableau croisé dynamique1" ).PivotFields("Actu3 2012" )
  55.         .Orientation = xlDataField
  56.         .Caption = "Actu 2012"
  57.         .Position = 4
  58.         .Function = xlSum
  59.         .NumberFormat = "#,##0"
  60.     End With
  61.        With ActiveSheet.PivotTables("Tableau croisé dynamique1" ).PivotFields("Notif 2013" )
  62.         .Orientation = xlDataField
  63.         .Caption = " Budget 2013"
  64.         .Position = 5
  65.         .Function = xlSum
  66.         .NumberFormat = "#,##0"
  67.     End With
  68.     With ActiveSheet.PivotTables("Tableau croisé dynamique1" ).DataPivotField
  69.         .Orientation = xlColumnField
  70.         .Position = 1
  71.     End With
  72.    
  73.     With ActiveSheet.PivotTables("Tableau croisé dynamique1" ).PivotFields("Etablissement" ): .Orientation = xlPageField: .Position = 1: End With
  74.     With ActiveSheet.PivotTables("Tableau croisé dynamique1" ).PivotFields("Secteur Herakles" ): .Orientation = xlPageField: .Position = 2: End With
  75.     With ActiveSheet.PivotTables("Tableau croisé dynamique1" ).PivotFields("poste" ): .Orientation = xlPageField: .Position = 3: End With
  76.     With ActiveSheet.PivotTables("Tableau croisé dynamique1" ).PivotFields("lib poste" ): .Orientation = xlPageField: .Position = 4: End With
  77.     With ActiveSheet.PivotTables("Tableau croisé dynamique1" ).PivotFields("Sous-section / Centre de frais" ): .Orientation = xlPageField: .Position = 5: End With
  78.     With ActiveSheet.PivotTables("Tableau croisé dynamique1" ).PivotFields("Type de poste" ): .Orientation = xlPageField: .Position = 6: End With
  79.     With ActiveSheet.PivotTables("Tableau croisé dynamique1" ).PivotFields("direction Herakles" ): .Orientation = xlPageField: .Position = 7: End With
  80.     ActiveWorkbook.ShowPivotTableFieldList = False
  81.    
  82.     ActiveWorkbook.ShowPivotTableFieldList = True
  83.     ActiveWorkbook.ShowPivotTableFieldList = False
  84.     Columns("H:H" ).ColumnWidth = 20.14
  85.     Rows("10:10" ).RowHeight = 27.75
  86.     'Range("H10" ) = " Engagé N non " & Chr(10) & "soldé à date"
  87.     'Range("H10" ).Select
  88.     'With Selection
  89.         '.HorizontalAlignment = xlGeneral
  90.         '.VerticalAlignment = xlBottom
  91.         '.WrapText = True
  92.         '.Orientation = 0
  93.         '.AddIndent = False
  94.         '.IndentLevel = 0
  95.         '.ShrinkToFit = False
  96.         '.ReadingOrder = xlContext
  97.         '.MergeCells = False
  98.     'End With
  99.     ActiveSheet.PivotTables("Tableau croisé dynamique1" ).CalculatedFields.Add _
  100.         "Engagé + réel", "='Solde Réalisé' +'ENGAGE'", True
  101.     ActiveSheet.PivotTables("Tableau croisé dynamique1" ).PivotFields("Engagé + réel" ). _
  102.         Orientation = xlDataField
  103.     ActiveSheet.PivotTables("Tableau croisé dynamique1" ).DisplayErrorString = True
  104.     With ActiveSheet.PivotTables("Tableau croisé dynamique1" ).PivotFields( _
  105.         "Somme de Engagé + réel" )
  106.         .NumberFormat = "#,##0"
  107.     End With
  108.     ActiveSheet.PivotTables("Tableau croisé dynamique1" ).DataPivotField.PivotItems( _
  109.         "Somme de Engagé + réel" ).Caption = "Engagé + réalisé"
  110.    
  111.    
  112.    
  113.     ActiveSheet.PivotTables("Tableau croisé dynamique1" ).CalculatedFields.Add _
  114.         "Avancement", "='Solde Réalisé' /'Notif 2013'", True
  115.     ActiveSheet.PivotTables("Tableau croisé dynamique1" ).PivotFields("Avancement" ). _
  116.         Orientation = xlDataField
  117.     ActiveSheet.PivotTables("Tableau croisé dynamique1" ).DisplayErrorString = True
  118.     Range("I12" ).Select
  119.     With ActiveSheet.PivotTables("Tableau croisé dynamique1" ).PivotFields( _
  120.         "Somme de Avancement" )
  121.         .NumberFormat = "0%"
  122.     End With
  123.     ActiveSheet.PivotTables("Tableau croisé dynamique1" ).DataPivotField.PivotItems( _
  124.         "Somme de Avancement" ).Caption = "Avancement %"
  125.  
  126.     Columns("A:A" ).ColumnWidth = 35
  127.    
  128.     Dim AB As PivotItem
  129. For Each AB In ActiveSheet.PivotTables("Tableau croisé dynamique1" ).PivotFields("Service Herakles" ).PivotItems
  130. If (AB.Name <> "(vide)" ) Then
  131. With ActiveSheet.PivotTables("Tableau croisé dynamique1" ).PivotFields( _
  132. "Service Herakles" ).PivotItems(AB.Name).Visible = True
  133. End With
  134. Else:
  135. With ActiveSheet.PivotTables("Tableau croisé dynamique1" ).PivotFields( _
  136. "Service Herakles" )
  137. .PivotItems(AB.Name).Visible = False
  138. End With
  139. End If
  140. Next AB


 
 
Cordialement.
 
 
Yannick


Message édité par yanounou91 le 19-12-2014 à 19:11:47
mood
Publicité
Posté le 19-12-2014 à 19:11:06  profilanswer
 

n°2246942
Marc L
Posté le 26-12-2014 à 12:50:22  profilanswer
 

 
           Bonjour, bonjour !
 
           Il n'y a rien dans les lignes indiquées provoquant une telle erreur …
           Tu t'es certainement trompé dans les numéros de lignes car déjà l'une d'entre-elles est vide ! :sarcastic:  
           Contrôle dans le code affiché le n° de la ligne déclenchant l'erreur par rapport à la ligne surlignée dans le VBE …
 
           Les TCD ont effectivement évolués dans la version 2010 tout comme dans la version 2013.
           Voir donc chez Microsoft la documentation relative aux nouveautés de la version …
 

n°2246965
kiki29
Posté le 26-12-2014 à 20:55:51  profilanswer
 

Salut, même avant ça : par exemple sous 2003 PivotItems(i).Value = (vide) est devenu sous 2007 (blank)

n°2246974
yanounou91
Posté le 27-12-2014 à 10:27:07  profilanswer
 

Bonjour,
 
Je vous remercie de m'avoir répondu.
 
Et effectivement, les lignes qui resortent en erreur sont les 137 et 138. Sinon, dans mon post original j'ai oublié de dire que j'avais testé le code avec "Blank" au lieu de "vide" sans que cela résolve le problème.
 
Aussi, ce code fonctionne tres bien sur VAB 2007 et VBA 2003, c'est seulement sur VBA 2010 qu'il y a probleme.
 
Marc L, j'ai essayé de cherché, les différences sur la codification des TCD entre VBA 2007 et 2010 mais je n'ai rien trouvé concernant les filtres sur les valeurs de champs d'un TCD. Et je pense que c'est la que ca pose probleme. Mais merci pour la piste au sujet de la doc Microsoft, il ne me reste qu'à trouver ça.
 
Cordialement.
 
 
Yannick

n°2246979
Marc L
Posté le 27-12-2014 à 12:15:25  profilanswer
 

 
           Vu la ligne n°135 For Each AB in Activesheet.PivotTables … .PivotItems, pourquoi en lignes 137-139
           répéter tout le chemin alors que la variable objet AB pointe déjà sur un élément de la collection PivotItems ?!
           Du genre AB.Visible = True … Sinon à quoi bon utiliser For Each !
 
           Tout le bloc des lignes n°136 à 145 peut se réduire en une seule ligne : AB.Visible = AB.Name <> "(vide)"
 
           Sinon insérer juste entre les lignes 135 & 136 une ligne Debug.Print AB.Name permettant de visualiser dans la fenêtre VBE
           Exécution (Ctrl + G) le nom de chacun des éléments et lors d'une erreur, vérifier le dernier de la liste, le B-A-BA du débogage …
 

n°2246980
yanounou91
Posté le 27-12-2014 à 12:36:30  profilanswer
 

Je vous remercie pour la réponse.
 
En simplifiant peut être que VBA 2010 fera fonctionner le code. Les versions précédentes étaient plus indulgentes. Des que je retourne au boulot et retrouve mon va 2010, je testerai la solution. A la base je recrivais la ligne de code pour lui dire où aller chercher la valeur "vide". Je veux dire dans quel champ aller filtrer la valeur vide.
 
Cordialement.

n°2246981
Marc L
Posté le 27-12-2014 à 12:55:32  profilanswer
 

 
           Vu que ton problème est au cours sur un autre forum, cas évident de cross-posting sauvage peu apprécié sur les forums,
           je te laisse continuer sur l'autre forum …
 

n°2246983
yanounou91
Posté le 27-12-2014 à 15:45:17  profilanswer
 

Une solution sur ce forum pourrait être mieux comprise. Je comprends ta remarque. Mais je te promets qu'il arrive souvent.que pour un même problème, une réponse soit mieux comprise qu'une autre par les débutants. Parfois en cherchant sur un forum on ne parviens pas à adapter la réponse à notre cas alors qu'une autre réponse sera plus adaptable.  
 
Je te remercie pour tes réponses en tout cas.
 
Cordialement

n°2246990
Marc L
Posté le 27-12-2014 à 19:13:48  profilanswer
 

 
           Même si les lignes n°137 à 139 ne sont pas propres - à comparer avec les lignes n°141 à 144 - il semblerait qu'il s'agisse d'un bug,
           voie vers laquelle se tourne l'autre forum. Donc aucun intérêt de continuer en double ici …


Message édité par Marc L le 27-12-2014 à 23:11:19

Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  VB/VBA/VBS

  Selection de valeurs d'un champ TCD fonctionne sur 2007 mais pas 2010

 

Sujets relatifs
[Résolu]Excel 2010 - remplacer chaine de caractère dans un fichierGerer le random avec plusieurs valeurs (Urgent)
Lire un packet DNS (un champ de long. variable) dans une structure ?Faire apparaitre les valeurs de la liste d'un combo/text box directeme
Séléction et transfert de données d'un UserForm à un autre[VBA-Excel] Copier-coller sélection à partir d'une recherche
[KSH] Opération sur valeurs hexadécimalesUne sélection de cellule en fonction de la position d'un bouton..
[VBA] [Excel 2010] Retourner un tableau de tableaux dynamiques[VB/VBA/VBS] Sélection d'une partie des graphiques d'une feuille
Plus de sujets relatifs à : Selection de valeurs d'un champ TCD fonctionne sur 2007 mais pas 2010


Copyright © 1997-2018 Hardware.fr SARL (Signaler un contenu illicite) / Groupe LDLC / Shop HFR