Précédent   Forum des professionnels en informatique > Logiciels > Microsoft Office > Général VBA
Général VBA Forum général VBA . Pour les logiciels spécifiques (Access, Excel, Word, ...), postez dans les bons sous forums.
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 23/11/2006, 20h52   #1
Candidat au titre de Membre du Club
 
Inscription : juillet 2004
Messages : 66
Détails du profil
Informations forums :
Inscription : juillet 2004
Messages : 66
Points : 13
Points : 13
Par défaut multiselection ds champ de page d un tableau croisé dynamique

bonjour
je suis en train de générer plusieurs tableaux croisés dynamiques et je le fais via VBA, tt est en vba
j aimerais savoir si il y a une méthode qui permet de faire de la multisélection au niveau du champ de page en vba

merci d avance pour les réponses
hiline6 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 24/11/2006, 08h32   #2
Candidat au titre de Membre du Club
 
Inscription : juillet 2004
Messages : 66
Détails du profil
Informations forums :
Inscription : juillet 2004
Messages : 66
Points : 13
Points : 13
en fait non ce n est pas ca que je souhaite
je veux permettre à l utilisateur de pouvoir faire de la multiselection pour le Tableau croisée dynamique

par ex : j ai 2 champs de page, mois et année, pour le moment je ne peux choisir qu un mois et une année
je souhaite qu à l avenir il puisse sélectionner 3 mois, ou 2 ou 4 selon ce qu il veut voir
n y a t il pas une option en vba permettant de faire ca?

merci bcp
hiline6 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 24/11/2006, 10h41   #3
Candidat au titre de Membre du Club
 
Inscription : juillet 2004
Messages : 66
Détails du profil
Informations forums :
Inscription : juillet 2004
Messages : 66
Points : 13
Points : 13
non justement ca ne marche pas
la touche ctrl ne permet pas là de faire de la multiselection
je ne sais plus quoi faire
hiline6 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 24/11/2006, 10h50   #4
Candidat au titre de Membre du Club
 
Inscription : juillet 2004
Messages : 66
Détails du profil
Informations forums :
Inscription : juillet 2004
Messages : 66
Points : 13
Points : 13
C est la que je veux faire de la multiselection
Fichiers attachés
Type de fichier : doc exemple.doc (72,5 Ko, 14 affichages)
hiline6 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 24/11/2006, 11h55   #5
Candidat au titre de Membre du Club
 
Inscription : juillet 2004
Messages : 66
Détails du profil
Informations forums :
Inscription : juillet 2004
Messages : 66
Points : 13
Points : 13
ta solution ne résout pas mon pb
le fait de copier coller ne me permettra pas e faire de la multiselection
enfin bref ce n'est pas grave, je vais essayer de trouver une autre manière de faire
merci bcp
hiline6 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 25/11/2006, 13h52   #6
Membre éclairé
 
Inscription : octobre 2006
Messages : 390
Détails du profil
Informations forums :
Inscription : octobre 2006
Messages : 390
Points : 396
Points : 396
Tiens, essaie avec ca, a adapter suivant ton cas...
Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
Public champ As String
Public feuille As Worksheet
Public tcd As PivotTable
 
