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

  FORUM HardWare.fr
  Programmation
  VB/VBA/VBS

  Macro Excel: Pivottables: Argument ou Appel de procédure incorrect

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

Macro Excel: Pivottables: Argument ou Appel de procédure incorrect

n°1996494
Ijatsu
Posté le 27-05-2010 à 16:08:33  profilanswer
 

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 :p
Je vous remercie d'avance pour vos réponses. :)


Message édité par Ijatsu le 28-05-2010 à 10:26:27
mood
Publicité
Posté le 27-05-2010 à 16:08:33  profilanswer
 

n°1996735
SuppotDeSa​Tante
Aka dje69r
Posté le 28-05-2010 à 12:22:28  profilanswer
 

Hello
 
Je ne comprends pas le "Create" mais j'ai fait le test sous 2003... Peut etre ca...
D'ailleurs, c'est bien de preciser sur quelle version tu bosses... Car la faut regarde le code.
 
bref, ca chez moi ca marche :

Citation :

classeur.PivotCaches.Add(SourceType:=xlDatabase, SourceData:= _  
        "BDD!R1C1:R2C10", Version:=xlPivotTableVersion12).CreatePivotTable _  
        TableDestination:="comp_annee!R1C1", TableName:="TCD_comp_annee", _  
        DefaultVersion:=xlPivotTableVersion12


Message édité par SuppotDeSaTante le 28-05-2010 à 12:23:52

---------------
Soyez malin, louez entre voisins !
n°1996879
Ijatsu
Posté le 28-05-2010 à 16:24:28  profilanswer
 

Navré j'avais oublié le plus important, je travaille sous 2007, j'utilise Create car c'est ce que me propose l'enregistreur de macro.
 
je viens d'essayer avec ADD, ça fonctionne! j'ai réessayé ensuite avec create et ça fonctionne aussi, alors qu'avant avoir essayé avec ADD ça ne fonctionnait pas alors que je n'ai rien changé... Oo
 
En tout cas merci beaucoup ^^ dorénavant j'utiliserais le ADD, il a l'air moins capricieux même si ça n'a pas l'air différent

n°1996902
SuppotDeSa​Tante
Aka dje69r
Posté le 28-05-2010 à 17:17:30  profilanswer
 

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

  Macro Excel: Pivottables: Argument ou Appel de procédure incorrect

 

Sujets relatifs
Macro Excel VBA IEMatrice vba excel
probleme transfert excel-> acessouverture fichier Excel protégé
Checkbox sous Excel (Simple requête )passage d'une macro d'excel 2007 a 2003
[Excel] Lien hypertexte lançant une macro. 
Plus de sujets relatifs à : Macro Excel: Pivottables: Argument ou Appel de procédure incorrect


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR