IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

VBA Discussion :

multiselection ds champ de page d un tableau croisé dynamique


Sujet :

VBA

  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Juillet 2004
    Messages
    66
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2004
    Messages : 66
    Points : 44
    Points
    44
    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

  2. #2
    Membre du Club
    Profil pro
    Inscrit en
    Juillet 2004
    Messages
    66
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2004
    Messages : 66
    Points : 44
    Points
    44
    Par défaut
    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

  3. #3
    Membre du Club
    Profil pro
    Inscrit en
    Juillet 2004
    Messages
    66
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2004
    Messages : 66
    Points : 44
    Points
    44
    Par défaut
    non justement ca ne marche pas
    la touche ctrl ne permet pas là de faire de la multiselection
    je ne sais plus quoi faire

  4. #4
    Membre du Club
    Profil pro
    Inscrit en
    Juillet 2004
    Messages
    66
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2004
    Messages : 66
    Points : 44
    Points
    44
    Par défaut
    C est la que je veux faire de la multiselection
    Fichiers attachés Fichiers attachés

  5. #5
    Membre du Club
    Profil pro
    Inscrit en
    Juillet 2004
    Messages
    66
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2004
    Messages : 66
    Points : 44
    Points
    44
    Par défaut
    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

  6. #6
    Membre confirmé
    Profil pro
    Inscrit en
    Octobre 2006
    Messages
    393
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2006
    Messages : 393
    Points : 451
    Points
    451
    Par défaut
    Tiens, essaie avec ca, a adapter suivant ton cas...
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    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()

  7. #7
    Membre du Club
    Profil pro
    Inscrit en
    Juillet 2004
    Messages
    66
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2004
    Messages : 66
    Points : 44
    Points
    44
    Par défaut
    je vais tester cela
    merci bcp

  8. #8
    Membre du Club
    Profil pro
    Inscrit en
    Juillet 2004
    Messages
    66
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2004
    Messages : 66
    Points : 44
    Points
    44
    Par défaut
    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

  9. #9
    Membre confirmé
    Profil pro
    Inscrit en
    Octobre 2006
    Messages
    393
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2006
    Messages : 393
    Points : 451
    Points
    451
    Par défaut
    Il suffit juste rajouter une fonction sur l'un des boutons de la boite de dialogue
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    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

  10. #10
    Membre du Club
    Profil pro
    Inscrit en
    Juillet 2004
    Messages
    66
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2004
    Messages : 66
    Points : 44
    Points
    44
    Par défaut
    j ai un msg d erreur ds le code que tu m as donné

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

    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

  11. #11
    Membre confirmé
    Profil pro
    Inscrit en
    Octobre 2006
    Messages
    393
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2006
    Messages : 393
    Points : 451
    Points
    451
    Par défaut
    Voici qq corrections :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    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

  12. #12
    Membre du Club
    Profil pro
    Inscrit en
    Juillet 2004
    Messages
    66
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2004
    Messages : 66
    Points : 44
    Points
    44
    Par défaut
    re-bonjour

    en fait je ne vois pas de modification
    et le fait d afficher de supprimer ne change rien j ai tenté dejà

  13. #13
    Membre confirmé
    Profil pro
    Inscrit en
    Octobre 2006
    Messages
    393
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2006
    Messages : 393
    Points : 451
    Points
    451
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    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é...

  14. #14
    Membre du Club
    Profil pro
    Inscrit en
    Juillet 2004
    Messages
    66
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2004
    Messages : 66
    Points : 44
    Points
    44
    Par défaut
    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

  15. #15
    Membre confirmé
    Profil pro
    Inscrit en
    Octobre 2006
    Messages
    393
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2006
    Messages : 393
    Points : 451
    Points
    451
    Par défaut
    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 : Sélectionner tout - Visualiser dans une fenêtre à part
    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 ?

  16. #16
    Membre du Club
    Profil pro
    Inscrit en
    Juillet 2004
    Messages
    66
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2004
    Messages : 66
    Points : 44
    Points
    44
    Par défaut
    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

  17. #17
    Membre confirmé
    Profil pro
    Inscrit en
    Octobre 2006
    Messages
    393
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2006
    Messages : 393
    Points : 451
    Points
    451
    Par défaut
    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.

  18. #18
    Membre du Club
    Profil pro
    Inscrit en
    Juillet 2004
    Messages
    66
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2004
    Messages : 66
    Points : 44
    Points
    44
    Par défaut
    je vois pas du tt ce que tu veux me faire faire

  19. #19
    Membre confirmé
    Profil pro
    Inscrit en
    Octobre 2006
    Messages
    393
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2006
    Messages : 393
    Points : 451
    Points
    451
    Par défaut
    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 : Sélectionner tout - Visualiser dans une fenêtre à part
    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 : Sélectionner tout - Visualiser dans une fenêtre à part
    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...

Discussions similaires

  1. Réponses: 3
    Dernier message: 19/03/2014, 09h19
  2. Réponses: 3
    Dernier message: 20/06/2013, 17h24
  3. Réponses: 1
    Dernier message: 04/03/2011, 14h09
  4. Réponses: 3
    Dernier message: 21/02/2011, 14h59
  5. Tableau croisé dynamique Champs texte et numérique
    Par mooh91 dans le forum Requêtes et SQL.
    Réponses: 14
    Dernier message: 18/09/2006, 20h07

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo