Mystere des Tableaux croises dynamiques

N

Nat

Guest
Bonjour le forum,

J'ai 2 macro pour creer 2 tableaux croises dynamiques tres semblables :resultats d'analyse chimique que je compare à des normes ou des critères.

Mon pb: dans un cas cela fonctionne (Resultat_eau_for) et pas dans l'autre (resultat_sol_for).
La différence entre ces tableaux c'est les colonnes de normes (en tete de lignes). Il y une colonne dans le cas resultat_sol qui contient plus de valeurs que pour resultat_eau. Sinon j'ai le meme nombre de ligne.

Quelqu'un a t-il une une idée sur le pourquoi du comment? et d'une facon de resoudre ce pb?

Merci à eux qui regarderont ce pb.

Nat
 

Pièces jointes

  • Tab_Croise_dynamique_forum.zip
    40.9 KB · Affichages: 20
C

Celeda

Guest
Bonjour,

Et bien moi aussi c'est un vrai mystère Nat : je ne comprends rien du tout
quand j'ai essayé les macros celle de eau for marchait et celle de sol for non
j'ai recommencé, fermé les fichiers un après l'autre, recommencé, j'avais toujours
la même erreur dans sol for :
ActiveWorkbook.PivotCaches.Add(SourceType:=xlDatabase, SourceData:= _
"Resultats_Sol!R1C1:R" & NbTlg & "C" & NbTcol).CreatePivotTable TableDestination:="", _
TableName:="Tableau croisé dynamique"

et puis j'ai tout fermé et tout recommencé et maintenant la macro fonctionne très bien
????????????????????????????????????????????????????? Avec ou sans eau for d'ouvert!!!
le TCD se fait tout seul!!!!!!
et pourquoi ???????????????????

Celeda
 
N

Nat

Guest
Bonjour celeda,
Merci d'avoir tester mes macros...
Mais juste une précision.. Tu dis que ca a coincé sur :
ActiveWorkbook.PivotCaches.Add(SourceType:=xlDatabase, SourceData:= _
"Resultats_Sol!R1C1:R" & NbTlg & "C" & NbTcol).CreatePivotTable TableDestination:="", _
TableName:="Tableau croisé dynamique"

Moi ca coince plutot à :

ActiveSheet.PivotTables("Tableau croisé dynamique").AddFields RowFields:= _
Array("SortOrderGrp", "SURGROUPE", "Paramètres", "A", _
"B", "C", "D", "Lim_detection"), ColumnFields:=Array("Secteur", "Echantillon")
With ActiveSheet.PivotTables("Tableau croisé dynamique").PivotFields( _
"Conc_final")
.Orientation = xlDataField
.Caption = "Max Conc_final"
.Function = xlMax
End With

Resultat_sol fonctionne avec 64 lg max...
Resultat _eau fonctionne avec plus de 700 lignes.. Ce sont quasiment les memes fichiers...
Je me suis meme amusée a prendre la macro de eau_for et faire les quelques changements pour l'adapter a sol_for (rempalcement de A, B, C, D par eau_consommatio, ...
Ca n'a rien donné..
Bizarre

je vais continuer a chercher..

Nat
 
C

Celeda

Guest
Re: Mystere des Tableaux croises dynamiques: controle des macros

Bonsoir,

bon alors Nat il nous faut quelqu'un ou quelques uns ou unes pour tester tes macros pour essayer d'avancer.

Moi : test sur XP familial et XP pro

Toi : sur quoi es-tu ?


Celeda
 
N

Nat

Guest
Re: Mystere des Tableaux croises dynamiques: controle des macros

Bon alors sous windows 98 et Excel 2000..
Ca bugue au meme endroit que sous windows 2000 et Excel 98..

Précision: Les 2 fichiers Excel sont exportés depuis Access.Je ne sais pas si ca peut avoir de l'importance...


EN tout cas merci de s'interesser a mon pb.. Je me sens moins seule...

Nat
 
C

Celeda

Guest
BOnsoir,

oui et on se sentirait encore moins seules si on pouvait tester sur d'autres machines.

Je ne pense pas que cela vienne de Access puisque tu te sers des bases de données dans une feuille (mais comme tout est possible .....)

Je replace tes macros pour ceux qui ne peuvent télécharger les fichiers :


celle_là c'est le code de Resultat eau for

Sub Croise_Dynamique_Eau()

If ActiveSheet.Name = "Tableau_Final_Eau" Then
MsgBox "Vous avez déjà exécuté cette macro", vbOKOnly + vbExclamation, "Tête en l'air"
Exit Sub
End If