Sub CreateDialog()
    Dim dlg, d, sh As Shape, lstb As Object
    Dim pi As PivotItem, dlgExist As Boolean
    Application.ScreenUpdating = False
 
    ' A parametrer suivant tes donnees
    Set feuille = Feuil1 ' feuille du tcd
    champ = "MES"      ' champ de page
 
    dlgExist = False
    For Each d In ThisWorkbook.DialogSheets
        If d.Name = "dlgTCD" Then
            dlgExist = True
            Exit For
        End If
    Next d
    If Not dlgExist Then
        Set dlg = ThisWorkbook.DialogSheets.Add(After:=ThisWorkbook.Sheets(ThisWorkbook.Sheets.Count))
        dlg.Name = "dlgTCD"
        Set sh = dlg.Shapes(1)
        sh.TextFrame.Characters.Text = "Sélectionner les valeurs à afficher pour [" & champ & "]"
        Set lstb = dlg.ListBoxes.Add(sh.Left + 10, sh.Top + 20, sh.Width - 100, sh.Height - 30)
        lstb.Name = "ListBoxTCD"
        lstb.MultiSelect = xlSimple
    Else
        Set dlg = ThisWorkbook.DialogSheets("dlgTCD")
        Set lstb = dlg.ListBoxes("ListBoxTCD")
        lstb.RemoveAllItems
    End If
    Set tcd = feuille.PivotTables(1)
    For Each pi In tcd.PivotFields(champ).PivotItems
        lstb.AddItem pi.Value
    Next pi
    i = 1
    For Each pi In tcd.PivotFields(champ).PivotItems
        If pi.Visible = True Then
            lstb.Selected(i) = True
        Else: lstb.Selected(i) = False
        End If
        i = i + 1
    Next pi
    dlg.Shapes(2).OnAction = "FilterPivot"
    dlg.Visible = False
    feuille.Activate
    Application.ScreenUpdating = True
    dlg.Show
    Set d = Nothing
    Set pi = Nothing
    Set lstb = Nothing
    Set sh = Nothing
    Set dlg = Nothing
End Sub
 
Sub FilterPivot()
    Dim dlg, lstb As Object
    Set dlg = ThisWorkbook.DialogSheets(ThisWorkbook.DialogSheets.Count)
    Set lstb = dlg.ListBoxes("ListBoxTCD")
    For i = 1 To lstb.ListCount
        If lstb.Selected(i) Then
            tcd.PivotFields(champ).PivotItems(lstb.List(i)).Visible = True
        Else: tcd.PivotFields(champ).PivotItems(lstb.List(i)).Visible = False
        End If
    Next i
    tcd.PivotFields(champ).CurrentPage = "(Tous)"
End Sub
Il faut lancer CreateDialog()
dadavyvy est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 27/11/2006, 18h49   #7
Candidat au titre de Membre du Club
 
Inscription : juillet 2004
Messages : 66
Détails du profil
Informations forums :
Inscription : juillet 2004
Messages : 66
Points : 13
Points : 13
je vais tester cela
merci bcp
hiline6 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 28/11/2006, 08h30   #8
Candidat au titre de Membre du Club
 
Inscription : juillet 2004
Messages : 66
Détails du profil
Informations forums :
Inscription : juillet 2004
Messages : 66
Points : 13
Points : 13
ok ca marche
mais tu sais comment rajouter ds ma listbox tous car c 'est un peu chiant de les sélectionner un par un ds ma list surtt si il y a bcp de valeursenfin je sais rajouter la valeur (tous) mais je n arrive pas à lui affecter ttes les valeurs en vba
merci bcp
hiline6 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 28/11/2006, 20h56   #9
Membre éclairé
 
Inscription : octobre 2006
Messages : 390
Détails du profil
Informations forums :
Inscription : octobre 2006
Messages : 390
Points : 396
Points : 396
Il suffit juste rajouter une fonction sur l'un des boutons de la boite de dialogue
Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
Public champ As String
Public feuille As Worksheet
Public tcd As PivotTable

