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 ?
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
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
.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