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 :

Usf Cascade2nivTries - adaptation à mon cas


Sujet :

Macros et VBA Excel

  1. #1
    Membre actif
    Femme Profil pro
    reconversion en cours
    Inscrit en
    Juillet 2009
    Messages
    631
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : reconversion en cours
    Secteur : Conseil

    Informations forums :
    Inscription : Juillet 2009
    Messages : 631
    Points : 255
    Points
    255
    Par défaut Usf Cascade2nivTries - adaptation à mon cas
    Bonjour,
    je voudrais utiliser un outil proposé par Jacques Boisgontier, mais je n'arrive pas à l'adapter à mon cas.
    J'ai une table (Name : "LstNomTélé") composée de 2 colonnes ([Nom_Télé] et [Dpt]).
    j'ai dans ma Usf (Name : "UsfTbAgt") un 1er Combo "CbxDpt" et un second "CbxPren".
    Je voudrais faire remonter dans CbxDpt la colonne Dpt sans doublon et triée, puis qu'en fonction du Dpt sélectionné, le CbxPren prenne les valeurs correspondantes et triées ; or mes combos restent désespérément vides.
    J'ai compris en grande partie le code de M Boisgontier, mis à part la Sub Tri.
    NB : J'ai bien accès à “Microsoft Scripting" dans mes références.
    Voici le 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
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    Option Explicit
    Dim MonDico As New Scripting.Dictionary
    Dim c As String
    Dim temp As Variant
    '----------------------------------------
    Private Sub CbtAnnul_Click()
    Unload Me
    End Sub
    Private Sub UsfTbAgt_Initialize()
      Set MonDico = CreateObject("Scripting.Dictionary")
      For Each c In Range("TbAg[Dpt]").Rows   ' on explore la colonne de niveau 1
        MonDico(c.Value) = ""                 ' on ajoute l'élément de la CbxDpt au dictionnaire
      Next c
      temp = MonDico.keys      'les clés du dico dans la table temp()
      Call Tri(temp, LBound(temp), UBound(temp))
      Me.CbxDpt.List = temp
    End Sub
    '----------------------------------------------
    Private Sub CbxDpt_click()
     Me.CbxPren.Clear    'CbxDpt = 1ère Combo   CbxPren = 2ème combo
      Set MonDico = CreateObject("Scripting.Dictionary")
      For Each c In Range("TbAg[Dpt]").Rows     ' on explore la colonne de niveau 1
         If c = Me.CbxDpt Then MonDico(c.Offset(, -1).Value) = ""   ' si CbxDpt alors on ajoute l'élément de la sous-famille au dictionnaire
      Next c
      temp = MonDico.keys        'les clés du dico dans la table temp()
      Call Tri(temp, LBound(temp), UBound(temp))
      Me.CbxPren.List = temp
    End Sub
    '--------------------------------------------
    Sub Tri(a, gauc, droi) ' Quick sort
       ref = a((gauc + droi) \ 2)
       g = gauc: D = droi
       Do
          Do While a(g) < ref: g = g + 1: Loop
          Do While ref < a(D): D = D - 1: Loop
          If g <= D Then
            temp = a(g): a(g) = a(D): a(D) = temp
            g = g + 1: D = D - 1
         End If
       Loop While g <= D
       If g < droi Then Call Tri(a, g, droi)
       If gauc < D Then Call Tri(a, gauc, D)
    End Sub
    Est-ce que quelqu'un peut m'aider, svp.
    Merci d'avance

  2. #2
    Membre actif
    Femme Profil pro
    reconversion en cours
    Inscrit en
    Juillet 2009
    Messages
    631
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : reconversion en cours
    Secteur : Conseil

    Informations forums :
    Inscription : Juillet 2009
    Messages : 631
    Points : 255
    Points
    255
    Par défaut
    J'ai trouvé le 1er Pb, j'ai utilisé le nom de ma USF
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Private Sub UsfTbAgt_Initialize()
    au lieu de
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Private Sub UserForm_Initialize
    .
    Maintenant, j'ai un problème pour la déclaration des données ; je ne comprends, car en désespoir, j'ai mis une apostrophe devant 'Option Explicit, mais cela ne semble pas suffire.
    Voilà ce que j'ai fait :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    'Option Explicit
    Dim f   as Worksheets
    Dim MonDico As Scripting object
    Dim c As Object
    Dim temp   'table temporaire du dico
    Dim a, gauc, droi   'variables des tris
    Dim ref, g, D       'autre variables de tris
    Quand je fais du pas à pas, tout se déroule bien, jusqu'à la ligne
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
         temp = a(g): a(g) = a(D): a(D) = temp
    de la procédure Sub Tri, où quand g=2 et D=2, a(g) et a(D) renvoient "Incompatibilité de type"

    Est-ce quelqu'un peut m'aider ou au moins m'expliquer comment fonctionne ce tri ?
    J'ai essayé Temp as Variant, Temp as Object, Temp as String rien ne fonctionne...

  3. #3
    Membre actif
    Femme Profil pro
    reconversion en cours
    Inscrit en
    Juillet 2009
    Messages
    631
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : reconversion en cours
    Secteur : Conseil

    Informations forums :
    Inscription : Juillet 2009
    Messages : 631
    Points : 255
    Points
    255
    Par défaut
    Bonjour,
    je relance ma demande d'aide, car je n'ai pas de réponse, peut-êtr ne suis-je pas assez clair ?
    Pourrait-on me corriger dans un premier temps l'affectation de mes variables pour trier ma combobox, svp.
    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
    Dim f   as Worksheets
    Dim MonDico As Scripting object
    Dim c As Object
    Dim temp   'table temporaire du dico
    Dim a, gauc, droi   'variables des tris
    Dim ref, g, D      
    Sub Tri(a, gauc, droi) 
       ref = a((gauc + droi) \ 2)
       g = gauc: D = droi
       Do
          Do While a(g) < ref: g = g + 1: Loop
          Do While ref < a(D): D = D - 1: Loop
          If g <= D Then
            temp = a(g): a(g) = a(D): a(D) = temp
            g = g + 1: D = D - 1
         End If
       Loop While g <= D
       If g < droi Then Call Tri(a, g, droi)
       If gauc < D Then Call Tri(a, gauc, D)
    End Sub
    merci de votre aide

Discussions similaires

  1. [XL-2010] Usf Cascade2nivTries - pb d'adaptation à mon cas
    Par mouftie dans le forum Macros et VBA Excel
    Réponses: 7
    Dernier message: 03/10/2016, 21h16
  2. CDlive Router dans mon cas
    Par Death83 dans le forum Développement
    Réponses: 1
    Dernier message: 11/10/2005, 17h34
  3. adapter mon application a l'anglais
    Par fatima dans le forum ASP
    Réponses: 2
    Dernier message: 30/09/2005, 15h53
  4. [Débutant][JList] Comment ça marche dans mon cas ?
    Par gcore dans le forum Composants
    Réponses: 31
    Dernier message: 28/06/2004, 11h45
  5. Quel type de BDD dans mon cas
    Par zoubidaman dans le forum Décisions SGBD
    Réponses: 4
    Dernier message: 10/06/2004, 19h00

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