Sub CreateDialog()
    Dim dlg, d, sh As Shape, lstb As Object
    Dim pi As PivotItem, dlgExist As Boolean
    Application.ScreenUpdating = False

    ' A parametrer suivant tes donnees
    Set feuille = Feuil1 ' feuille du tcd
    champ = "MES"      ' champ de page

    dlgExist = False
    For Each d In ThisWorkbook.DialogSheets
        If d.Name = "dlgTCD" Then
            dlgExist = True
            Exit For
        End If
    Next d
    If Not dlgExist Then
        Set dlg = ThisWorkbook.DialogSheets.Add(After:=ThisWorkbook.Sheets(ThisWorkbook.Sheets.Count))
        dlg.Name = "dlgTCD"
        Set sh = dlg.Shapes(1)
        sh.TextFrame.Characters.Text = "Select filtering values for [" & champ & "]"
        Set lstb = dlg.ListBoxes.Add(sh.Left + 10, sh.Top + 20, sh.Width - 100, sh.Height - 30)
        lstb.Name = "ListBoxTCD"
        lstb.MultiSelect = xlSimple
    Else
        Set dlg = ThisWorkbook.DialogSheets("dlgTCD")
        Set lstb = dlg.ListBoxes("ListBoxTCD")
        lstb.RemoveAllItems
    End If
    Set tcd = feuille.PivotTables(1)
    For Each pi In tcd.PivotFields(champ).PivotItems
        lstb.AddItem pi.Value
    Next pi
    i = 1
    For Each pi In tcd.PivotFields(champ).PivotItems
        If pi.Visible = True Then
            lstb.Selected(i) = True
        Else: lstb.Selected(i) = False
        End If
        i = i + 1
    Next pi
    dlg.Shapes(2).OnAction = "FilterPivot"
    With dlg.Shapes(3)
        .TextFrame.Characters.Text = "Select All"
        .OnAction = "SelectAllList"
    End With
    dlg.Shapes(3).Select
    With Selection
        .DefaultButton = False
        .CancelButton = False
        .DismissButton = False
        .HelpButton = False
        .Accelerator = ""
    End With
    dlg.Visible = False
    feuille.Activate
    Application.ScreenUpdating = True
    dlg.Show
    Set d = Nothing
    Set pi = Nothing
    Set lstb = Nothing
    Set sh = Nothing
    Set dlg = Nothing
End Sub

Sub FilterPivot()
    Dim dlg, lstb As Object
    Set dlg = ThisWorkbook.DialogSheets(ThisWorkbook.DialogSheets.Count)
    Set lstb = dlg.ListBoxes("ListBoxTCD")
    nb = 0
    For i = 1 To lstb.ListCount
        If i < lstb.ListCount Or (i = lstb.ListCount And nb > 0) Then
            If lstb.Selected(i) Then
                tcd.PivotFields(champ).PivotItems(lstb.List(i)).Visible = True
                nb = nb + 1
            Else: tcd.PivotFields(champ).PivotItems(lstb.List(i)).Visible = False
            End If
        Else
            If lstb.Selected(i) Then
                tcd.PivotFields(champ).PivotItems(lstb.List(i)).Visible = True
            Else ' No item selected
                For j = 1 To lstb.ListCount
                    tcd.PivotFields(champ).PivotItems(lstb.List(j)).Visible = True
                Next j
            End If
        End If
    Next i
    tcd.PivotFields(champ).CurrentPage = "(Tous)"
End Sub

Sub SelectAllList()
    Dim dlg, lstb As Object
    Set dlg = ThisWorkbook.DialogSheets(ThisWorkbook.DialogSheets.Count)
    Set lstb = dlg.ListBoxes("ListBoxTCD")
    If dlg.Shapes(3).TextFrame.Characters.Text = "Select All" Then
        For i = 1 To lstb.ListCount
            lstb.Selected(i) = True
        Next i
        dlg.Shapes(3).TextFrame.Characters.Text = "Un-select All"
    Else
        For i = 1 To lstb.ListCount
            lstb.Selected(i) = False
        Next i
        dlg.Shapes(3).TextFrame.Characters.Text = "Select All"
    End If
End Sub
dadavyvy est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 29/11/2006, 13h34   #10
Candidat au titre de Membre du Club
 
Inscription : juillet 2004
Messages : 66
Détails du profil
Informations forums :
Inscription : juillet 2004
Messages : 66
Points : 13
Points : 13
j ai un msg d erreur ds le code que tu m as donné

au niveau de la macro create dialog sur "dlg.show"

Citation:
erreur 1004 au moment de l'execution
erreur sur la méthode show de l objet dialogsheet
je ne vois pas du tt d ou cela peut venir
qqun saurait?

merci davance
hiline6 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 29/11/2006, 19h30   #11
Membre éclairé
 
Inscription : octobre 2006
Messages : 390
Détails du profil
Informations forums :
Inscription : octobre 2006
Messages : 390
Points : 396
Points : 396
Voici qq corrections :
Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
 
Public champ As String
Public feuille As Worksheet
Public tcd As PivotTable
 
