Ceci est une page optimisée pour les mobiles. Cliquez sur ce texte pour afficher la vraie page.

Problème de fonctions

  • Initiateur de la discussion Initiateur de la discussion Poussin
  • Date de début Date de début

Boostez vos compétences Excel avec notre communauté !

Rejoignez Excel Downloads, le rendez-vous des passionnés où l'entraide fait la force. Apprenez, échangez, progressez – et tout ça gratuitement ! 👉 Inscrivez-vous maintenant !

Poussin

XLDnaute Occasionnel
Bonjour à tous j'ai voulu créer un bouton qui permet à la fois de créer un premier tableau et à partir de ce même tableau créer le TCD correspondant. Le tableau se crée parfaitement bien par contre il ne veut pas créer le TCD. Il me met Sub ou fonction non défini en me surlignant le premier PivotFields. Ma question est de savoir si je dois séparer ces 2 fonctions ou alors faire un appel de la 2ème dans le première.

Code:
Sub CreerTableauAvecCalcul()

Dim xf2dlg As Long, xf2lg As Long, xeff As Long, xca As Long, xeffca As Double, xpersl As Long, xchext As Long, xperslchext As Double

Worksheets("Feuil3").Rows("1:65536").Delete

Worksheets("Feuil2").Activate
  xf2dlg = Range("A65536").End(xlUp).Row
  For xf2lg = 2 To xf2dlg
    Worksheets("Feuil2").Range("A" & xf2lg).Copy Worksheets("Feuil3").Range("A" & xf2lg - 1)
    Worksheets("Feuil2").Range("B" & xf2lg).Copy Worksheets("Feuil3").Range("B" & xf2lg - 1)
    xeff = Range("C" & xf2lg): xca = Range("D" & xf2lg): xpersl = Range("E" & xf2lg): xchext = Range("F" & xf2lg)
    xeffca = xeff / xca: xperslchext = xpersl / xchext
    With Sheets("Feuil3")
      .Range("C" & xf2lg - 1) = xeffca
      .Range("D" & xf2lg - 1) = xperslchext
    End With
    With Worksheets("Feuil3").Range("C" & xf2lg - 1)
      .NumberFormat = "0.00%"
    End With
    With Sheets("Feuil3").Range("D" & xf21g - 1)
      .NumberFormat = "0.00%"
    End With
  Next xf2lg
Worksheets("Feuil3").Activate
ActiveSheet.ListObjects.Add(xlSrcRange, Range("$A$1:$D$" & Range("A65536").End(xlUp).Row), , xlNo).Name = _
           "Tableau2"
Range("Tableau2[[#Headers],[Colonne1]]").Select
ActiveCell.FormulaR1C1 = "Date"
Range("Tableau2[[#Headers],[Colonne2]]").Select
ActiveCell.FormulaR1C1 = "Nom"
Range("Tableau2[[#Headers],[Colonne3]]").Select
ActiveCell.FormulaR1C1 = "Effectifs"
Range("Tableau2[[#Headers],[Colonne4]]").Select
ActiveCell.FormulaR1C1 = "CA"

ThisWorkbook.PivotCaches.Add(SourceType:=xlDatabase, SourceData:= _
    [Feuil3!A1].CurrentRegion.Address(, , xlR1C1, True)).CreatePivotTable _
    TableDestination:="Feuil4!R1C1", _
    TableName:="Mon TCD"



With Feuil4.PivotTables("Mon TCD")

  
    With PivotFields("Nom")
        .Orientation = xlPageField
        .Position = 1
    End With
    
    .AddDataField ActiveSheet. _
    PivotTables("Tableau croisé dynamique1").PivotFields("Effectifs"), _
        "Somme des effectifs", xlSum
End With
 
End Sub

Je vous remercie par avance pour votre aide.
 
Re : Problème de fonctions

Merci pour ta réponse c'est à n'y rien comprendre maintenant il revient sur la ligne

Code:
With Worksheets("Feuil3").Range("D" & xf21g - 1)

Il met erreur 1004 alors que cela marchait très bien auparavant. Merci d'avance pour ton explication.
 
Re : Problème de fonctions

Bonjour à tous,

xf21g est différent de xf2lg

Ta variable est définie en xf2lg et tu mets, certaines fois xf21g (L minuscule versus 1)

A + à tous
 
Dernière édition:
Re : Problème de fonctions

Je te remercie pour ton aide et je m'excuse pour ses erreurs stupides. Je reviens vers toi car j'ai encore un problèm epour la création de mon TCD. En effet je voudrais supprimer le TCD à chaque fois que je lance ma macro malheureusement la ligne
Code:
Selection.Delete Shift:=xlUp
pose problème pour la compilation.

Code:
Sub CreerTableauAvecCalcul()

Dim xf2dlg As Long, xf2lg As Long, xeff As Long, xca As Long, xeffca As Double, xpersl As Long, xchext As Long, xperslchext As Double

Worksheets("Feuil3").Rows("1:65536").Delete

Worksheets("Feuil2").Activate
  xf2dlg = Range("A65536").End(xlUp).Row
  For xf2lg = 2 To xf2dlg
    Worksheets("Feuil2").Range("A" & xf2lg).Copy Worksheets("Feuil3").Range("A" & xf2lg - 1)
    Worksheets("Feuil2").Range("B" & xf2lg).Copy Worksheets("Feuil3").Range("B" & xf2lg - 1)
    xeff = Range("C" & xf2lg): xca = Range("D" & xf2lg): xpersl = Range("E" & xf2lg): xchext = Range("F" & xf2lg)
    xeffca = xeff / xca: xperslchext = xpersl / xchext
    With Sheets("Feuil3")
      .Range("C" & xf2lg - 1) = xeffca
      .Range("D" & xf2lg - 1) = xperslchext
    End With
    With Worksheets("Feuil3").Range("C" & xf2lg - 1)
      .NumberFormat = "0.00%"
    End With
    With Worksheets("Feuil3").Range("D" & xf2lg - 1)
      .NumberFormat = "0.00%"
    End With
  Next xf2lg
