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

IHM Discussion :

Comment faire un regroupement de valeur par VBA?!


Sujet :

IHM

  1. #1
    Membre régulier
    Inscrit en
    Juin 2007
    Messages
    106
    Détails du profil
    Informations personnelles :
    Âge : 42

    Informations forums :
    Inscription : Juin 2007
    Messages : 106
    Points : 70
    Points
    70
    Par défaut Comment faire un regroupement de valeur par VBA?!
    Bonjour à vous tous,

    Encore une fois j'aurais besoin d'un expert pouvant m'aider à résoudre mon problème qui n'est peut-être pas si difficile que ça, je ne suis qu'un simple débutant en programmation.

    J'ai réussi à trouver un code pouvant me permettre d'afficher dans une zone de liste les différents choix disponibles dans ma table selon la colonne que je lui ai indiqué.

    Par exemple, quand je clique sur un ou plusieurs choix de ma première zone de liste (= aux choix possible de ma 1ère colonne dans mon unique table "plein texte"), la 2e liste prends les valeurs de la 2e colonne de mon unique table "plein texte", mais ces valeurs dépendent des valeurs sélectionnés dans ma première zone de liste. (C'est beaucoup de virgule pour une seule phrase, mais bon....).

    Ceci est dans le but de permettre la sélection multiple en cascades. Jusqu'à maintenant, le code que j'ai donné à mes zones de listes fonctionnent très bien. Là où il y a problème, c'est que les données qui sont présentent plusieurs fois dans ma table ne sont pas regroupées dans ma liste. Par exemple, j'ai 4 compagnies qui vendent des produits dans un certain secteur commercial, il peut arriver que plusieurs produits dans chacune des compagnies fassent partie de segments identiques (par exemple, Nike, Addidas et NewBalance fabriquent tous les 3 des espadrilles dans le segment SPORTIF, etc). C'est à ce moment qu'on peut constater le problème, puisque lorsque je sélectionne Nike et Addidas, la zone de liste SEGMENT va présenter toutes les valeurs "SPORTIF, DELUXE, etc" de chacune des compagnies....donc s'il y en a 3000, la zone de liste aura 3000 valeurs....et moi je ne veux pas répéter ces valeurs. Si quelqu'un sait comment adapter le code que j'ai généré j'en serais ravi! J'espère que mes explications étaient complètes. Voici maintenant le code qui m'aide relativement à mettre en place mon projet.

    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
    Private Sub Liste0_Click() ' Lorsque je clique voici ce qui se passe
     
     
    Dim Q As String
     
        'Sélectionne la colonne Segment de la table Prix
        Q = "SELECT Segment FROM tbl_Prix  WHERE (false)"
     
        For i = 0 To Liste0.ListCount - 1
            If Liste0.Selected(i) Then 
                Q = Q & " OR (Compagnie='" & Liste0.Column(0, i) & "')"
            End If
        Next i
     
        Liste2.RowSource = Q 'La liste 2 prendra les valeurs de Q
        Liste2.Requery 'La liste 2 se rafraichira sur chaque clic
     
     
    End Sub

  2. #2
    Membre chevronné

    Profil pro
    Inscrit en
    Avril 2006
    Messages
    1 399
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2006
    Messages : 1 399
    Points : 2 221
    Points
    2 221
    Par défaut
    bonjour,

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Q = "SELECT Segment FROM tbl_Prix  WHERE (false)"
    Essayer plutôt, si j'ai bien compris :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Q = "SELECT DISTINCT Segment FROM tbl_Prix  WHERE (false)"
    cordialement,

    philippe

  3. #3
    Membre régulier
    Inscrit en
    Juin 2007
    Messages
    106
    Détails du profil
    Informations personnelles :
    Âge : 42

    Informations forums :
    Inscription : Juin 2007
    Messages : 106
    Points : 70
    Points
    70
    Par défaut
    WATATOW!!!!! Merci beaucoup, un seul mot et tout fonctionne (enfin, presque...faudra espérer ne pas faire face à une millième embûche). Je fais tous mes test et je croise les doigts

    Cordialement,

    Athos7776

  4. #4
    Membre régulier
    Inscrit en
    Juin 2007
    Messages
    106
    Détails du profil
    Informations personnelles :
    Âge : 42

    Informations forums :
    Inscription : Juin 2007
    Messages : 106
    Points : 70
    Points
    70
    Par défaut
    Ouin....comme je le croyais, il y a encore quelque chose qui ne fonctionne pas. Maintenant, je suis capable de le faire en cascade, mais encore avec une petite nuance!!! Je m'explique.

    Mon code est bien entendu inspiré de Requêtes SQL qui m'aident à construire mes conditions WHERE!!! Si on observe ma table, je peux la décrire et la simplifier comme suit : J'ai une seule et unique table "plein texte" avec plusieurs colonnes (11 dans mon cas). En simplifiant l'exemple, supposons que je n'ai seulement 3 colonnes. La première étant les "Compagnies", la 2e représentant les "Segment" et la 3e représentant les "Marques". Pour le moment, tout va bien puisqu'il y a plusieurs marques différentes dans un seul segment etc. Par contre, la marque est autant influencé par la Compagnie qui la représente que par le Segment auquel il appartient. C'est pourquoi, il est logique de penser que lorsque je clique dans mon formulaire dans la zone de liste qui représente les compagnies, la sélection faite devienne donc un CRITÈRE SQL (clause WHERE) afin de filtrer la Requête en conséquence. Ensuite, il ne faut pas oublier que lorsque je clique dans ma 2e zone de liste qui représente les Segments, ces sélections filtrent encore une fois ma requête en conséquence. Pour la fin, je n'ai bien entendu besoin que de spécifier SELECT DISTINCT dans mon SQL et de masquer les 2 dernières colonnes afin de ne voir s'afficher que les Marques qui dépendent des Critères de ma Requête.


    Voici donc comment j'ai décidé d'écrire ceci dans mon code.
    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
     
    Private Sub Liste2_Click()
     
    Dim Q As String
     
        'Sélectionne la colonne Marque de la table Prix
        Q = "SELECT DISTINCT Marque FROM tbl_Prix WHERE (false)"
     
        For i = 0 To Liste2.ListCount - 1
            If Liste2.Selected(i) Then
                'Q OU comme critère la Compagnie= aux sélections de la Liste0 ET pour critère les sélections de la Liste2
                 Q = Q & " OR (Compagnie='" & Liste0.Column(0, i) & "') AND (Segment='" & Liste2.Column(0, i) & "')" 
            End If
        Next i
        MsgBox Q ' Boite de message pour m'aider à comprendre ce que fera Q chaque fois que je clique
        Liste4.RowSource = Q 'La liste 4 prendra les valeurs de Q
        Liste4.Requery 'La liste 4 se rafraichira sur chaque clic
     
    End Sub
    Jusqu'ici tout semble bien. Mais quand j'exécute le tout on dirait que la requête ne se fait pas tout à fait comme je le veux. Je l'ai testé sur une vraie requête et tout fonctionne, sauf que c'est différent puisque mes Critères de restrictions sont fait selon des Valeur et non des Sélections de Listes. On dirait que le Where de ma fonction choisit les valeurs qu'il veut et non toutes les valeurs. Parfois je clique sur une Compagnie et lorsque je clique sur le Segment ensuite, (dans ma MsgBox) ca ne m'indique pas nécessairement l'entreprise sur laquelle j'ai cliqué précédemment, etc. J'espère que j'ai été clair dans mes commentaires. Si jamais quelqu'un pouvait m'aider à comprendre ce serait gentil. Voici une image d'une requête qui fonctionne et qui exprime ce que je veux dans mon code.
    Images attachées Images attachées  

Discussions similaires

  1. Réponses: 6
    Dernier message: 25/08/2006, 15h16
  2. Réponses: 11
    Dernier message: 07/08/2006, 10h14
  3. [Conception] Comment faire pour bloquer une valeur pendant 24H
    Par lolodelp dans le forum PHP & Base de données
    Réponses: 4
    Dernier message: 07/07/2006, 15h46
  4. Réponses: 4
    Dernier message: 05/06/2006, 11h34
  5. Faire une MAJ de recordsetclone par VBA.
    Par electrosat03 dans le forum Access
    Réponses: 4
    Dernier message: 03/02/2006, 17h42

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