Sub CreateDialog()
    Dim dlg, d, sh As Shape, lstb As Object
    Dim pi As PivotItem, dlgExist As Boolean
    Application.ScreenUpdating = False
 
    ' A parametrer suivant tes donnees
    Set feuille = Feuil1 ' feuille du tcd
    champ = "MES"      ' champ de page
 
    dlgExist = False
    For Each d In ThisWorkbook.DialogSheets
        If d.Name = "dlgTCD" Then
            dlgExist = True
            Exit For
        End If
    Next d
    If Not dlgExist Then
        Set dlg = ThisWorkbook.DialogSheets.Add(After:=ThisWorkbook.Sheets(ThisWorkbook.Sheets.Count))
        dlg.Name = "dlgTCD"
        Set sh = dlg.Shapes(1)
        sh.TextFrame.Characters.Text = "Select filtering values for [" & champ & "]"
        Set lstb = dlg.ListBoxes.Add(sh.Left + 10, sh.Top + 20, sh.Width - 100, sh.Height - 30)
        lstb.Name = "ListBoxTCD"
        lstb.MultiSelect = xlSimple
    Else
        Set dlg = ThisWorkbook.DialogSheets("dlgTCD")
        Set lstb = dlg.ListBoxes("ListBoxTCD")
        lstb.RemoveAllItems
    End If
    Set tcd = feuille.PivotTables(1)
    For Each pi In tcd.PivotFields(champ).PivotItems
        lstb.AddItem pi.Value
    Next pi
    i = 1
    For Each pi In tcd.PivotFields(champ).PivotItems
        If pi.Visible = True Then
            lstb.Selected(i) = True
        Else: lstb.Selected(i) = False
        End If
        i = i + 1
    Next pi
    dlg.Shapes(2).OnAction = "FilterPivot"
    With dlg.Shapes(3)
        .TextFrame.Characters.Text = "Select All"
        .OnAction = "SelectAllList"
    End With
    dlg.Visible = True
    dlg.Activate
    dlg.Shapes(3).Select
    With Selection
        .DefaultButton = False
        .CancelButton = False
        .DismissButton = False
        .HelpButton = False
        .Accelerator = ""
    End With
    dlg.Visible = False
    feuille.Activate
    Application.ScreenUpdating = True
    dlg.Show
    Set d = Nothing
    Set pi = Nothing
    Set lstb = Nothing
    Set sh = Nothing
    Set dlg = Nothing
End Sub
 
Sub FilterPivot()
    Dim dlg, lstb As Object
    Set dlg = ThisWorkbook.DialogSheets("dlgTCD")
    Set lstb = dlg.ListBoxes("ListBoxTCD")
    nb = 0
    For i = 1 To lstb.ListCount
        If i < lstb.ListCount Or (i = lstb.ListCount And nb > 0) Then
            If lstb.Selected(i) Then
                tcd.PivotFields(champ).PivotItems(lstb.List(i)).Visible = True
                nb = nb + 1
            Else: tcd.PivotFields(champ).PivotItems(lstb.List(i)).Visible = False
            End If
        Else
            If lstb.Selected(i) Then
                tcd.PivotFields(champ).PivotItems(lstb.List(i)).Visible = True
            Else ' No item selected
                For j = 1 To lstb.ListCount
                    tcd.PivotFields(champ).PivotItems(lstb.List(j)).Visible = True
                Next j
            End If
        End If
    Next i
    tcd.PivotFields(champ).CurrentPage = "(Tous)"
End Sub
 
Sub SelectAllList()
    Dim dlg, lstb As Object
    Set dlg = ThisWorkbook.DialogSheets("dlgTCD")
    Set lstb = dlg.ListBoxes("ListBoxTCD")
    If dlg.Shapes(3).TextFrame.Characters.Text = "Select All" Then
        For i = 1 To lstb.ListCount
            lstb.Selected(i) = True
        Next i
        dlg.Shapes(3).TextFrame.Characters.Text = "Un-select All"
    Else
        For i = 1 To lstb.ListCount
            lstb.Selected(i) = False
        Next i
        dlg.Shapes(3).TextFrame.Characters.Text = "Select All"
    End If
