Remettre Comobox à "Tous" -Listes deroulantes imbriquées

Bonjour, Help,

J'ai besoin d'aide sur userform avec les combobox.

Voilà, j'ai mis en place un userform avec 5 combobox permettant à l'utilisateur de choisir, "mois", "semaine", "Agence", "Equipe" et "Agent".

Mes combobox permettent de mettre à jour des listes déroulantes afin que l'utilisateur, selon ses choix, se retrouvent de plus en plus avec des critères restreints (exemple, si il choisit le mois de février, il n'aura que les semaines de février proposées et etc...)

Une fois les choix fait dans les combobox, cela met à jour automatiquement tous les TCD et graphiques pour permettre un pilotage fin de la performance des équipes.

Je voudrais qu'à chaque fois que l'utilisateur ouvre le userform, toutes les choix se remettent à "Tous" dans mes TCD??? Je ne trouves pas la solution et mon fichier est énorme dc je ne peux pas vous le joindre...Même en enlevant les données et en gardant que 2-3 lignes, il est tout de même lourd...(il y a des matrices avec les équipes et les noms d'agents...etc). Du coup, j'ai beau essayer de le faire light pour l'envoyer, ca ne veut plus rien dire...

Alors, voici les codes dans le userform...en espérant qu'un d'entre vous saches m'aider :

'Là, je voudrais lui demander que lorsqu'on ouvre le userform, toutes les données se réinitialisent à "Tous"

Private Sub ComboBox1_Change()

Sheets("Rapport").Select

[B1] = ComboBox1

Range("B1").Activate

Range("c2").Select

Sheets("Analyse").Select

End Sub

Private Sub ComboBox2_Change()

Sheets("Rapport").Select

[B5] = ComboBox2

Range("B5").Activate

Range("c2").Select

Sheets("Analyse").Select

End Sub

Private Sub ComboBox3_Change()

Sheets("Rapport").Select

[B4] = ComboBox3

Range("B4").Activate

Range("c2").Select

Sheets("Analyse").Select

End Sub

Private Sub ComboBox4_Change()

Sheets("Rapport").Select

[B3] = ComboBox4

Range("B3").Activate

Range("c2").Select

Sheets("Analyse").Select

End Sub

Private Sub ComboBox5_Change()

Sheets("Rapport").Select

[B2] = ComboBox5

Range("B2").Activate

Range("c2").Select

Sheets("Analyse").Select

End Sub

Private Sub CommandButton1_Click()

Unload Me

End Sub

Bonjour

A l'ouverture de l'userform tu veux tes combobox initialisé sur "Tous"

On considère que les combobox sont initialisés avec toutes leurs données et que la valeur "Tous" est la première

Private Sub UserForm_Initialize()
Dim I As Integer
  For I = 1 To 5
    Me.Controls("ComboBox" & I).ListIndex = 0
  Next I
End Sub

Sinon sans le fichier cela ne va pas être facile

As tu essayé de la compresser ?

As tu essayé cjoint ?

http://cjoint.com/index.php

c joint

Bonjour Banzai64,

J'ai testé ta formule mais du coup ca me fait un debogage ailleurs que je n'avais pas...

A force de bosser sur ce fichier, je suis sûre que je loupe quelque chose de bête mais rien à faire je n'y arrive pas.

Je retente d'alléger mon fichier pour y laisser comme même un certain nbre de données afin que ce soit parlant et je vais essayer de poster avec ton lien que je ne connaissais pas, merci

Normallement cela a marché Banzai64, donc voici le fichier

Bonjour

Je n'y connais rien en TCD et encore moins dans les paramètres des TCD

Donc il y a un plantage si l'on change la valeur d'une combobox

Je n'en sais pas plus

désolé

C est pas grave banzai64, peut être que quelques un d autre sera un ferru de VBA pr m aider????

En fait en relisant ton post banzai64 je pense que je me suis mal expliquée.

Sur mon fichier, il y a 1 feuille "tcdderoulante" et une feuille "rapport".

Si je modifie ds ma feuille rapport, les données 'mois, semaine, équipe... Tous les tcd se mettent bien à jour en même temps.

Ça c est fait;)

Mon problème maintenant c est que j ai rajouté une feuille "analyse" ds laquelle j ai incorporé un userform avec 5combobox.

