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 :

remplissage optimal de combobox selon condition


Sujet :

Macros et VBA Excel

  1. #1
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Février 2008
    Messages
    66
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2008
    Messages : 66
    Points : 37
    Points
    37
    Par défaut remplissage optimal de combobox selon condition
    Bonjour tout le monde,

    Afin de remplir mes combobox (sans doublon), j'ai utilisé la structure comme dans le FAQ :

    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
     
    Private Sub ComboBox2_Change()
     
    Dim Cellab As Range
    Dim Tableauab()
    Dim TempTabab As Variant
    Dim iab As Integer, jaa As Integer
    Dim boolVerifab As Boolean
     
    If ComboBox1.Value = "" Then
        ComboBox2.Visible = False
        ComboBox2.Enabled = False
        Feuil1.Range("B21") = ""
    Else
        ComboBox2.Visible = True
        ComboBox2.Enabled = True
        Feuil1.Range("B21") = "Sélectionner la ville"
     
        ReDim Tableauab(1 To 1)
        Tableauab(1) = Cells(1, 1)
        kab = 0
     
        If ComboBox1.Value = "France" Then
        'Boucle sur les données de la colonne C, dans la Feuil1
        For Each Cellac In Feuil4.Range("C2:C364")
     
            boolVerifac = False
     
            'Vérifie si le contenu de la cellule existe déjà dans le tableau
            For iac = 1 To UBound(Tableauac)
                'Si la donnée existe déjà dans le tableau
                If Tableauac(iac) = Cellac Then
                    boolVerifac = True
                    Exit For
                End If
            Next iac
     
            'Si la donnée n'existe pas dans le tableau, on augmente la taille du tableau
            'et on ajoute la donnée.
            If boolVerifac = False Then
                ReDim Preserve Tableauac(1 To UBound(Tableauac) + 1)
                Tableauac(UBound(Tableauac)) = Cellac
            End If
     
            'Tri le contenu du tableau par ordre croissant.
            For iac = 1 To UBound(Tableauac)
                For jac = 1 To UBound(Tableauac)
                    If Tableauac(iac) < Tableauac(jac) Then
                        TempTabac = Tableauac(iac)
                        Tableauac(iac) = Tableauab(jac)
                        Tableauac(jac) = TempTabac
                    End If
                Next jac
            Next iac
     
        Next Cellac
     
        End If
     
        'Alimente le ComboBox
        ComboBox3.List = Tableauab
     
    End Sub

    la présence (ou l'absence) de la valeur dans la Combobox2 est conditionnée par la valeur prise par la Combobox1. La combobox1 étant remplit par les valeur se trouvant sur la colonne B
    Le problème est que ma combobox2 est conditionnée par la Combobox1 et que cette dernière peut acquérir une centaine de valeurs possibles.

    Comment puis je optimiser cet algorithme tout en évitant que ce dernier rame à mort lors de l'application?

  2. #2
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Février 2008
    Messages
    66
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2008
    Messages : 66
    Points : 37
    Points
    37
    Par défaut
    je pense avoir trouvé une solution (désolé du dérangement occasionné)

    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
    Private Sub ComboBox1_Change()
     
    Dim Cellab As Range
    Dim Tableauab()
    Dim TempTabab As Variant
    Dim iab As Integer, jab As Integer, kab As Integer
    Dim boolVerifab As Boolean
     
    If ComboBox1.Value = "" Then
        ComboBox2.Visible = False
        ComboBox2.Enabled = False
        Feuil1.Range("B21") = ""
    Else
        ComboBox2.Visible = True
        ComboBox2.Enabled = True
        Feuil1.Range("B21") = "Sélectionner le secteur"
        Feuil5.Range("B1") = ComboBox1.Value
     
        ReDim Tableauab(1 To 1)
        Tableauab(1) = Cells(1, 1)
        kab = 0
     
        'Boucle sur les données de la colonne A, dans la Feuil1
        For Each Cellab In Feuil4.Range("C2:B" & _
                            Feuil4.Range("C65536").End(xlUp).Row)
     
            kab = kab + 1
            If Feuil4.Range("B" & kab + 1) = Feuil5.Range("B1") Then
     
            boolVerifab = False
     
            'Vérifie si le contenu de la cellule existe déjà dans le tableau
            For iab = 1 To UBound(Tableauab)
                'Si la donnée existe déjà dans le tableau
                If Tableauab(iab) = Cellab Then
                    boolVerifab = True
                    Exit For
                End If
            Next iab
     
            'Si la donnée n'existe pas dans le tableau, on augmente la taille du tableau
            'et on ajoute la donnée.
            If boolVerifab = False Then
                ReDim Preserve Tableauab(1 To UBound(Tableauab) + 1)
                Tableauab(UBound(Tableauab)) = Cellab
            End If
     
            'Tri le contenu du tableau par ordre croissant.
            For iab = 1 To UBound(Tableauab)
                For jab = 1 To UBound(Tableauab)
                    If Tableauab(iab) < Tableauab(jab) Then
                        TempTabab = Tableauab(iab)
                        Tableauab(iab) = Tableauab(jab)
                        Tableauab(jab) = TempTabab
                    End If
                Next jab
            Next iab
     
        End If
     
        Next Cellab
     
        'Alimente le ComboBox
        ComboBox2.List = Tableauab
     
     
    End If
     
    End Sub

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

Discussions similaires

  1. [XL-2007] remplissage tableau selon condition
    Par NEC14 dans le forum Excel
    Réponses: 1
    Dernier message: 25/07/2010, 11h12
  2. [VBA] remplissage d'un champs selon une recherche
    Par Virgile59 dans le forum Access
    Réponses: 7
    Dernier message: 04/11/2005, 10h52
  3. [VB.net] Générer une date selon condition
    Par WriteLN dans le forum Windows Forms
    Réponses: 2
    Dernier message: 20/10/2005, 17h12
  4. [VB.NET] Changer de classe selon condition
    Par daner06 dans le forum Windows Forms
    Réponses: 4
    Dernier message: 24/10/2004, 11h04
  5. DLLs chargées selon condition
    Par Benjamin GAGNEUX dans le forum API, COM et SDKs
    Réponses: 9
    Dernier message: 12/08/2004, 19h14

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