End Sub
PS. Affiche et supprime la feuille de Dialogue dlgTCD
dadavyvy est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 29/11/2006, 21h12   #12
Candidat au titre de Membre du Club
 
Inscription : juillet 2004
Messages : 66
Détails du profil
Informations forums :
Inscription : juillet 2004
Messages : 66
Points : 13
Points : 13
re-bonjour

en fait je ne vois pas de modification
et le fait d afficher de supprimer ne change rien j ai tenté dejà
hiline6 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 29/11/2006, 21h30   #13
Membre éclairé
 
Inscription : octobre 2006
Messages : 390
Détails du profil
Informations forums :
Inscription : octobre 2006
Messages : 390
Points : 396
Points : 396
Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
Public champ As String
Public feuille As Worksheet
Public tcd As PivotTable

Sub CreateDialog()
    Dim dlg, d, sh As Shape, lstb As Object
    Dim pi As PivotItem, dlgExist As Boolean
    Application.ScreenUpdating = False

    ' A parametrer suivant tes donnees
    Set feuille = Feuil1 ' feuille du tcd
    champ = "MES"      ' champ de page

    dlgExist = False
    For Each d In ThisWorkbook.DialogSheets
        If d.Name = "dlgTCD" Then
            dlgExist = True
            Exit For
        End If
    Next d
    If Not dlgExist Then
        Set dlg = ThisWorkbook.DialogSheets.Add(After:=ThisWorkbook.Sheets(ThisWorkbook.Sheets.Count))
        dlg.Name = "dlgTCD"
        Set sh = dlg.Shapes(1)
        sh.TextFrame.Characters.Text = "Select filtering values for [" & champ & "]"
        Set lstb = dlg.ListBoxes.Add(sh.Left + 10, sh.Top + 20, sh.Width - 100, sh.Height - 30)
        lstb.Name = "ListBoxTCD"
        lstb.MultiSelect = xlSimple
    Else
        Set dlg = ThisWorkbook.DialogSheets("dlgTCD")
        Set lstb = dlg.ListBoxes("ListBoxTCD")
        lstb.RemoveAllItems
    End If
    Set tcd = feuille.PivotTables(1)
    For Each pi In tcd.PivotFields(champ).PivotItems
        lstb.AddItem pi.Value
    Next pi
    i = 1
    For Each pi In tcd.PivotFields(champ).PivotItems
        If pi.Visible = True Then
            lstb.Selected(i) = True
        Else: lstb.Selected(i) = False
        End If
        i = i + 1
    Next pi
    dlg.Shapes(2).OnAction = "FilterPivot"
    With dlg.Shapes(3)
        .TextFrame.Characters.Text = "Select All"
        .OnAction = "SelectAllList"
    End With
    dlg.Visible = True
    dlg.Activate
    dlg.Shapes(3).Select
    With Selection
        .DefaultButton = False
        .CancelButton = False
        .DismissButton = False
        .HelpButton = False
        .Accelerator = ""
    End With
    dlg.Visible = False
    feuille.Activate
    Application.ScreenUpdating = True
    dlg.Show
    Set d = Nothing
    Set pi = Nothing
    Set lstb = Nothing
    Set sh = Nothing
    Set dlg = Nothing
End Sub

Sub FilterPivot()
    Dim dlg, lstb As Object
    Set dlg = ThisWorkbook.DialogSheets("dlgTCD")
    Set lstb = dlg.ListBoxes("ListBoxTCD")
    nb = 0
    For i = 1 To lstb.ListCount
        If i < lstb.ListCount Or (i = lstb.ListCount And nb > 0) Then
            If lstb.Selected(i) Then
                tcd.PivotFields(champ).PivotItems(lstb.List(i)).Visible = True
                nb = nb + 1
            Else: tcd.PivotFields(champ).PivotItems(lstb.List(i)).Visible = False
            End If
        Else
            If lstb.Selected(i) Then
                tcd.PivotFields(champ).PivotItems(lstb.List(i)).Visible = True
            Else ' No item selected
                For j = 1 To lstb.ListCount
                    tcd.PivotFields(champ).PivotItems(lstb.List(j)).Visible = True
                Next j
            End If
        End If
    Next i
    tcd.PivotFields(champ).CurrentPage = "(Tous)"
