Je voudrais rendre visible tous les items d'un pivotlist visible SI leur
valeur est égale à une valeur stockée "derndate(Y)".
Je trouve que la solution IF est un peu longuette.
Une suggestion?
Public derndate(0 To 100) As Date
For Y = 0 To duree
derndate(Y) = DateFin - Y
Next
PivotCacheDate
Sub PivotCacheDate()
Dim pt As PivotTable
Dim pf As PivotField
Dim Pi As PivotItem
Application.DisplayAlerts = False
On Error Resume Next
For Each pt In ActiveSheet.PivotTables
For Each pf In pt.RowFields
pf.AutoSort xlManual, pf.SourceName
If pf = Choix1 Then
For Each Pi In pf.PivotItems
>>>C'est ici<<<< If derndate(0) = Pi.Value Or Pi.Value = derndate(1) Or Pi.Value = derndate(2) Or Pi.Value = derndate(3) Or Pi.Value = derndate(4) Or Pi.Value = derndate(5) Or Pi.Value = derndate(6) Or _
Pi.Value = derndate(7) Or Pi.Value = derndate(8) Or
Pi.Value = derndate(9) Or Pi.Value = derndate(10) Or Pi.Value = derndate(11)
Or Pi.Value = derndate(12) Or Pi.Value = derndate(13) Or _
Pi.Value = derndate(14) Or Pi.Value = derndate(15) Or
Pi.Value = derndate(16) Or Pi.Value = derndate(17) Or Pi.Value = derndate(18)
Or Pi.Value = derndate(19) Or Pi.Value = derndate(20) Or _
Pi.Value = derndate(21) Or Pi.Value = derndate(22) Or
Pi.Value = derndate(23) Or Pi.Value = derndate(24) Or Pi.Value = derndate(25)
Or Pi.Value = derndate(26) Or Pi.Value = derndate(27) Or _
Pi.Value = derndate(28) Or Pi.Value = derndate(29) Or
Pi.Value = derndate(30) Or Pi.Value = derndate(31) Then
Pi.Visible = True
Else
Pi.Visible = False
End If
Next Pi
End If
pf.AutoSort xlAscending, pf.SourceName
Next pf
Next pt
Application.DisplayAlerts = True
End Sub
Refaire le TCD sur la base filtrée en fonction du critère....
AV
anonymousA
Bonjour,
Toujours possible de chaercher si une valeur appartient à un tableau en utilisant Match, ce qui simplifie la recherche de pi.value dans le tableau derndate
ex ci-dessous
Dim derndate(1 To 31)
For I = 1 To 31 derndate(I) = I Next derndate(20) = "toto" On Error Resume Next MsgBox Application.WorksheetFunction.Match("toto", derndate, 0) If Err Then MsgBox "pas trouvé"
A+
Bonjour,
Toujours possible de chaercher si une valeur appartient à un tableau
en utilisant Match, ce qui simplifie la recherche de pi.value dans le
tableau derndate
ex ci-dessous
Dim derndate(1 To 31)
For I = 1 To 31
derndate(I) = I
Next
derndate(20) = "toto"
On Error Resume Next
MsgBox Application.WorksheetFunction.Match("toto", derndate, 0)
If Err Then MsgBox "pas trouvé"
Toujours possible de chaercher si une valeur appartient à un tableau en utilisant Match, ce qui simplifie la recherche de pi.value dans le tableau derndate
ex ci-dessous
Dim derndate(1 To 31)
For I = 1 To 31 derndate(I) = I Next derndate(20) = "toto" On Error Resume Next MsgBox Application.WorksheetFunction.Match("toto", derndate, 0) If Err Then MsgBox "pas trouvé"
A+
René Delcourt
Merci.
et si la comparaison se fait sur un tableau de type Reg=("aa","bb","cc") ? -- René Delcourt
Bonjour,
Toujours possible de chaercher si une valeur appartient à un tableau en utilisant Match, ce qui simplifie la recherche de pi.value dans le tableau derndate
ex ci-dessous
Dim derndate(1 To 31)
For I = 1 To 31 derndate(I) = I Next derndate(20) = "toto" On Error Resume Next MsgBox Application.WorksheetFunction.Match("toto", derndate, 0) If Err Then MsgBox "pas trouvé"
A+
Merci.
et si la comparaison se fait sur un tableau de type
Reg=("aa","bb","cc") ?
--
René Delcourt
Bonjour,
Toujours possible de chaercher si une valeur appartient à un tableau
en utilisant Match, ce qui simplifie la recherche de pi.value dans le
tableau derndate
ex ci-dessous
Dim derndate(1 To 31)
For I = 1 To 31
derndate(I) = I
Next
derndate(20) = "toto"
On Error Resume Next
MsgBox Application.WorksheetFunction.Match("toto", derndate, 0)
If Err Then MsgBox "pas trouvé"
et si la comparaison se fait sur un tableau de type Reg=("aa","bb","cc") ? -- René Delcourt
Bonjour,
Toujours possible de chaercher si une valeur appartient à un tableau en utilisant Match, ce qui simplifie la recherche de pi.value dans le tableau derndate
ex ci-dessous
Dim derndate(1 To 31)
For I = 1 To 31 derndate(I) = I Next derndate(20) = "toto" On Error Resume Next MsgBox Application.WorksheetFunction.Match("toto", derndate, 0) If Err Then MsgBox "pas trouvé"
Le derndate me pose problème (1004). derndate reprend-il toutes les valeurs qui ont été stockées dans la boucle précédente? -- René Delcourt
Bonjour,
Toujours possible de chaercher si une valeur appartient à un tableau en utilisant Match, ce qui simplifie la recherche de pi.value dans le tableau derndate
ex ci-dessous
Dim derndate(1 To 31)
For I = 1 To 31 derndate(I) = I Next derndate(20) = "toto" On Error Resume Next MsgBox Application.WorksheetFunction.Match("toto", derndate, 0) If Err Then MsgBox "pas trouvé"
Le derndate me pose problème (1004).
derndate reprend-il toutes les valeurs qui ont été stockées dans la boucle
précédente?
--
René Delcourt
Bonjour,
Toujours possible de chaercher si une valeur appartient à un tableau
en utilisant Match, ce qui simplifie la recherche de pi.value dans le
tableau derndate
ex ci-dessous
Dim derndate(1 To 31)
For I = 1 To 31
derndate(I) = I
Next
derndate(20) = "toto"
On Error Resume Next
MsgBox Application.WorksheetFunction.Match("toto", derndate, 0)
If Err Then MsgBox "pas trouvé"
Le derndate me pose problème (1004). derndate reprend-il toutes les valeurs qui ont été stockées dans la boucle précédente? -- René Delcourt
Bonjour,
Toujours possible de chaercher si une valeur appartient à un tableau en utilisant Match, ce qui simplifie la recherche de pi.value dans le tableau derndate
ex ci-dessous
Dim derndate(1 To 31)
For I = 1 To 31 derndate(I) = I Next derndate(20) = "toto" On Error Resume Next MsgBox Application.WorksheetFunction.Match("toto", derndate, 0) If Err Then MsgBox "pas trouvé"
A+
anonymousA
idem sous réserve bien sur que Reg soit défini comme un array ( cf ci-dessous). D'ailleurs autrement, il y a une erreur de syntaxe.
le proc ci dessus renverra 2 qui est bien la position de la chaine "bb" dans l'array.
A+
anonymousA
oui.Mais s'il ne trouve pas toto et sans gestion d'erreur, il se plante ce qui est bien normal. dans l'exemple initial que je t'avais fait parvenir, j'avais pris le soin d'affecter à l'un des éléments du tableau derndate la valeur toto.
A+
oui.Mais s'il ne trouve pas toto et sans gestion d'erreur, il se plante
ce qui est bien normal. dans l'exemple initial que je t'avais fait
parvenir, j'avais pris le soin d'affecter à l'un des éléments du
tableau derndate la valeur toto.
oui.Mais s'il ne trouve pas toto et sans gestion d'erreur, il se plante ce qui est bien normal. dans l'exemple initial que je t'avais fait parvenir, j'avais pris le soin d'affecter à l'un des éléments du tableau derndate la valeur toto.
A+
René Delcourt
Alors je ne comprends pas pourquoi ce code ne fonctionne pas : If pf = Choix1 Then For Each Pi In pf.PivotItems If Evaluate(Application.WorksheetFunction.Match(Pi, DernDate, 0)) <> Err Then Pi.Visible = True Else Pi.Visible = False Next Pi End If PS: Je suis content de te retrouver sur ce forum. Je me souviens que , à mes débuts en VBA, tu m'avais souvent dépanné. -- René Delcourt
oui.Mais s'il ne trouve pas toto et sans gestion d'erreur, il se plante ce qui est bien normal. dans l'exemple initial que je t'avais fait parvenir, j'avais pris le soin d'affecter à l'un des éléments du tableau derndate la valeur toto.
A+
Alors je ne comprends pas pourquoi ce code ne fonctionne pas :
If pf = Choix1 Then
For Each Pi In pf.PivotItems
If Evaluate(Application.WorksheetFunction.Match(Pi,
DernDate, 0)) <> Err Then Pi.Visible = True Else Pi.Visible = False
Next Pi
End If
PS: Je suis content de te retrouver sur ce forum. Je me souviens que , à mes
débuts en VBA, tu m'avais souvent dépanné.
--
René Delcourt
oui.Mais s'il ne trouve pas toto et sans gestion d'erreur, il se plante
ce qui est bien normal. dans l'exemple initial que je t'avais fait
parvenir, j'avais pris le soin d'affecter à l'un des éléments du
tableau derndate la valeur toto.
Alors je ne comprends pas pourquoi ce code ne fonctionne pas : If pf = Choix1 Then For Each Pi In pf.PivotItems If Evaluate(Application.WorksheetFunction.Match(Pi, DernDate, 0)) <> Err Then Pi.Visible = True Else Pi.Visible = False Next Pi End If PS: Je suis content de te retrouver sur ce forum. Je me souviens que , à mes débuts en VBA, tu m'avais souvent dépanné. -- René Delcourt
oui.Mais s'il ne trouve pas toto et sans gestion d'erreur, il se plante ce qui est bien normal. dans l'exemple initial que je t'avais fait parvenir, j'avais pris le soin d'affecter à l'un des éléments du tableau derndate la valeur toto.
A+
anonymousA
Re,
merci pour le PS de mon POST.
Pour ce qui est de ton problème, je ne comprends pas quelque chose.Si comme je le crois , pf est un champ, alors tu ne peux pas affecter un objet à une variable en dehors de Set.Par ailleurs, je ne vois pas bien l'interêt de Evaluate dans ta syntaxe mais peut-être pourras-tu me l'expliquer ?
un exemple ci-dessous avec un array derndate qui ne ressemble evidemment pas au tien ( mais c'est pour la pédagogie)
Sub tt()
Dim pt As PivotTable Dim sh As Worksheet Dim choix1 As PivotField
Set sh = ActiveSheet Set pt = sh.PivotTables(1)
Set choix1 = pt.PivotFields(2) app choix1
End Sub
Sub app(pf As PivotField)
derndate = Array("bleu", "titi", "rouge")
For Each Pi In pf.PivotItems On Error Resume Next variable = Application.WorksheetFunction.Match(Pi, derndate, 0) If Err Then Err.Clear Pi.Visible = False Else Pi.Visible = True End If Next Pi
End Sub
j'espère que ca t'éclaire plus.
A+
Alors je ne comprends pas pourquoi ce code ne fonctionne pas : If pf = Choix1 Then For Each Pi In pf.PivotItems If Evaluate(Application.WorksheetFunction.Match(Pi, DernDate, 0)) <> Err Then Pi.Visible = True Else Pi.Visible = False Next Pi End If PS: Je suis content de te retrouver sur ce forum. Je me souviens que , à mes débuts en VBA, tu m'avais souvent dépanné.
Re,
merci pour le PS de mon POST.
Pour ce qui est de ton problème, je ne comprends pas quelque chose.Si
comme je le crois , pf est un champ, alors tu ne peux pas affecter un
objet à une variable en dehors de Set.Par ailleurs, je ne vois pas bien
l'interêt de Evaluate dans ta syntaxe mais peut-être pourras-tu me
l'expliquer ?
un exemple ci-dessous avec un array derndate qui ne ressemble evidemment
pas au tien ( mais c'est pour la pédagogie)
Sub tt()
Dim pt As PivotTable
Dim sh As Worksheet
Dim choix1 As PivotField
Set sh = ActiveSheet
Set pt = sh.PivotTables(1)
Set choix1 = pt.PivotFields(2)
app choix1
End Sub
Sub app(pf As PivotField)
derndate = Array("bleu", "titi", "rouge")
For Each Pi In pf.PivotItems
On Error Resume Next
variable = Application.WorksheetFunction.Match(Pi, derndate, 0)
If Err Then
Err.Clear
Pi.Visible = False
Else
Pi.Visible = True
End If
Next Pi
End Sub
j'espère que ca t'éclaire plus.
A+
Alors je ne comprends pas pourquoi ce code ne fonctionne pas :
If pf = Choix1 Then
For Each Pi In pf.PivotItems
If Evaluate(Application.WorksheetFunction.Match(Pi,
DernDate, 0)) <> Err Then Pi.Visible = True Else Pi.Visible = False
Next Pi
End If
PS: Je suis content de te retrouver sur ce forum. Je me souviens que , à mes
débuts en VBA, tu m'avais souvent dépanné.
Pour ce qui est de ton problème, je ne comprends pas quelque chose.Si comme je le crois , pf est un champ, alors tu ne peux pas affecter un objet à une variable en dehors de Set.Par ailleurs, je ne vois pas bien l'interêt de Evaluate dans ta syntaxe mais peut-être pourras-tu me l'expliquer ?
un exemple ci-dessous avec un array derndate qui ne ressemble evidemment pas au tien ( mais c'est pour la pédagogie)
Sub tt()
Dim pt As PivotTable Dim sh As Worksheet Dim choix1 As PivotField
Set sh = ActiveSheet Set pt = sh.PivotTables(1)
Set choix1 = pt.PivotFields(2) app choix1
End Sub
Sub app(pf As PivotField)
derndate = Array("bleu", "titi", "rouge")
For Each Pi In pf.PivotItems On Error Resume Next variable = Application.WorksheetFunction.Match(Pi, derndate, 0) If Err Then Err.Clear Pi.Visible = False Else Pi.Visible = True End If Next Pi
End Sub
j'espère que ca t'éclaire plus.
A+
Alors je ne comprends pas pourquoi ce code ne fonctionne pas : If pf = Choix1 Then For Each Pi In pf.PivotItems If Evaluate(Application.WorksheetFunction.Match(Pi, DernDate, 0)) <> Err Then Pi.Visible = True Else Pi.Visible = False Next Pi End If PS: Je suis content de te retrouver sur ce forum. Je me souviens que , à mes débuts en VBA, tu m'avais souvent dépanné.
René Delcourt
C'est nickel! Encore merci -- René Delcourt
Re,
merci pour le PS de mon POST.
Pour ce qui est de ton problème, je ne comprends pas quelque chose.Si comme je le crois , pf est un champ, alors tu ne peux pas affecter un objet à une variable en dehors de Set.Par ailleurs, je ne vois pas bien l'interêt de Evaluate dans ta syntaxe mais peut-être pourras-tu me l'expliquer ?
un exemple ci-dessous avec un array derndate qui ne ressemble evidemment pas au tien ( mais c'est pour la pédagogie)
Sub tt()
Dim pt As PivotTable Dim sh As Worksheet Dim choix1 As PivotField
Set sh = ActiveSheet Set pt = sh.PivotTables(1)
Set choix1 = pt.PivotFields(2) app choix1
End Sub
Sub app(pf As PivotField)
derndate = Array("bleu", "titi", "rouge")
For Each Pi In pf.PivotItems On Error Resume Next variable = Application.WorksheetFunction.Match(Pi, derndate, 0) If Err Then Err.Clear Pi.Visible = False Else Pi.Visible = True End If Next Pi
End Sub
j'espère que ca t'éclaire plus.
A+
Alors je ne comprends pas pourquoi ce code ne fonctionne pas : If pf = Choix1 Then For Each Pi In pf.PivotItems If Evaluate(Application.WorksheetFunction.Match(Pi, DernDate, 0)) <> Err Then Pi.Visible = True Else Pi.Visible = False Next Pi End If PS: Je suis content de te retrouver sur ce forum. Je me souviens que , à mes débuts en VBA, tu m'avais souvent dépanné.
C'est nickel!
Encore merci
--
René Delcourt
Re,
merci pour le PS de mon POST.
Pour ce qui est de ton problème, je ne comprends pas quelque chose.Si
comme je le crois , pf est un champ, alors tu ne peux pas affecter un
objet à une variable en dehors de Set.Par ailleurs, je ne vois pas bien
l'interêt de Evaluate dans ta syntaxe mais peut-être pourras-tu me
l'expliquer ?
un exemple ci-dessous avec un array derndate qui ne ressemble evidemment
pas au tien ( mais c'est pour la pédagogie)
Sub tt()
Dim pt As PivotTable
Dim sh As Worksheet
Dim choix1 As PivotField
Set sh = ActiveSheet
Set pt = sh.PivotTables(1)
Set choix1 = pt.PivotFields(2)
app choix1
End Sub
Sub app(pf As PivotField)
derndate = Array("bleu", "titi", "rouge")
For Each Pi In pf.PivotItems
On Error Resume Next
variable = Application.WorksheetFunction.Match(Pi, derndate, 0)
If Err Then
Err.Clear
Pi.Visible = False
Else
Pi.Visible = True
End If
Next Pi
End Sub
j'espère que ca t'éclaire plus.
A+
Alors je ne comprends pas pourquoi ce code ne fonctionne pas :
If pf = Choix1 Then
For Each Pi In pf.PivotItems
If Evaluate(Application.WorksheetFunction.Match(Pi,
DernDate, 0)) <> Err Then Pi.Visible = True Else Pi.Visible = False
Next Pi
End If
PS: Je suis content de te retrouver sur ce forum. Je me souviens que , à mes
débuts en VBA, tu m'avais souvent dépanné.
Pour ce qui est de ton problème, je ne comprends pas quelque chose.Si comme je le crois , pf est un champ, alors tu ne peux pas affecter un objet à une variable en dehors de Set.Par ailleurs, je ne vois pas bien l'interêt de Evaluate dans ta syntaxe mais peut-être pourras-tu me l'expliquer ?
un exemple ci-dessous avec un array derndate qui ne ressemble evidemment pas au tien ( mais c'est pour la pédagogie)
Sub tt()
Dim pt As PivotTable Dim sh As Worksheet Dim choix1 As PivotField
Set sh = ActiveSheet Set pt = sh.PivotTables(1)
Set choix1 = pt.PivotFields(2) app choix1
End Sub
Sub app(pf As PivotField)
derndate = Array("bleu", "titi", "rouge")
For Each Pi In pf.PivotItems On Error Resume Next variable = Application.WorksheetFunction.Match(Pi, derndate, 0) If Err Then Err.Clear Pi.Visible = False Else Pi.Visible = True End If Next Pi
End Sub
j'espère que ca t'éclaire plus.
A+
Alors je ne comprends pas pourquoi ce code ne fonctionne pas : If pf = Choix1 Then For Each Pi In pf.PivotItems If Evaluate(Application.WorksheetFunction.Match(Pi, DernDate, 0)) <> Err Then Pi.Visible = True Else Pi.Visible = False Next Pi End If PS: Je suis content de te retrouver sur ce forum. Je me souviens que , à mes débuts en VBA, tu m'avais souvent dépanné.