Quand je rentre mes données ds mon userform, les données se mettent a jour ds ma feuille rapport, par contre cela ne me permet plus d avoir le filtrage alors que si je saisie directement sur l onglet rapport, j ai bien les filtres ?????

Help !!!! A l aide !!!! Cela fait une semaine que je construis cet outil nuit et jour et je suis persuadée qu il me manque un petit truc ds mon code Vba mais j ai beau chercher ds les forums, je ne trouve pas....

J ai besoin qu un accroc des macros se penchent sur mon problème et autour de moi....Ben y a pas ....

Merci d avance pr votre aide même si je suis contiente que la demande est complexe...mais je suis prêté à répondre à ttes vos questions si suis pas claire...

MERCIIIIII D AVANCEEEEEE

Bonjour

Je n'ai fait que te poser un emplâtre avec des herbes que j'ai recueillies dans les champs

Pour te dire que ce n'est pas la solution mais "ça marche"

Des vrais "docteurs es TCD" sauront soigner ton fichier

Bonjour,

Bonjour Banzai64,

Voir code VBA modifié pour la gestion des TCDs.

Cdlt

Option Explicit
Private Sub Worksheet_Change(ByVal Target As Range)
' declaration des variables
Dim mois As String, ACSI As String, groupe As String, agent As String
Dim semaine
Dim ws As Worksheet
Dim pt As PivotTable

    ' activation des modif dès que l'on modifie une cellule de la plage B1:B5
    If Not Intersect(Target, Range("B1:B5")) Is Nothing Then
        If Target.Count > 1 Then Exit Sub

        Application.ScreenUpdating = False
        ' affectation des valeurs des variables
        mois = [B1]
        semaine = [B2]
        ACSI = [B3]
        groupe = [B4]
        agent = [B5]

        If mois = "Tous" Then mois = "All"
        If semaine = "Tous" Then semaine = "All"
        If ACSI = "Tous" Then ACSI = "All"
        If groupe = "Tous" Then groupe = "All"
        If agent = "Tous" Then agent = "All"

        ' on supprime tous les filtres existants des TCDs
        For Each ws In ActiveWorkbook.Worksheets
            For Each pt In ws.PivotTables
                ' on supprime tous les filtres existants des TCDs
                pt.ClearAllFilters
                ' actualisation des champs communs aux TCDs
                On Error Resume Next
                pt.PivotFields("mois").CurrentPage = mois
                pt.PivotFields("Numérosemaine").CurrentPage = semaine
                On Error GoTo 0
            Next
        Next

        ' actualisation des TCDs feuille Rapport
        ActiveSheet.PivotTables("TCD_01").PivotFields("ACSI").CurrentPage = ACSI
        ActiveSheet.PivotTables("TCD_02").PivotFields("agent").CurrentPage = agent
        ActiveSheet.PivotTables("TCD_03").PivotFields("agent").CurrentPage = agent
        ActiveSheet.PivotTables("TCD_04").PivotFields("agent").CurrentPage = agent
        ActiveSheet.PivotTables("TCD_05").PivotFields("agent").CurrentPage = agent
        ActiveSheet.PivotTables("TCD_06").PivotFields("agent").CurrentPage = agent

        ' actualisaton des TCDs feuille TCDderoulante pour les menus déroulants
        With Worksheets("TCDderoulante")
            .PivotTables("TCD_07").PivotFields("mois").CurrentPage = mois
            ' .PivotTables("TCD_08") deja effectué
            .PivotTables("TCD_09").PivotFields("ACSI").CurrentPage = ACSI
            .PivotTables("TCD_10").PivotFields("ACSI").CurrentPage = ACSI
            .PivotTables("TCD_10").PivotFields("groupe").CurrentPage = groupe
            ' .PivotTables("TCD_11") inutile
        End With

    End If

End Sub

Bonjour Eriic,

Et bien, je vois que je ne suis pas seule à faire des nuits blanches devant Excel

J'ai mis ton VBA dans mon fichier tel quel -enfin en modifiant les noms des TCD bien sûr - et j'ai un debogage à cet endroit

Peux tu m'aider car je ne connais pas "pt.ClearAllFilters"???

' on supprime tous les filtres existants des TCDs

pt.ClearAllFilters

J'ai essayé de tester la boucle en mettant cette commande en commentaire mais ensuite mon VBA bloque ici mais ceci est peut-être dû à la commande précédente que j'ai écartée???

.PivotTables("Tableau croisé dynamique3").PivotFields("mois").CurrentPage = mois