End Sub

Sub SelectAllList()
    Dim dlg, lstb As Object
    Set dlg = ThisWorkbook.DialogSheets("dlgTCD")
    Set lstb = dlg.ListBoxes("ListBoxTCD")
    If dlg.Shapes(3).TextFrame.Characters.Text = "Select All" Then
        For i = 1 To lstb.ListCount
            lstb.Selected(i) = True
        Next i
        dlg.Shapes(3).TextFrame.Characters.Text = "Un-select All"
    Else
        For i = 1 To lstb.ListCount
            lstb.Selected(i) = False
        Next i
        dlg.Shapes(3).TextFrame.Characters.Text = "Select All"
    End If
End Sub
En rouge les modif...
Ensuite, c'etait un exemple a adapter. En fait la macro createDialog, comme tu l'as compris, crée la boite de dialog entierement, sauf si elle existe. Tu peux t'en passer, si tu crées toi-même la boite de dialog.
Cette boite de dialog est faite avec un DialogSheet, et non un Userform. Si vraiment ca marche pas avec un dialogsheet, crée toi-meme l'userform.

PS. desole, je n'ai pas vraiment commenté le code, car un peu pressé...
dadavyvy est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 29/11/2006, 22h52   #14
Candidat au titre de Membre du Club
 
Inscription : juillet 2004
Messages : 66
Détails du profil
Informations forums :
Inscription : juillet 2004
Messages : 66
Points : 13
Points : 13
ok d acc
bon je l ai fait pour plusieurs dialogsheet, auras tu une idée pour le slier entre eux
si on sélectionne un élément de la dlg1, certains élément de la dlg2 s affiche et de la dlg3
idem pour un autre éléement

par ex :un ex tt simple

dlg1 contient les regions, et dlg2 les département et dlg3 des villes
qd on sélectionne ile de france ds dlg1 : dlg2 ne fait qu apparaitre que les dep d'ile de france et dlg3 villes d ile de france

je sais pas comment gérer cela pour que ce soit qd mm assez rapide et pas trop difficile à maintenir
hiline6 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 30/11/2006, 18h42   #15
Membre éclairé
 
Inscription : octobre 2006
Messages : 390
Détails du profil
Informations forums :
Inscription : octobre 2006
Messages : 390
Points : 396
Points : 396
Ah, je vois, tu essaies de résoudre le probleme posé dans un autre post...
Normalement, si tes données sont bien faites, ton TCD s'en charge et filtrera lui-meme.
Car dans ton tableau de données par exemple, tu devrais avoir :
Code :
1
2
3
4
5
6
Col1      Pays      Region    Ville
truc      France    IDF       Paris
truc2     France    IDF       Vincennes
truc3     France    Rhone     Lyon
truc4     USA       CA        Los Angeles
etc...
Mais tu ne devrais jamais avoir :
Ainsi ton TCD n'affichera pas, me semble-t-il, si tu filtres sur France pour Pays, la ville de Los Angeles.

Edit : Autant pour moi... Il affiche tjs Los Angeles dans le champ de page Ville... Toi, tu voudrais carrément masquer L.A. ? ou juste ne plus filtrer ni sur région, ni sur ville, et ainsi afficher toutes les données de France ?
dadavyvy est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 30/11/2006, 21h40   #16
Candidat au titre de Membre du Club
 
Inscription : juillet 2004
Messages : 66
Détails du profil
Informations forums :
Inscription : juillet 2004
Messages : 66
Points : 13
Points : 13
ben en fait mon tableau de données est assez bienf ait je pense
je voudrais que qd je sélectionne, france ds le dialogsheet crée plus haut, qu il m affchie ds le dialogsheet de departement, les dept de france et dss celui des villes, les villes de france et qd une selectionne un dept, il n affiche que les villes du dept sélectionné

ainsi ds mon tcd, je peux avoir un tcd par dept, par ville ou par pays selon les choix
hiline6 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 30/11/2006, 21h53   #17
Membre éclairé
 