Application.ScreenUpdating = False
Range("A1").Select
Range(Selection, Selection.End(xlDown)).Select
NbTlg = Selection.Rows.Count
Range(Selection, Selection.End(xlToRight)).Select
NbTcol = Selection.Columns.Count
ActiveWorkbook.PivotCaches.Add(SourceType:=xlDatabase, SourceData:= _
"Resultats_Eau!R1C1:R" & NbTlg & "C" & NbTcol).CreatePivotTable TableDestination:="", _
TableName:="Tableau croisé dynamique"
ActiveSheet.PivotTableWizard TableDestination:=ActiveSheet.Cells(3, 1)
ActiveSheet.Cells(3, 1).Select
ActiveSheet.PivotTables("Tableau croisé dynamique").SmallGrid = False
ActiveSheet.PivotTables("Tableau croisé dynamique").PivotFields("Echantillon") _
.Subtotals = Array(False, False, False, False, False, False, False, False, False, False, _
False, False)
ActiveSheet.PivotTables("Tableau croisé dynamique").PivotFields("Paramètres"). _
Subtotals = Array(False, False, False, False, False, False, False, False, False, False, _
False, False)
ActiveSheet.PivotTables("Tableau croisé dynamique").PivotFields( _
"eau_consommation").Subtotals = Array(False, False, False, False, False, False, False _
, False, False, False, False, False)
ActiveSheet.PivotTables("Tableau croisé dynamique").PivotFields( _
"eau_surf_consi").Subtotals = Array(False, False, False, False, False, False, False, _
False, False, False, False, False)
ActiveSheet.PivotTables("Tableau croisé dynamique").PivotFields("Norme_Calculee"). _
Subtotals = Array(False, False, False, False, False, False, False, False, False, False, _
False, False)
ActiveSheet.PivotTables("Tableau croisé dynamique").PivotFields("Normes"). _
Subtotals = Array(False, False, False, False, False, False, False, False, False, False, _
False, False)
ActiveSheet.PivotTables("Tableau croisé dynamique").PivotFields("Lim_detection_Fin"). _
Subtotals = Array(False, False, False, False, False, False, False, False, False, False, _
False, False)
ActiveSheet.PivotTables("Tableau croisé dynamique").PivotFields("Secteur"). _
Subtotals = Array(False, False, False, False, False, False, False, False, False, False, _
False, False)
ActiveSheet.PivotTables("Tableau croisé dynamique").PivotFields("SURGROUPE"). _
Subtotals = Array(False, False, False, False, False, False, False, False, False, False, _
False, False)
ActiveSheet.PivotTables("Tableau croisé dynamique").PivotFields("SortOrderGrp" _
).Subtotals = Array(False, False, False, False, False, False, False, False, False, False _
, False, False)
ActiveSheet.PivotTables("Tableau croisé dynamique").AddFields RowFields:= _
Array("SortOrderGrp", "SURGROUPE", "Paramètres", "eau_consommation", _
"eau_surf_consi", "Norme_Calculee", "Normes", "Lim_detection_Fin"), ColumnFields:=Array("Secteur", "Echantillon")
With ActiveSheet.PivotTables("Tableau croisé dynamique").PivotFields( _
"Conc_final")
.Orientation = xlDataField
.Caption = "Max Conc_final"
.Function = xlMax
End With
With ActiveSheet.PivotTables("Tableau croisé dynamique")
.ColumnGrand = False
.RowGrand = False
End With

Application.CommandBars("PivotTable").Visible = False
ActiveSheet.Name = "TAC"

End Sub


et celle-là c'est le code de Resultat Sol For

Sub Croise_Dynamique_Sol()
'
'
If ActiveSheet.Name = "Tableau_Final_Sol" Then
MsgBox "Vous avez déjà exécuté cette macro", vbOKOnly + vbExclamation, "Tête en l'air"
Exit Sub
End If