Merci d'avance

Bonjour,

Tu places 'On Resume Next' au dessus de 'pt.ClearAllFilters' et redis moi.

Regardes les résultats obtenus.

Pour info., j'ai introduit cette gestion d'erreur pour un TCD qui ne comportait pas pas le champ 'semaine'

Cdlt.

Erreur de compilation, erreur de syntaxe...

Voici comment j'ai adapté ton post - j'ai normalement juste échangé les noms des TCD, je pense pas avoir fait de boullettes.

Option Explicit

Private Sub Worksheet_Change(ByVal Target As Range)

' declaration des variables

Dim mois As String, ACSI As String, groupe As String, agent As String

Dim semaine

Dim ws As Worksheet

Dim pt As PivotTable

' activation des modif dès que l'on modifie une cellule de la plage B1:B5

If Not Intersect(Target, Range("B1:B5")) Is Nothing Then

If Target.Count > 1 Then Exit Sub

Application.ScreenUpdating = False

' affectation des valeurs des variables

mois = [B1]

semaine = [B2]

ACSI = [B3]

groupe = [B4]

agent = [B5]

If mois = "Tous" Then mois = "All"

If semaine = "Tous" Then semaine = "All"

If ACSI = "Tous" Then ACSI = "All"

If groupe = "Tous" Then groupe = "All"

If agent = "Tous" Then agent = "All"

' on supprime tous les filtres existants des TCDs

For Each ws In ActiveWorkbook.Worksheets

For Each pt In ws.PivotTables

' on supprime tous les filtres existants des TCDs

On Resume Next

pt.ClearAllFilters

' actualisation des champs communs aux TCDs

On Error Resume Next

pt.PivotFields("mois").CurrentPage = mois

pt.PivotFields("Numérosemaine").CurrentPage = semaine

On Error GoTo 0

Next

Next

' actualisation des TCDs feuille Rapport

ActiveSheet.PivotTables("Tableau croisé dynamique1").PivotFields("ACSI").CurrentPage = ACSI

ActiveSheet.PivotTables("Tableau croisé dynamique3").PivotFields("agent").CurrentPage = agent

ActiveSheet.PivotTables("Tableau croisé dynamique4").PivotFields("agent").CurrentPage = agent

ActiveSheet.PivotTables("Tableau croisé dynamique11").PivotFields("agent").CurrentPage = agent

ActiveSheet.PivotTables("Tableau croisé dynamique9").PivotFields("agent").CurrentPage = agent

ActiveSheet.PivotTables("Tableau croisé dynamique10").PivotFields("agent").CurrentPage = agent

' actualisaton des TCDs feuille TCDderoulante pour les menus déroulants

With Worksheets("TCDderoulante")

.PivotTables("Tableau croisé dynamique3").PivotFields("mois").CurrentPage = mois

' .PivotTables("TCD_08") deja effectué

.PivotTables("Tableau croisé dynamique5").PivotFields("ACSI").CurrentPage = ACSI

.PivotTables("Tableau croisé dynamique6").PivotFields("ACSI").CurrentPage = ACSI

.PivotTables("Tableau croisé dynamique6").PivotFields("groupe").CurrentPage = groupe

' .PivotTables("TCD_11") inutile

End With

End If

End Sub

Cdt

Re,

Le second 'On Resume Next' est à supprimer.

Cdlt.

Re-bonjour Jean-Eric,

Alors là, CHAPEAU BAS....

J'ai mis 1 semaine à construire le tout et depuis 3 jours j'y ai passé mes jours et mes nuitrs à comprendre le problème car je suis encore dans mes débuts dans les VBA et Userform...et en un temps records, t'as résolu mon problème...MERCIIIIIIIIIIIIIIIIIIII ENORMEMENTTTTTTTTTTTTTT,

Je n'en pouvais plus.

Du coup, je voudrais savoir qu'elles étaient mes erreurs si tu as encore un peu de temps à m'accorder...

Voilà les différences que j'ai pu voir mais peut-être il y en a t'il d'autres...

Sur le Userform :

Dim Encours As Boolean - Qu'est ce que ca veut dire???

Private Sub UserForm_Initialize()

Dim I As Integer

For I = 1 To 5

Me.Controls("ComboBox" & I).ListIndex = 0

Next I

End Sub

Bon, ca c'est pour remettre toutes les valeurs à "Tous" mais que veut dire la commande "ListIndex" exactement?

