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 :

Optimisation du code


Sujet :

Macros et VBA Excel

  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Mai 2007
    Messages
    15
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Mai 2007
    Messages : 15
    Par défaut Optimisation du code
    Bonjour, voici un code que j'utilise dans une macro :

    J'exécute la macro tant que la cellule n'est pas vide (do while loop).
    Ensuite je vérifie si la valeur de la combobox1 est égale à la cellule recherchée,
    si oui je vérifie si la valeur de la combobox2 est égale à tous alors j'ajoute 1 à val.
    sinon si la valeur de la combobox2 est égale à la cellule recherchée alors j'ajoute 1 à val.

    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
     
     
    Private Sub ComboBox1_Change()
     
    Dim d As String
    Dim d2 As Date
    Dim val As Single
     
    d = Worksheets("Feuil1").ComboBox2.Value
    d2 = Worksheets("Feuil1").ComboBox1.Value
     
    Worksheets("copie warehouse").Activate
    Sheets("copie warehouse").Range("DR1").Activate
     
    Do While ActiveCell(4, 1) <> ""
     
        If ActiveCell(4, 1) = d2 Then
            If d = "Tous" Then
            val = val + 1
            End If
     
            If ActiveCell.Offset(3, -34) = d Then
            val = val + 1
            End If
     
        End If
     ActiveCell.Offset(1, 0).Select
     
    Loop
     
    Worksheets("Feuil1").Activate
    Range("G8").Activate
    ActiveCell(1, 1) = val
    val = 0
     
    End Sub
    J'aimerai optimiser ce code parce que j'ai 10-15 codes similaires dans une macro qui va s'effectuer sur les combobox. Dans la base de données il y a 1000 lignes excel.
    Est-ce que quelqu'un pourrait m'aider?
    Merci.

  2. #2
    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
    Déjà, change le nom de ta variable Val. C'est un mot clé, un fonction de surcroît, et il est toujours déconseillé de les utiliser comme variables.
    Je regarde le reste de ton code.

  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
    Tiens, juste pour le principe. J'ai eu du mal avec tes offset (!)
    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
    Private Sub ComboBox1_Change()
    Dim d As String
    Dim d2 As Date
    Dim Laval As Single
    Dim Fl1 as worksheet
    Dim Plage as range, Cell as range
         Set Fl1 = Worksheets("Feuil1")
         d = FL1.ComboBox2.Value
         d2 = FL1.ComboBox1.Value
         Set Plage = Fl1.Range("DR4:DR" & FL1.Range("DR4").End(xlDown).Row)
        For Each Cell In Plage 'ou cell est la cellule "examinée"
        'Comme Plage démarre à DR4, tes offsets doivent le prendre en compte.
        'J'ai essayé de comprendre pour adapter mais tu vérifies.
        'Pour ça, il suffit de savoir que Cell.row te donne le N° de ligne en cours
        
            If Cell.Offset(0, 1) = d2 Then
                If d = "Tous" Then
                     LaVal = LaVal + 1
                End If
        
                If Cell.Offset(-1, -34) = d Then '
                     LaVal = LaVal + 1
                End If
         
            End If
        Next
        
        Worksheets("Feuil1").Range("G8").Offset(1, 1) = LaVal
        LaVal = 0
    
    End Sub
    A+

  4. #4
    Membre averti
    Profil pro
    Inscrit en
    Mai 2007
    Messages
    15
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Mai 2007
    Messages : 15
    Par défaut
    Merci je vais tester cela.
    J'ai tellement de code sur cette macro qu'elle prend un temps fou parce que je dois vérifier d'autre chose également donc il faut que j'optimise au max mon code. Merci pour ton aide!

  5. #5
    Membre averti
    Profil pro
    Inscrit en
    Mai 2007
    Messages
    15
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Mai 2007
    Messages : 15
    Par défaut
    Voila, j'ai testé mais j'ai une erreur.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    d = Fl1.ComboBox2.Value
    Il me met erreur de compilation :
    Membre de méthode ou de données introuvable.

    Je ne sais pas trop pourquoi.

  6. #6
    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
    Désolé, je t'ai fourvoyé, j'ai oublié que ton combo est dans une feuille de calculs et que son code est dans la feuille de code de celle-ci.
    Garde ta syntaxe mais garde l'instance de la feuille, tu en as besoin pour Plage.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    Private Sub ComboBox1_Click()
    Dim d As String
    Dim d2 As Date
    Dim Laval As Single
    Dim FL1
    Dim Plage As Range, Cell As Range
         Set FL1 = Worksheets("Feuil1")
         d = Worksheets("Feuil1").ComboBox2.Value
         d2 = Worksheets("Feuil1").ComboBox1.Value
    Désolé
    A+

Discussions similaires

  1. optimiser le code d'une fonction
    Par yanis97 dans le forum MS SQL Server
    Réponses: 1
    Dernier message: 15/07/2005, 08h41
  2. Optimiser mon code ASP/HTML
    Par ahage4x4 dans le forum ASP
    Réponses: 7
    Dernier message: 30/05/2005, 10h29
  3. optimiser le code
    Par bibi2607 dans le forum ASP
    Réponses: 3
    Dernier message: 03/02/2005, 14h30
  4. syntaxe et optimisation de codes
    Par elitol dans le forum Langage SQL
    Réponses: 18
    Dernier message: 12/08/2004, 11h54
  5. optimisation du code et var globales
    Par tigrou2405 dans le forum ASP
    Réponses: 2
    Dernier message: 23/01/2004, 10h59

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