Application.ScreenUpdating = False
Range("A1").Select
Range(Selection, Selection.End(xlDown)).Select
NbTlg = Selection.Rows.Count
Range(Selection, Selection.End(xlToRight)).Select
NbTcol = Selection.Columns.Count
ActiveWorkbook.PivotCaches.Add(SourceType:=xlDatabase, SourceData:= _
"Resultats_Sol!R1C1:R" & NbTlg & "C" & NbTcol).CreatePivotTable TableDestination:="", _
TableName:="Tableau croisé dynamique"
ActiveSheet.PivotTableWizard TableDestination:=ActiveSheet.Cells(3, 1)
ActiveSheet.Cells(3, 1).Select
ActiveSheet.PivotTables("Tableau croisé dynamique").SmallGrid = False
ActiveSheet.PivotTables("Tableau croisé dynamique").PivotFields("Echantillon") _
.Subtotals = Array(False, False, False, False, False, False, False, False, False, False, _
False, False)
ActiveSheet.PivotTables("Tableau croisé dynamique").PivotFields("Paramètres"). _
Subtotals = Array(False, False, False, False, False, False, False, False, False, False, _
False, False)
ActiveSheet.PivotTables("Tableau croisé dynamique").PivotFields( _
"A").Subtotals = Array(False, False, False, False, False, False, False _
, False, False, False, False, False)
ActiveSheet.PivotTables("Tableau croisé dynamique").PivotFields( _
"B").Subtotals = Array(False, False, False, False, False, False, False, _
False, False, False, False, False)
ActiveSheet.PivotTables("Tableau croisé dynamique").PivotFields("C"). _
Subtotals = Array(False, False, False, False, False, False, False, False, False, False, _
False, False)
ActiveSheet.PivotTables("Tableau croisé dynamique").PivotFields("D"). _
Subtotals = Array(False, False, False, False, False, False, False, False, False, False, _
False, False)
ActiveSheet.PivotTables("Tableau croisé dynamique").PivotFields("Lim_detection"). _
Subtotals = Array(False, False, False, False, False, False, False, False, False, False, _
False, False)
ActiveSheet.PivotTables("Tableau croisé dynamique").PivotFields("Secteur"). _
Subtotals = Array(False, False, False, False, False, False, False, False, False, False, _
False, False)
ActiveSheet.PivotTables("Tableau croisé dynamique").PivotFields("SURGROUPE"). _
Subtotals = Array(False, False, False, False, False, False, False, False, False, False, _
False, False)
ActiveSheet.PivotTables("Tableau croisé dynamique").PivotFields("SortOrderGrp" _
).Subtotals = Array(False, False, False, False, False, False, False, False, False, False _
, False, False)
'"SortOrderGrp",
ActiveSheet.PivotTables("Tableau croisé dynamique").AddFields RowFields:= _
Array("SortOrderGrp", "SURGROUPE", "Paramètres", "A", _
"B", "C", "D", "Lim_detection"), ColumnFields:=Array("Secteur", "Echantillon")
With ActiveSheet.PivotTables("Tableau croisé dynamique").PivotFields( _
"Conc_final")
.Orientation = xlDataField
.Caption = "Max Conc_final"
.Function = xlMax
End With
With ActiveSheet.PivotTables("Tableau croisé dynamique")
.ColumnGrand = False
.RowGrand = False
End With

Application.CommandBars("PivotTable").Visible = False
ActiveSheet.Name = "TAC"
End Sub

N'y connaissant rien en macro, je ne peux faire plus Nat, demain je testerai sur window NT excel 2000.

Celeda
 
P

Pat78

Guest
Bonsoir Nat, Celeda,

Deux bonnes nouvelles !
Vous n'êtes pas seules, et les deux TCD se construisent très bien. Aucun problème à l'ouverture, ni même lors de l'exécution des deux macros, soit avec les deux fichiers ouverts ensembles, soit un par un.

Windows XP version familiale.

Patrick.
 
N

Nat

Guest
Merci Pat d'etre avec nous... et particulierement avec mon pb..

Sauf que je ne sais pas si je dois prendre ca comme une bonne nouvelle le fait que ca fonctionne chez vous (celeda et toi) et pas chez moi (W2000) ni chez mon collègue (W98)...

Le pire c'est que le TCD sol fonctionne tres bien avec d'autres données...

Le mystere s'épaissit..

Il faut que je trouve le moyen de faire fonctionner ma macro...
 
D

Dan

Guest
Bonsoir Nat, le forum

Je viens m'incruster dans ce post où d'autres ont déjà répondu mais je viens de faire un petit test sous Excel 200 et Win 98.

Le fichier "Résultat eau for" fonctionne parfaitement.
Quant à l'autre "résultat sol for, il s'arrete sur l'instruction "orientation data field".

Ce que je remarque, c'est que quand tu supprimes toutes les lignes pour lesquelles il n'y a pas de données en colonne C ou que tu n'inclus pas cette colonne (ou une des C, D, E), ton TCD fonctionne parfaitement.
Cela me semble provenir du nombre de données à traiter dans ces colonnes.

