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 :

UserForm long à s'afficher


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éprouvé
    Homme Profil pro
    Assistant aux utilisateurs
    Inscrit en
    Septembre 2007
    Messages
    1 896
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 64
    Localisation : France

    Informations professionnelles :
    Activité : Assistant aux utilisateurs
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Septembre 2007
    Messages : 1 896
    Par défaut UserForm long à s'afficher
    Bonjour à tous,

    Voilà, j'ai mis en place ce code qui me permet d'éviter les doublons dans un Combo et d'en trier les données.
    Mais l'UserForm met du temps à se charger, pouvez-vous m'expliquer pourquoi ?
    Merci par avance

    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
     
    Private Sub UserForm_Initialize()
     
    Dim Cell As Range
    Dim Tableau()
    Dim TempTab As Variant
    Dim i As Integer, j As Integer
    Dim boolVerif As Boolean
     
    ReDim Tableau(1 To 1)
    Tableau(1) = Cells(1, 1)
     
    'Boucle sur les données de la colonne C dans la feuille "Enf"
    For Each Cell In Worksheets("Enf").Range("C3:C" & Worksheets("Enf").Range("C65536").End(xlUp).Row)
     
    boolVerif = False
     
    'Vérifie si le contenu de la cellule existe déjà dans le tableau
    For i = 1 To UBound(Tableau)
        'Si la donnée existe déjà dans le tableau
        If Tableau(i) = Cell Then
        boolVerif = True
        Exit For
        End If
    Next i
     
    'Si la donnée n'existe pas dans le tableau, on augmente la taille du tableau et on ajoute la donnée
    If boolVerif = False Then
        ReDim Preserve Tableau(1 To UBound(Tableau) + 1)
        Tableau(UBound(Tableau)) = Cell
    End If
     
    'Tri le contenu du tableau par ordre croissant
        For i = 1 To UBound(Tableau)
            For j = 1 To UBound(Tableau)
                If Tableau(i) < Tableau(j) Then
                    TempTab = Tableau(i)
                    Tableau(i) = Tableau(j)
                    Tableau(j) = TempTab
                End If
            Next j
        Next i
    Next Cell
     
    'Alimente le ComboBox
    TNew4.List = Tableau
     
    End Sub

  2. #2
    pgz
    pgz est déconnecté
    Expert confirmé Avatar de pgz
    Homme Profil pro
    Développeur Office VBA
    Inscrit en
    Août 2005
    Messages
    3 692
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 72
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Office VBA
    Secteur : Conseil

    Informations forums :
    Inscription : Août 2005
    Messages : 3 692
    Par défaut
    Bonjour.

    Si je vois bien, tu scrutes une colonne et cellule par celule :
    - tu ajoutes la valeur si elle n'existe pas
    - tu tries la liste obtenue

    Ce n'est pas optimal :
    1. Tu lis les cellules une par une alors que la lecture de tout le Range dans un tableau intermédiaire serait plus rapide
    2. Tu tries à chaqque ajout alors qu'un seul tri après que la liste soit complète serait suffisant. Et si tu tries en suivant, alors sers-toi en pour accélérer le contrôle anti-doublon et le tri!
    3. la méthode de tri que tu utilises est pénalisante pour des listes de plus de 10 éléments. Et la pénalité croît en puissance du nombre d'éléments.

    Si tu ne vois pas ce qui prend du temps, place des chronomètres dans l'exécution de ton code. Tu seras édifié...

    Solutions? 2 voies possibles :
    - continuer sur la voie de l'utilisation de variables tableaux en utilisant de meilleurs algorithmes
    - passer par un recordset DAO ou ADO.

    En espérant que cela t'aide,

    PGZ

  3. #3
    Inactif  
    Avatar de ouskel'n'or
    Profil pro
    Inscrit en
    Février 2005
    Messages
    12 464
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2005
    Messages : 12 464
    Par défaut
    Je t'avais proposé une solution plus rapide consistant à parcourir un range sous forme de tableau à deux dimensions...
    As-tu testé ?

  4. #4
    Membre éprouvé
    Homme Profil pro
    Assistant aux utilisateurs
    Inscrit en
    Septembre 2007
    Messages
    1 896
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 64
    Localisation : France

    Informations professionnelles :
    Activité : Assistant aux utilisateurs
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Septembre 2007
    Messages : 1 896
    Par défaut
    Bonjour ouskel'n'or,

    En effet, j'avais testé ton code sur une autre application, mais je ne m'en souvenais plus. Il fonctionne bien.
    Merci de m'avoir rafraîchi la mémoire.

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

Discussions similaires

  1. [XL-2003] Userform non listé / affiché dans l'explorateur d'objets
    Par jean_78_50a dans le forum Macros et VBA Excel
    Réponses: 4
    Dernier message: 04/01/2013, 19h41
  2. [XL-2003] userform liste déroulante afficher valeur
    Par delphin13 dans le forum Excel
    Réponses: 3
    Dernier message: 23/04/2012, 18h56
  3. [E-02] Comment garder un Userform non Modal affiché ?
    Par Frutchy dans le forum Macros et VBA Excel
    Réponses: 12
    Dernier message: 23/12/2008, 03h36
  4. Texte trop long pour afficher dans une combobox
    Par bavmorda1 dans le forum Macros et VBA Excel
    Réponses: 3
    Dernier message: 12/02/2008, 14h42
  5. script trop long message afficher par navigateur
    Par nocoment dans le forum Général JavaScript
    Réponses: 1
    Dernier message: 16/05/2007, 19h40

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