VBA automatiser un segment à l'aide d'un bouton.

gregbouv

XLDnaute Nouveau
Bonjour

Je vous explique mon problème:

J'ai créé un TCD avec un segment sur la date, ce que j'aimerai faire c'est quand je clique sur un bouton (ici le bouton 1), on passe automatiquement sur le morceau de segment d'après.

Exemple: quand je clique sur le bouton 1, je passe du mois de janvier 2000 à février 2000 puis de février à mars etc...

Je vous joins un fichier.

Véritablement novice en VBA, je ne dispose pas des compétences nécessaires pour y arriver. J'avais pensé à définir une variable que j'incrémenterai d'un plus 1 mais c'était la mauvaise piste. J'ai également essayé avec l'enregistreur de maccros (mais pas possible ...)

JE vous remercie d'avance

Greg
 

Pièces jointes

  • Classeur1.xlsm
    255.3 KB · Affichages: 113
  • Classeur1.xlsm
    255.3 KB · Affichages: 120
  • Classeur1.xlsm
    255.3 KB · Affichages: 125

chris

XLDnaute Barbatruc
Re : VBA automatiser un segment à l'aide d'un bouton.

Bonjour et bienvenue

Si déjà tu déclares ta source en tableau, cela permettra d'avoir un TCD qui tienne automatiquement compte des lignes utilisées et évite des dates bidons et vides.

L'intérêt du bouton me parait limité avec un segment correctement dimensionné qui permet de cliquer directement sur la période voulue mais je t'ai néanmoins fait le code : quand il atteint la dernière période, il repasse à la première.
 

Pièces jointes

  • TCD_Segment.xlsm
    210.4 KB · Affichages: 363

gregbouv

XLDnaute Nouveau
Re : VBA automatiser un segment à l'aide d'un bouton.

Merci, c'était exactement ce que je voulais ;)

Le bouton va en faite servir à actualiser la totalité d'un classeur avec d'autre segment de date

Mais je savais pas trop comment faire pour un seul segment donc merci beaucoup ;)
 

gregbouv

XLDnaute Nouveau
Re : VBA automatiser un segment à l'aide d'un bouton.

Autre question à partir de ton code est ce que je peux effectuer une manip du genre:

- quand je clique sur le bouton, je passe au mois d'après mais je garde sélectionné le mois d'avant. (je pense que sa doit être faisable) qu'en penses-tu ?

Merci
 

chris

XLDnaute Barbatruc
Re : VBA automatiser un segment à l'aide d'un bouton.

Bonjour

C'est possible avec ce code
Code:
 Dim i As Long, j As Long
Application.ScreenUpdating = False
j = 0
    With ActiveWorkbook.SlicerCaches("Segment_date")
        For i = 1 To .SlicerItems.Count
            If .SlicerItems(i).Selected = False Then
                .SlicerItems(i).Selected = True
                j = i
                Exit For
            End If
        Next i
        If j = 0 Then
            For i = 2 To .SlicerItems.Count
                    .SlicerItems(i).Selected = False
            Next i
        End If
    End With
Application.ScreenUpdating = True
End Sub

Si tous tes TCD sont sur la même source tu peux utiliser le même segment pour tous les synchroniser.
 
Dernière édition:

gregbouv

XLDnaute Nouveau
Re : VBA automatiser un segment à l'aide d'un bouton.

Merci,

J'avais bidouillé un truc à partir de ton premier code en changeant certains faux en vrai et vice versa (sa marchait à peu près)

J'ai une dernière requête et après j'arrête de t'embêter: ton nouveau code commence obligatoirement sur le mois de janvier,

si je veux qu'il commence au mois de juin, il va sélectionner le mois de janvier et non pas celui de juillet.

Aurais tu une solution merci d'avance pour répondre à un novice de VBA qui veux progresser
 

chris

XLDnaute Barbatruc
Re : VBA automatiser un segment à l'aide d'un bouton.

Re

J'ai enlevé le retour au premier mois
Code:
Sub SegmentSuivant3()
Dim i As Long, j As Long
Application.ScreenUpdating = False
    With ActiveWorkbook.SlicerCaches("Segment_date")
    
    'Recherche du 1er sélectionné
        For i = 1 To .SlicerItems.Count
            If .SlicerItems(i).Selected = True Then
                j = i
                Exit For
            End If
        Next i
    
    'Sélectionn du 1er non sélectionné suivant
        For i = j To .SlicerItems.Count
            If .SlicerItems(i).Selected = False Then
                .SlicerItems(i).Selected = True
                Exit For
            End If
        Next i
    End With

Application.ScreenUpdating = True
End Sub

A noter que si le segment comporte des sélections disjointes (janvier et novembre par exemple) cela ne sélectionnera que février en plus...
 

Discussions similaires

Réponses
32
Affichages
863

Statistiques des forums

Discussions
314 628
Messages
2 111 337
Membres
111 104
dernier inscrit
JEMADA