Worksheets("Feuil3").Activate
ActiveSheet.ListObjects.Add(xlSrcRange, Range("$A$1:$D$" & Range("A65536").End(xlUp).Row), , xlNo).Name = _
           "Tableau2"
Range("Tableau2[[#Headers],[Colonne1]]").Select
ActiveCell.FormulaR1C1 = "Date"
Range("Tableau2[[#Headers],[Colonne2]]").Select
ActiveCell.FormulaR1C1 = "Nom"
Range("Tableau2[[#Headers],[Colonne3]]").Select
ActiveCell.FormulaR1C1 = "Effectifs"
Range("Tableau2[[#Headers],[Colonne4]]").Select
ActiveCell.FormulaR1C1 = "CA"

Worksheets("Feuil4").Activate
If ActiveSheet.PivotTables.Count = 1 Then
        ActiveSheet.PivotTables(1).PivotSelect "", _
            xlDataAndLabel
        Selection.Delete Shift:=xlUp
End If


ThisWorkbook.PivotCaches.Add(SourceType:=xlDatabase, SourceData:= _
    [Feuil3!A1].CurrentRegion.Address(, , xlR1C1, True)).CreatePivotTable _
    TableDestination:="Feuil4!R1C1", _
    TableName:="Mon TCD"
    
ActiveSheet.PivotTables("Mon TCD").AddFields
    With ActiveSheet.PivotTables("Mon TCD").PivotFields("Date")
        .Orientation = xlPageField
        .Position = 1
    End With

    With ActiveSheet.PivotTables("Mon TCD").PivotFields("Nom")
        .Orientation = xlPageField
        .Position = 1
    End With
    ActiveSheet.PivotTables("Mon TCD").AddDataField ActiveSheet.PivotTables("Mon TCD"). _
        PivotFields("Effectifs"), "Moyenne de Effectifs/CA", xlAverage

End Sub

Je te remercie encore énormément pour le temps que tu m'accordes.
 
Re : Problème de fonctions

Bonjour à tous,

Tu n'as aucun "Select" avant le "Selection.Delete Shift:=xlUp". Il est normal que tu aies une erreur.

Pendant que nous y sommes :

Code:
Range("Tableau2[[#Headers],[Colonne1]]").Select
ActiveCell.FormulaR1C1 = "Date"
Pourrait être

Code:
Range("Tableau2[[#Headers],[Colonne1]]") = "Date"

Ici la valeur "Date" n'est pas une formule. Le .Value est implicite quand rien n'est précisé.

Un petit gif de mDF :


A + à tous
 

Pièces jointes

  • selectselectionwi2.gif
    3.8 KB · Affichages: 137
  • selectselectionwi2.gif
    3.8 KB · Affichages: 137
Dernière édition:
Re : Problème de fonctions

Bonjour à tous,

Tu ne sélectionnes pas toute la feuille 4...

Code:
Worksheets("Feuil4").Activate
If ActiveSheet.PivotTables.Count = 1 Then Cells.Delete
A + à tous

Édition : J'ai édité mon message précédent pour réduire ton code....
 
Re : Problème de fonctions

Merci pour ta réponse tout fonctionne merveilleusement pour l'instant je n'ai plus qu'à continuer ...
D'ailleurs je voudrais améliorer ce code :

Code:
ActiveSheet.PivotTables("Mon TCD").AddDataField ActiveSheet.PivotTables("Mon TCD"). _
        PivotFields("Effectifs"), "Moyenne de Effectifs/CA", xlAverage
     With ActiveSheet.PivotTables("Mon TCD").PivotFields("Moyenne de Effectifs/CA")
        .NumberFormat = "0,00%"
    End With

En effet je voudrais savoir s'il serai tpossible de définir directement le format que je souhaite directement dans la première ligne.

Merci d'avance
 
Re : Problème de fonctions

Bonjour à tous,

Peut être comme ceci :

VB:
With ActiveSheet.PivotTables("Mon TCD")
        .AddDataField ActiveSheet.PivotTables("Mon TCD"). _
                      PivotFields("Effectifs"), "Moyenne de Effectifs/CA", xlAverage
        .PivotFields("Moyenne de Effectifs/CA").NumberFormat = "0,00%"
    End With

A + à tous
 
Re : Problème de fonctions

Encore merci pour te montrer concrètement où je veux aller voici mon fichier test. Je t'explique ma problématique dans l'onglet 5. Mon TCD se crée parfaitement je cherche maintenant à imposer les champs afin de créer justement dans l'onglet 5 un fichier PDF avec des tableaux récapitulatifs des sociétés qui sera sauvegardé dans un dossier.

Je te remercie d'avance pour tout le temps que tu m'accordes, j'apprécie réellement cela me permet de m'améliorer et de pouvoir envisager de continuer à programmer avec Excel encore merci 🙂
 

Pièces jointes

- Navigue sans publicité
- Accède à Cléa, notre assistante IA experte Excel... et pas que...
- Profite de fonctionnalités exclusives
Ton soutien permet à Excel Downloads de rester 100% gratuit et de continuer à rassembler les passionnés d'Excel.
Je deviens Supporter XLD

Discussions similaires

Réponses
5
Affichages
612
Les cookies sont requis pour utiliser ce site. Vous devez les accepter pour continuer à utiliser le site. En savoir plus…