Je pense que face à cela, il faudrait que tu réduises ton TCD. Par exemple, essaie de ne pas mettre la colonne A.
Fais un essai, au moment ou ta macro s'arrete, tu appuies sur le bouton "Fin" et tu continue manuellement en supprimant par exemple la colonne A et en ajoutant la rubrique "conc_final".

Sinon, pour ta macro, je pense qu'il ya moyen de la simplifier. Mais là on peut en reparler après avoir solutionner ce pourquoi tu nous écris ici.

Bonne soirée

@+ Dan
 
J

Jocelyn

Guest
Bonjour le Forum,
Bonjour Nat, Celeda, Pat78, Dan,

Voila je viens de voir votre post moi j'ais teste sur Windows NT et excel 2000 et "resultat_sol_for" plante a la ligne suivante : .Orientation = xlDataField.

Alors la tout de suite j'arrive pas a voir pourquoi.

A+
Jocelyn
 
J

jmps

Guest
Bonjour Nat, Celeda, Pat78, Dan, Jocelyn,

Je ne voudrais pas épaissir le mystère encore plus mais j'ai testé sur XL97/Win98.
Les deux macros plantent au même endroit :
ActiveWorkbook.PivotCaches.Add(SourceType:=xlDatabase, ActiveWorkbook.PivotCaches.Add(SourceType:=xlDatabase, SourceData:= _
"Resultats_Sol!R1C1:R" & NbTlg & "C" & NbTcol).CreatePivotTable TableDestination:="", _
TableName:="Tableau croisé dynamique"

Avec un message "Erreur d'exécution 438. Propriété ou méthode non gérée par cet objet."

Si je retape la ligne ActiveWorkbook.PivotCaches. la liste déroulante ne propose pas Add. J'ai seulement Application - Count - Creator - Item - Parent. Ce qui m'étonne un peu. Voire beaucoup.

J'espère que cela vous éclairera un peu. Si vous avez besoin d'autres tests sur XL97 n'hésitez pas.

Bon courage.

José
 
N

Nat

Guest
Bonjour a tous ceux qui se sont interessé a mon pb,

Désolé de ne pas avoir répondu plus tot, mais étant au québec je suis décalée de la France et je viens d'arriver au travail...
Bon je suis quelque part contente de voir que ca plante aussi sur d'autres ordi...

Cette macro a été faite par un enregistrement de macro. Donc il y a surement moyen de l'améliorer.. (Je debute dans les macros, donc comme on dit en québécois ..je patente)

Sinon c'est assez étonnant mais cette macro fonctionne avec d'autres données bcp plus nombreuses...

Dan, je regarde ce dont tu parles et je redonne des nouvelles

En tout cas merci à toutes et à tous

Nat
 
N

Nat

Guest
Rebonjour,

Bon alors maintenant ma macro fonctionne.
1) Les changements que j'ai apporté: les colonnes sortOrdergroup et Surgroupe etaient vides pour certaines lignes alors que ces 2 colonnes se retrouvent les premieres du TCD. JE les ai remplis.

2) les données provenaient d'une base de donnée Access, et les colonnes A, B,C,D (nom de la colonne pas adresse de la colonne) etaient definies comme texte. Je les ai defini comme texte.
Et ca fonctionne.

Si on regarde ca d'un point de vue rationnel, ca n'aurait pas du changer grand chose.. car dans la macro eau_for les 2 premieres colonnes du TCD comportent des cellules vides et une colonne correspondant a la colone C est en texte...

MAis présentement ca fonctionne.. et vu que je n'ai plus d'idee.. j'abandonne et je croise les doigts pour que ca continue de fonctionner..
 
D

Dan

Guest
Bonsoir Nat,

Et bien je suis bien content que cela fonctionne.
Pour la question qui concerne les colonnes en format Texte, je m'étais assuré de cela avant de te répondre pour les colonnes A,B,C et D, mais apparemment cela ne changeait rien au pb.
Mais il est vrai qu'il vaut mieux que tes colonnes soient définies en nombres si elle comporte des chiffres. Le TCD devrait mieux comprendre cela.

Bon ben puisque cela fonctionne, n'en parlons plus.

Bonne soirée et à une prochaine fois.

@+ Dan
 

Statistiques des forums

Discussions
314 160
Messages
2 106 528
Membres
109 614
dernier inscrit
sebastienpopo