VBA formule sur une plage

Bonjour à tous,

Suite à un autre post, je souhaiterai voir évoluer une formule en fonction de la longueur d'un tableau croisé,

Ci-joint le fichier test,

Merci d'avance,

Cordialement,

9test.xlsm (225.79 Ko)

Bonsoir a tous,

une petite aide pour ce bout de code ?

Merci d'avance

Cordialement

Bonsoir massari59264,

Merci d'éviter les up dans la mêle journée SVP

Nous sommes tous bénévoles, beaucoup sont en vacances alors merci d'être patient !

A+

Bonjour,
Un début de réponse viable !?
Cdlt.

Option Explicit

Private Sub Worksheet_PivotTableUpdate(ByVal Target As PivotTable)
Dim rngData As Range, lCol As Long, lRow As Long
    Set rngData = Me.PivotTables(1).TableRange1
    'Me.Rows(9).ClearContents
    With rngData
        lCol = .Columns.Count    'Grand Total
        lRow = .Rows.Count      'id.
    End With
End Sub

Bonjour à tous,

Désolé Bruno45 pour le up, je serais vigilant à ne plus recommencer cette pratique.

Merci pour votre retour Jean Eric, ce que j'en comprends c'est que vous avez utilisé l'évènement PivotTableUpdate, que vous avez declarer en variable le TCD, en commentaire la ligne

'Me.Rows(9).ClearContents

permettrait d’effacer la ligne 9, cependant ce serait la ligne 9 mais à partir de la colonne E (en D j'ai le mot Calcul à ne pas supprimer).

Je ne comprends pas trop la suite, avec le TCD on détermine la dernière ligne et la dernière colonne , c'est cela?

Le dernière colonne je comprends car je devrait affecter une formule de la plage E9:lCol9 mais pourquoi déterminer la dernière ligne?

Il me manque donc la formule dans le code uniquement, non?

Merci d'avance,

Cordialement,

Re,
LastRow est la ligne des totaux du TCD (valeurs).
Me.Rows(9).ClearContents peut être remplacé par Me.cells(9,5).Resize(,lcol-4).ClearContents
Tu expliqueras "la formule bidon" car c'est plus que confus.
Cdlt.

7test.xlsm (77.41 Ko)
Private Sub Worksheet_PivotTableUpdate(ByVal Target As PivotTable)
Dim rngData As Range, lastCol As Long, lastRow As Long, lCol As Long
    Set rngData = Me.PivotTables(1).TableRange1
    With rngData
        lastCol = .Columns.Count   'Grand Total
        lastRow = .Rows.Count      'Grand Total (values)
    End With
    Me.Cells(9, 5).Resize(, lastCol - 4).ClearContents
    For lCol = 5 To lastCol
        'formula
    Next lCol
End Sub

Bonjour Jean Eric,

Merci beaucoup pour votre retour, la formule dans mon fichier de travail pour la cellule e9 :

=SI(E15=0;0;SOMME(E16:E18)/E15)

Elle n'a pas de sens ici mais elle en a sur mon fichier,

Une question : pourquoi écrire

        lastRow = .Rows.Count      'Grand Total (values)

alors qu'on ne s'en sert pas dans le code? , à moins que je ne le vois pas n'étant pas très à l'aise avec le VBA

Merci d'avance,

Cordialement,

Re,
Mets ton TCD sous forme tabulaire et explique ta formule.
Sinon, la formule de ton fichier initial était :

=SI(E14="";"";SOMME(E15:E68)/E16)

LastRow était utile car représentait la ligne des totaux [somme(E15:E68)].

Cdlt.

Re Bonjour Jean Eric,

Je comprends mieux pourquoi vous vouliez déterminez les valeurs de la ligne des totaux,

Désolé je vous ai donc induit en erreur, je cherche plus a adapter une formule comme celle ci :

=SI(E15=0;0;SOMME(E16:E18)/E15)

qui ne fait pas référence aux totaux éventuels du TCD, celui ci étant fictif la formule n'a pas de sens en soi, c'est surtout pour l'écriture en VBA que je puisse adapter sur mon fichier de travail,

Cordialement,

Re,
Donc, mets ton TCD sous forme tabulaire !...
Que devient ta formule ?
Cdlt.

Bonjour Jean Eric,

Ci-joint le fichier sous forme tabulaire avec la formule,

Merci d'avance,

Cordialement,
1test.xlsm (157.40 Ko)

Bonjour à tous,

Avec l'aide de Jean Eric que je remercie, j'ai réussi à adapter le code à mon projet, je joins le fichier test résolu pour partage si besoin,

Cordialement,

2test.xlsm (164.82 Ko)

Bonjour massari59624

Merci de clôturer le fil en cliquant sur le V de la ou les réponse(s) qui a/ont apporté la solution

image

Par avance merci

A+

Rechercher des sujets similaires à "vba formule plage"