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

Macros et VBA Excel Discussion :

Gestion de trois Listes déroulante avec tableau 3 dimmensions est-ce bon ?


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre émérite Avatar de Valtrase
    Homme Profil pro
    Jeune retraité...
    Inscrit en
    Janvier 2016
    Messages
    510
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 66
    Localisation : France, Pyrénées Orientales (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Jeune retraité...
    Secteur : Boutique - Magasin

    Informations forums :
    Inscription : Janvier 2016
    Messages : 510
    Par défaut Gestion de trois Listes déroulante avec tableau 3 dimmensions est-ce bon ?
    Bonjour à tous,
    Je vous expose mon problème :
    Sur une feuille d'un classeur Excel J'ai quatre Listes déroulantes (ActiveX)
    • Une pour les dates
    • Une pour les salles de classes. (qui vont de 1 à 3, avec une colonne ID et une colonne Nom)
    • une pour les heures de début de cours. (qui vont de 8h à 17h par pas de 30mn, donc 18 entrées, avec une colonne ID et une colonne Nom)
    • une pour les heures de fin de cours.(qui vont de 8h à 17h par pas de 30mn, donc 18 entrées, avec une colonne ID et une colonne Nom)

    Les données sont stockées dans un tableau avec les colonnes Dates, Classes, Id Heure début, Id Heure fin, Id Professeur.
    Les listes déroulantes sont sélectionnées dans l'ordre Dates, Classes, Heures de début, Heures de fin.

    J'aimerais à la sélection d'une date dans la liste déroulante Dates. Que le programme ne sélectionne que les classes qui ont des plages d'heures de libres.
    Puis à la sélection d'une classe n'afficher que les plages horaires libres.
    Puis a la sélection d'une heure de début ne sélectionner que les plages d'heures supérieures. (ça c'est bon j'ai fait déjà)
    Pour ce faire je voulais utiliser un tableau à trois dimension la première fixe serait les classes, la deuxième fixe serait les plages, et la troisième serait les dates.

    Vous en pensez quoi ? il y a t-il une meilleure solution pour gérer cela.

    Pièce jointe 648867

  2. #2
    Expert confirmé Avatar de BENNASR
    Homme Profil pro
    Responsable comptable & financier
    Inscrit en
    Décembre 2013
    Messages
    2 974
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Tunisie

    Informations professionnelles :
    Activité : Responsable comptable & financier
    Secteur : Finance

    Informations forums :
    Inscription : Décembre 2013
    Messages : 2 974
    Par défaut
    Bonjour et bonne année 2024 pour tout le monde
    pour faire bouger cette discussion je propose ce début de piste
    NB :
    C'est avec un userform
    Quand tu fais la saisie de la date et la classe ... le combobox2 s'alimente avec les ID début non renseigné dans le tableau
    à tester avec prudence je ne suis qu'un autodidacte

    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
    Private Sub ComboBox1_Change()
    ComboBox2.Clear
    Dim Tablo
    Dim Manque As Object, el As Range
    Set Manque = CreateObject("System.Collections.ArrayList")
    For Each el In Sheets("Feuil1").Range("H3:H20")
      Manque.Add el.Text
    Next el
    With Sheets("Feuil1")
      Tablo = .Range("A3", "E" & .Range("A" & .Rows.Count).End(xlUp).Row)
    End With
    On Error Resume Next
    For i = 1 To UBound(Tablo, 1)
      If CDate(TextBox1.Value) = CDate(Tablo(i, 1)) And CStr(ComboBox1.Value) = CStr(Tablo(i, 2)) Then
        For Sup = 0 To Manque.Count - 1
          If CStr(Manque(Sup)) = CStr(Tablo(i, 3)) Then
            Manque(Sup) = "x"
          End If
        Next Sup
      End If
    Next i
    For Sup = 0 To Manque.Count - 1
      If Manque(Sup) <> "x" Then
        ComboBox2.AddItem Manque(Sup)
      End If
    Next Sup
    End Sub
    Fichiers attachés Fichiers attachés

  3. #3
    Membre Expert
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    1 511
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Juillet 2006
    Messages : 1 511
    Par défaut
    Salut,

    Tableau 3D, tu veux dire tableau à 3 colonnes ?
    Ce n'est pas tout à fait la même chose.
    Le premier s'apparente plus à un cube dans l'espace tri-dimensionnel, le second est un tableau 2D.

    Donc, en partant sur un tableau à 3 colonnes (ce qui me parait le plus plausible), pourquoi pas.
    Encore faut-il qu'il y aie une relation 1:1 entre les données qui le compose.
    S'il y a une relation 1:n (ce qui semble être ton cas), c'est cuit.

    Plus généralement, on préfèreras mettre dans un tableau, des données qui veulent dire la même chose, histoire d'éviter les confusions (melanger des classes, profs, horaires, dans un même tableau, sans aucun lien entre eux, n'a pas de sens).

  4. #4
    Membre émérite Avatar de Valtrase
    Homme Profil pro
    Jeune retraité...
    Inscrit en
    Janvier 2016
    Messages
    510
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 66
    Localisation : France, Pyrénées Orientales (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Jeune retraité...
    Secteur : Boutique - Magasin

    Informations forums :
    Inscription : Janvier 2016
    Messages : 510
    Par défaut
    Salut à tous,
    Merci pour vos réponses.
    Je vais partir travailler de nuit et oui, je regarderais donc tout cela plus tard.

  5. #5
    Membre émérite Avatar de Valtrase
    Homme Profil pro
    Jeune retraité...
    Inscrit en
    Janvier 2016
    Messages
    510
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 66
    Localisation : France, Pyrénées Orientales (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Jeune retraité...
    Secteur : Boutique - Magasin

    Informations forums :
    Inscription : Janvier 2016
    Messages : 510
    Par défaut
    Salut à tous,
    Bon il est des fois ou l'on a le cerveau embrumé, et là je crois que c'était le cas.
    La finalité de l'histoire était de savoir si un classe était libre pour une date et un créneau horaire. J'ai donc intervertie l'ordre des contrôles en : Date, Heure début, Heure fin, Classe.
    Et là tout devient plus simple à gérer pour moi. Remplissage des listes déroulantes, avec les valeurs de la deuxième supérieures à la valeur sélectionnée de la première. Ensuite un simple test sur la date et les plages sélectionnées, si c'est positif je supprime la classe de la liste déroulante Classes.

    Deedolight, Effectivement j'ai compris assez rapidement qu'un tableau n'était pas la bonne solution.
    Bennasr, Merci pour le code, je n'ai pas tout de suite pensé aux ArrayList, Cela peut-être une bonne solution.

    Je note donc en résolu.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Trois listes liées avec jquery.chained.min.js
    Par christophetriboulet dans le forum jQuery
    Réponses: 1
    Dernier message: 18/02/2016, 20h04
  2. Réponses: 10
    Dernier message: 29/04/2011, 12h02
  3. [WD14] Liste Clé de tableau associatif avec doublons
    Par mail.spam dans le forum WinDev
    Réponses: 2
    Dernier message: 27/10/2009, 17h10
  4. [SimpleXML] Gestion d'une liste avec xml
    Par juninho269 dans le forum Bibliothèques et frameworks
    Réponses: 4
    Dernier message: 29/05/2008, 17h06
  5. Gestion de 5 listes déroulantes liées avec paramètres SQL
    Par kenshir0 dans le forum Servlets/JSP
    Réponses: 1
    Dernier message: 06/04/2007, 18h46

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