Encours = False

Enfin, j'ai vu que tu avais rajouter cette ligne et je ne la comprends pas???

En espérant que t'aura encore un peu de temps pour m'aider à comprendre mes erreurs

A bientôt

Virginie


Ah oui, et autre question.

Est-il possible de ne pas voir les MAJ des TCD quand on ouvre ou quand on fait les choix dans le Userform??? Si pas possible, pas grave, ce n'est qu'un détail

Cordialement

Re,

Pour les questions sur le Userform, je laisse le soin à Banzai64 (bonjour) ou une autre personne pour t'expliquer le truc.

Pour ta question, sur le gel de l'écran pendant l'exécution des MAJ, il est effectif chez moi avec l'instruction :

Application.ScreenUpdating

Ou je ne comprends pas la question?

Cdlt.

Oup's, oui pardon Banzai64, je me suis mélangée les pinceaux...je n'avais pas un insomniaque mais 2 qui bossait pour moi

Encore Merciiiiiiiiiiiiiii à tous les 2 pour votre aide car sinon je crois que je m'en serais jamais sortie toute seule, c'était trop pour moi.

Pour Jean-Eric, je viens de reprendre ton fichier d'origine et moi ca ne marche pas.

Ma question, quand on ouvre le Userform, tous les TCD se mettent à jour pour se réinitialiser sur TOUS...Ca c'est parfait

Mais du coup, on voit l'outil passer d'un onglet à un autre mettre tous les TCD à jour...

Idem quand on change les choix des Combobox..

Du coup, je me demandais si il était possible de 'Cacher toutes ses mises à jour' --- Mais si c'est pas possible, ce n'est pas grave, c'est du détail

++

Virginie

Re,

Regarde la macro Userform_Initialize dans mon fichier, soit :

Private Sub UserForm_Initialize()
Dim ws As Worksheet
Dim pt As PivotTable
Dim I As Integer
    'Application.ScreenUpdating=False (pas utile!?)
    ' on supprime tous les filtres existants des TCDs
    For Each ws In ActiveWorkbook.Worksheets
        For Each pt In ws.PivotTables
            pt.ClearAllFilters
        Next
    Next

    For I = 1 To 5
        Me.Controls("ComboBox" & I).ListIndex = 0
    Next I

End Sub

Re...

J'ai testé mais on voit toujours tous les TCD se mettre à jour mais franchement c'est pas grave, je ne suis même pas sûr que ce que j'aimerai est faisable.

Merci milles fois

A bientôt certainement pour un new challenge Excel

Pour l'instant je laisse le post ouvert au cas où Banzai64 me répondent sur mes questions sur les modifs qu'il a faite sur le Userform pour comprendre.

Bonjour

VirginieV a écrit :

Dim Encours As Boolean - Qu'est ce que ca veut dire???

Déclaration d'une variable booléenne qui sera positionnée à True pour éviter que le code se rappelle

Dans chaque ComboBox_Change cette variable est positionnée à True ainsi si un évènement rappelle cette procédure il est immédiatement éjecté suite au test : If EnCours = True ......

Fais un essai

Dans les procédures mets en remarque les 2 lignes de début

If Encours = True Then Exit Sub
Encours = True

Ensuite cliques sur le bouton "Saisie Sélection" et tu verras

VirginieV a écrit :

mais que veut dire la commande "ListIndex" exactement?

extrait de l'aide

Identifie l'élément actuellement sélectionné dans un contrôle ListBox ou ComboBox.

La propriété ListIndex contient un index de la ligne sélectionnée dans la liste. Les valeurs de la propriété ListIndex sont comprises entre –1 et le nombre total de lignes de la liste moins 1 (c'est-à-dire, ListCount – 1). Lorsqu'aucune ligne n'est sélectionnée, la propriété ListIndex renvoie la valeur –1. Quand l'utilisateur sélectionne une ligne d'un contrôle ListBox ou ComboBox, le système définit la valeur de la propriété ListIndex. La valeur de la propriété ListIndex de la première ligne de la liste est zéro, la valeur de la deuxième liste est 1, et ainsi de suite.

Bonsoir Banzai64,

Merci pr tes explications, je vais regarder demain le test dont tu me parles, car ce soir, ordi éteint, j ai promis

A bientôt

Virginie

Rechercher des sujets similaires à "remettre comobox tous listes deroulantes imbriquees"