Bonjour,
Je viens faire appel à vous car cela fait maintenant quelques heures que je planche sur un problème assez métaphysique à mes yeux.
Voilà la situation, j'ai "appris" tout seul tout ce que je pouvais du VBA en une semaine dans le cadre d'un stage et j'en suis à ma troisième grosse macro
Dans mes précédentes macro je créais des tableaux croisés dynamiques de nombreuses fois et cela ne m'a pas posé problème
Mais pour cette macro j'ai cet horrible message d'erreur qui survient quoi que je fasse en voulant créer un pivottable, la syntaxe en elle même fonctionne sur n'importe quel classeur sauf celui que je veux....
J'ai vérifié pleins de fois, j'ai fais pas mal de test, ré enregistrer des créations de TCD qui ne fonctionnent pas par la suite en exécutant ect....
Au départ je lance une macro qui permet de construire une page, que l'utilisateur doit remplir et clicker sur un bouton qui lance la macro problématique
voici son code
Sub Lancer_Macro()
'initialisation
Application.ScreenUpdating = False
Dim classeur As Workbook, classeur_externe As Workbook
Dim BDD1 As Worksheet, BDD2 As Worksheet, comp_annee As Worksheet
Dim i As Integer, ligne As Long, colonne As Long
Set classeur = ActiveWorkbook
classeur.Activate
'ajout des feuilles
i = 0
Application.DisplayAlerts = False
For Each WS In classeur.Sheets
If (WS.Name = "BDD N-1" ) Then
Sheets("BDD N-1" ).Delete
Else
If (WS.Name = "BDD N" ) Then
Sheets("BDD N" ).Delete
Else
If (WS.Name = "BDD" ) Then
Sheets("BDD" ).Delete
Else
If (WS.Name = "comp annee" ) Then
Sheets("comp annee" ).Select
efface
Set comp_annee = WS
i = i Or &H1
End If
End If
End If
End If
Next
Application.DisplayAlerts = True
If ((i And &H1) = 0) Then
Set comp_annee = Sheets.Add(After:=Sheets(Sheets.Count))
comp_annee.Name = "comp_annee"
End If
'ouverture des fichiers, import/export, fermeture
classeur.Activate
Sheets("Feuille principale" ).Select
On Error GoTo traiter_erreur
Set classeur_externe = Application.Workbooks.Open(Range("B2" ).Value & "\" & Range("B3" ).Value)
classeur_externe.Sheets("BDD" ).Copy After:=classeur.Sheets("Feuille principale" )
Set BDD1 = classeur.Sheets("BDD" )
BDD1.Name = "BDD N-1"
classeur_externe.Close
If (classeur.Sheets("BDD N-1" ).Range("F1" ).Value = "Groupe" ) Then
BDD1.Range("F:F" ).Delete Shift:=xlToLeft
End If
If (classeur.Sheets("BDD N-1" ).Range("H1" ).Value = "Mois" ) Then
BDD1.Range("H:H" ).Delete Shift:=xlToLeft
End If
If (classeur.Sheets("BDD N-1" ).Range("H1" ).Value = "Jour" ) Then
BDD1.Range("H:H" ).Delete Shift:=xlToLeft
End If
classeur.Activate
Sheets("Feuille principale" ).Select
On Error GoTo traiter_erreur
Set classeur_externe = Application.Workbooks.Open(Range("B2" ).Value & "\" & Range("B4" ).Value)
classeur_externe.Sheets("BDD" ).Copy After:=classeur.Sheets("BDD N-1" )
Set BDD2 = classeur.Sheets("BDD" )
BDD2.Name = "BDD N"
classeur_externe.Close
If (classeur.Sheets("BDD N-1" ).Range("F1" ).Value = "Groupe" ) Then
BDD2.Range("F:F" ).Delete Shift:=xlToLeft
End If
If (classeur.Sheets("BDD N-1" ).Range("H1" ).Value = "Mois" ) Then
BDD2.Range("H:H" ).Delete Shift:=xlToLeft
End If
If (classeur.Sheets("BDD N-1" ).Range("H1" ).Value = "Jour" ) Then
BDD2.Range("H:H" ).Delete Shift:=xlToLeft
End If
'concaténation des données dans une unique feuille
BDD2.Range("A2:" & BDD2.Range("A2" ).End(xlDown).End(xlToRight).Address).Select
Selection.Copy
BDD1.Select
BDD1.Range("A1" ).End(xlDown).Offset(1, 0).Select
BDD1.Paste
Application.DisplayAlerts = False
BDD2.Delete
Application.DisplayAlerts = True
BDD1.Name = "BDD"
'creation tcd comp annee
classeur.Activate
Sheets("BDD" ).Select
ligne = BDD1.UsedRange.Rows.Count
colonne = BDD1.UsedRange.Columns.Count
Sheets("comp_annee" ).Select
LE PROBLEME EST ICI
classeur.PivotCaches.Create(SourceType:=xlDatabase, SourceData:= _
"BDD!R1C1:R2C10", Version:=xlPivotTableVersion12).CreatePivotTable _
TableDestination:="comp_annee!R1C1", TableName:="TCD_comp_annee", _
DefaultVersion:=xlPivotTableVersion12
le programme se bloque sur la ligne de pivotcaches.create
il affiche l'erreur d'execution 5: Argument ou appel de procédure incorrect
j'ai mis un champ de donné restreint pour les test
les feuilles citées existent, j'ai testé divers formes de nom dans le cas où ça soit ça qui bloque
cette forme est celle enregistrée par la macro, qui fonctionne n'importe ou, sauf sur ce classeur...
Cells(1, 1).Select
ActiveWorkbook.ShowPivotTableFieldList = True
'fin si tout se passe bien
Application.ScreenUpdating = True
Exit Sub
'gestion des erreurs
traiter_erreur:
If (Err.Number = 1004) Then
MsgBox ("chemin incorrecte ou fichier innexistant" )
Err.Clear
Else
If (Err <> 0) Then
MsgBox (Err.Description)
End If
End If
Application.ScreenUpdating = True
End Sub
voilà, je suis novice et je suis convaincu que la plupart des choses écrites vous écorcheront les yeux ^^ alors j'ai enfilé mon armure vous pourrez me frapper comme vous le souhaitez
Je vous remercie d'avance pour vos réponses.
Message édité par Ijatsu le 28-05-2010 à 10:26:27