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 :

Problème de performances


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé
    Inscrit en
    Juin 2006
    Messages
    431
    Détails du profil
    Informations forums :
    Inscription : Juin 2006
    Messages : 431
    Par défaut Problème de performances
    Bonjour à tous,
    je dispose d'un classeur excel avec un tableau de 50 colonnes sur 10000 lignes.

    Dans ce classeur, j'ai posé une form que j'appelle par un bouton. Cette form est modifiée dynamiquement:
    - ajout d'autant de combobox qu'il y a de colonnes choisies par l'utilisateur
    - Filtre selon des critères particuliers des valeurs.

    Pour faire cela, j'ai utilisé des collections dans lesquelles j'ai mis mes différents objets, et des classes pour gérer mes structures de données.

    Par défaut, à l'ouverture du dossier, les données du tableau sont chargées dans une collection, et les propriétés des combobox également.

    Tout marche nickel. Quand j'ouvre mon dossier, par défaut rien ne s'affiche, mais les données sont bien rentrées dans les collections. Quand je clique sur le bouton, la form s'affiche et filtre correctement selon les critères que je lui ai donné.

    Mon problème vient quand je veux modifier le fichier, pour supprimer une ligne par exemple. cela prend entre 1 et 2 secondes. Donc si on veut supprimer, ou ajouter d'autres lignes, ca devient vite

    Si je force l'arret de mes macros dans l'éditeur, cela revient à la normale.

    Il doit donc y avoir quelque chose qui tourne en fond, mais je n'arrive pas a voir quoi.

    Est-il possible de voir les macros qui tournent en fond?
    Est-il possible de stopper par code l'éxécution de l'ensemble des macros, par le biais d'un bouton par exemple?
    Ya t-il quelque chose d'autre a faire?

  2. #2
    Membre Expert Avatar de aalex_38
    Inscrit en
    Septembre 2007
    Messages
    1 631
    Détails du profil
    Informations forums :
    Inscription : Septembre 2007
    Messages : 1 631
    Par défaut
    Bonjour,

    CTRL + PAUSE pour arreter les macros en cours d'execution

  3. #3
    Membre éclairé
    Inscrit en
    Juin 2006
    Messages
    431
    Détails du profil
    Informations forums :
    Inscription : Juin 2006
    Messages : 431
    Par défaut
    bonjour aalex_38,
    J'avais vu cette solution dans la FAQ. Mais mon fichier est destiné à des utilisateurs qui ne connaissent rien à Excel, donc il faut que ce soit le plus "user-friendly" possible...
    A moins qu'il y ait une méthode pour simuler des touches??


    Je continue à chercher.

  4. #4
    Membre Expert Avatar de aalex_38
    Inscrit en
    Septembre 2007
    Messages
    1 631
    Détails du profil
    Informations forums :
    Inscription : Septembre 2007
    Messages : 1 631
    Par défaut
    Ma réponse était pour t'aider à débugger, regardes quels sont les évenement qui sont gérés dans Thisworkbook ou dans tes feuilles comme par exemple Worksheet_SelectionChange qui peut se déclencher à chaque selection dans la feuille.

    Pour bien faire le fichier ou du code pourrai aider.

  5. #5
    Membre éclairé
    Inscrit en
    Juin 2006
    Messages
    431
    Détails du profil
    Informations forums :
    Inscription : Juin 2006
    Messages : 431
    Par défaut
    Je ne gère que l'évènement open du classeur, et l'évènement initialize de la form.

    En ce qui concerne le code, je ne peux pas donner le fichier, et mon code est assez complexe puisqu'il fait référence a plusieurs classes.
    Je ne sais pas si ca aidera, mais voila toujours des morceaux de codes
    le workbook_open
    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
    Private Sub Workbook_Open()
        Dim rCell As Range
        Dim wParam As Worksheet
        Dim wTab As Worksheet
        Dim iNbZones As Integer
        Dim Moteur As CMoteurDeRecherche
     
        Set wTab = ThisWorkbook.Sheets(cst_sTab)
        Set wParam = ThisWorkbook.Sheets(cst_sParam)
        Set Moteur = New CMoteurDeRecherche
     
        ' Initialisation des boutons si ils ne sont pas créés
        Call Buttons.Delete_Buttons
        Call Buttons.Create_Buttons
     
        ' Nombre de colonnes utilisées
        Buttons.iNbColonnes = wTab.Range("IV2").End(xlToLeft).Column
     
        ' Calcul du nombre de combobox a poser sur la form
        iNbZones = 0
        For Each rCell In wParam.Range(wParam.Cells(2, 2), wParam.Cells(Buttons.iNbColonnes + 1, 2))
            If rCell.Value = "X" Or rCell.Value = "x" Then
                iNbZones = iNbZones + 1
            End If
        Next rCell
     
        ' Calcul de la hauteur de la form
        If iNbZones Mod 2 > 0 Then
            Buttons.iHeight = ((iNbZones + 1) / 2) * 25 + 80
        Else
            Buttons.iHeight = (iNbZones / 2) * 25 + 80
        End If
     
        ' Initialisation des collections
        Moteur.Init_Collections
        Set Buttons.Clignes = Moteur.Clignes
        Set Buttons.cMenusDeroulants = Moteur.cMenusDeroulants
     
    End Sub
    La procédure pour créer les boutons sur ma feuille, écrite dans le module buttons:

    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
    ' Création des boutons s'ils ont été supprimés
    Public Sub Create_Buttons()
        Dim wTab As Worksheet
     
        Set wTab = ThisWorkbook.Sheets(cst_sTab)
     
        With wTab
            .Range(wTab.Cells(1, 1), wTab.Cells(1, 256)).RowHeight = 40
            Set BtMoteur = .Buttons.Add(.Cells(1, 1).Left, .Cells(1, 1).Top, .Cells(1, 1).Width * 2, 30)
            Set BtFiab = .Buttons.Add(.Cells(1, 4).Left, .Cells(1, 4).Top, .Cells(4, 1).Width * 2, 30)
            Set BtArret = .Buttons.Add(.Cells(1, 8).Left, .Cells(1, 8).Top, .Cells(4, 1).Width * 2, 30)
     
        End With
     
        With BtMoteur
            .Name = "BtMoteur"
            .Caption = "Moteur de Recherche"
            .OnAction = "BtMoteur_Click"
        End With
     
        With BtArret
            .Name = "BtArret"
            .Caption = "Modification du fichier"
            .OnAction = "BtArret_Click"
        End With
     
         With BtFiab
            .Name = "BtFiab"
            .Caption = "Fiabilisation du fichier"
            .OnAction = "BtFiab_Click"
        End With
     
        wTab.Range("A2").Select
    End Sub
    Ceci n'est évidemment qu'un extrait.

  6. #6
    Membre Expert Avatar de aalex_38
    Inscrit en
    Septembre 2007
    Messages
    1 631
    Détails du profil
    Informations forums :
    Inscription : Septembre 2007
    Messages : 1 631
    Par défaut
    Le problème ne viendrait-il pas de ton userform qui reste actif (même si tu fais hide il est toujours la)

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

Discussions similaires

  1. Problème de performance avec LEFT OUTER JOIN
    Par jgfa9 dans le forum Requêtes
    Réponses: 6
    Dernier message: 17/07/2005, 13h17
  2. [jeu]problème de performance d'un algo
    Par le Daoud dans le forum Algorithmes et structures de données
    Réponses: 12
    Dernier message: 30/05/2005, 16h07
  3. [C#] Probléme de performance avec IsDbNull
    Par jab dans le forum Windows Forms
    Réponses: 8
    Dernier message: 04/04/2005, 11h39
  4. [oracle 9i][Workbench]Problème de performance
    Par nuke_y dans le forum Oracle
    Réponses: 6
    Dernier message: 03/02/2005, 17h38
  5. [ POSTGRESQL ] Problème de performance
    Par Djouls64 dans le forum PostgreSQL
    Réponses: 6
    Dernier message: 26/05/2003, 16h18

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