Inscription : octobre 2006
Messages : 390
Détails du profil
Informations forums :
Inscription : octobre 2006
Messages : 390
Points : 396
Points : 396
Dans ce cas, il ne faut pas charger tes listbox avec les valeurs des champs du TCD, mais avec les données elles-mêmes, car seules les données peuvent te donner la liaison entre le Pays, la Région et la Ville.

Ensuite à toi de parcourir le tableau de données pour filtrer sur le Pays par exemple, et trouver toutes les régions et villes qui correspondent, pour charger les 2 autres listboxes. Pour cela, tu fais des boucles, ou bien tu t'aides du filtre automatique. Les boucles sont moins lourdes que le filtre auto.
dadavyvy est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 30/11/2006, 22h03   #18
Candidat au titre de Membre du Club
 
Inscription : juillet 2004
Messages : 66
Détails du profil
Informations forums :
Inscription : juillet 2004
Messages : 66
Points : 13
Points : 13
je vois pas du tt ce que tu veux me faire faire
hiline6 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 30/11/2006, 23h19   #19
Membre éclairé
 
Inscription : octobre 2006
Messages : 390
Détails du profil
Informations forums :
Inscription : octobre 2006
Messages : 390
Points : 396
Points : 396
Supposons que tes données sources sont dans la Feuil1, col. Pays = 2, col. Region = 3, col. Ville =4
Initialisation globale des 3 listboxes:
Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
Dim listTotal1 As String, listTotal2 as String, listTotal3 As String
Dim col1, col2, col3, lstb1, lstb2, lstb3
listTotal1 = "": listTotal2 = "": listTotal3 = "" ' Contiennent toutes les valeurs ajoutées dans les listboxes séparées par des "#"
col1 = 2: col2 = 3: col3 = 4
Set lstb1 = DialogSheets("dlgPays")
Set lstb2 = DialogSheets("dlgRegion")
Set lstb3 = DialogSheets("dlgVille")
For i = 2 to Feuil1.UsedRange.Rows.Count
     If Not listTotal1 Like "*#" & Feuil1.Cells(i, col1) & "#*" Then ' Ce pays n'a pas déjà été rajouté
          lstb1.AddItem Feuil1.Cells(i, col1)
          listTotal1 = listTotal1 & "#" & Feuil1.Cells(i, col1) & "#"
     End If
     ' idem pour lstb2, lstb3...
Next i
Ensuite sur la validation du dlg1 (Pays) :
Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
Dim listSelect1
listSelect1 = "" ' Contient toutes les valeurs sélectionnées par l'utilisateur séparées par des "#"
For i = 1 To lstb1.ListCount
      If lstb1.Selected(i) Then
           listSelect1 = listSelect1 & "#" & lstb1.List(i) & "#"
      End If
Next i
If listSelect1 <> "" then
      ' La tu inseres le code pour filtrer le TCD sur le pays
      ' (...)
 
      ' La tu parcoures les donnees pour savoir quelles sont les lignes qui font partie des pays filtrés, et tu rajoutes dans les listb2 et listb3 les régions et villes
      listTotal2 = "": listTotal3 = ""
      For j = 2 to Feuil1.UsedRange.Rows.Count
            If listSelect1 Like "*#" & Feuil1.Cells(j, col1) & "#*" Then ' Fait partie d'un des pays sélectionnés
                  If Not listTotal2 Like "*#" & Feuil1.Cells(j, col2) & "#*" Then
                        lstb2.AddItem Feuil1.Cells(j, col2)
                        listTotal2 = listTotal2 & "#" & Feuil1.Cells(j, col2) & "#"
                  End If
                  If Not listTotal3 Like "*#" & Feuil1.Cells(j, col3) & "#*" Then
                        lstb3.AddItem Feuil1.Cells(j, col3)
                        listTotal3 = listTotal3 & "#" & Feuil1.Cells(j, col3) & "#"
                  End If
            End If
      Next j
End If
Tu refais la même chose sur la validation de la région, mais juste pour les villes... etc... etc...
dadavyvy est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 15h20.


 
 
 
 
Partenaires

Hébergement Web