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 de code


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre actif
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mars 2011
    Messages
    38
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Loiret (Centre)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Mars 2011
    Messages : 38
    Par défaut Optimisation de code
    Bonjour,

    J'ai codé en VBA des versions améliorées de RECHERCHEV et EQUIV. Elles permettent :
    - de retourner une valeur d'une colonne qui se trouverait à gauche de la colonne clé
    - de commencer la recherche à partir d'une certaine ligne
    - d'appliquer un critère de sélection sur une colonne

    Cependant, sur un nombre important de lignes à parcourir, le temps de traitement est plus important que les fonctions natives d'Excel. Je sais que je ne pourrai pas être aussi rapide, mais je souhaiterai avoir des conseils pour optimiser les 2 fonctions ci-dessous :

    VLOOKUP:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    Function XXX_VLOOKUP(ByVal Feuille As Worksheet, ByVal PremiereLigne As Long, ByVal ColonneRecherche As Integer, ByVal ValeurCherchee As String, ByVal ColonneRetour As Integer, Optional ByVal ColonneCritere As Integer = -99, Optional ByVal ValeurCritere As String = "") As String
        Dim CptLigne As Long
     
        CptLigne = XXX_MATCH(Feuille, PremiereLigne, ColonneRecherche, ValeurCherchee, ColonneRetour, ColonneCritere, ValeurCritere)
        If CptLigne <> -99 Then
            XXX_VLOOKUP = Feuille.Cells(CptLigne, ColonneRetour)
        Else
            XXX_VLOOKUP = "-99"
        End If
    End Function
    MATCH
    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
     
    Function XXX_MATCH(ByVal Feuille As Worksheet, ByVal PremiereLigne As Long, ByVal ColonneRecherche As Integer, ByVal ValeurCherchee As String, ByVal ColonneRetour As Integer, Optional ByVal ColonneCritere As Integer = -99, Optional ByVal ValeurCritere As String = "") As Long
        Dim LigneFin As Long
        Dim bTrouve As Boolean
        Dim CptLigne As Long
     
        With Feuille
            LigneFin = .Cells(.Rows.Count, ColonneRecherche).End(xlUp).Row
            bTrouve = False
            CptLigne = PremiereLigne
     
            While CptLigne <= LigneFin And Not bTrouve
                If .Cells(CptLigne, ColonneRecherche) = ValeurCherchee Then
                    If ValeurCritere = "" Or ColonneCritere = -99 Then
                        bTrouve = True
                    Else
                        If Evaluate(.Cells(CptLigne, ColonneCritere) & ValeurCritere) Then
                            bTrouve = True
                        Else
                            CptLigne = CptLigne + 1
                        End If
                    End If
                Else
                    CptLigne = CptLigne + 1
                End If
            Wend
            If bTrouve Then
                XXX_MATCH = CptLigne
            Else
                XXX_MATCH = -99
            End If
        End With
    End Function
    Merci pour vos remarques constructives.

    Cordialement,
    Sébastien

  2. #2
    Rédacteur
    Avatar de Philippe Tulliez
    Homme Profil pro
    Formateur, développeur et consultant Excel, Access, Word et VBA
    Inscrit en
    Janvier 2010
    Messages
    13 174
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Formateur, développeur et consultant Excel, Access, Word et VBA

    Informations forums :
    Inscription : Janvier 2010
    Messages : 13 174
    Billets dans le blog
    53
    Par défaut
    Bonjour,
    Je n'ai pas regardé en détail tout ton code mais pourquoi utilises-tu une boucle pour ta fonction MATCH alors qu'il existe Application.WorksheetFunction.Match(Arg1, Arg2, 0)
    Philippe Tulliez
    Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément. (Nicolas Boileau)
    Lorsque vous avez la réponse à votre question, n'oubliez pas de cliquer sur et si celle-ci est pertinente pensez à voter
    Mes tutoriels : Utilisation de l'assistant « Insertion de fonction », Les filtres avancés ou élaborés dans Excel
    Mon dernier billet : Utilisation de la fonction Dir en VBA pour vérifier l'existence d'un fichier

  3. #3
    Membre actif
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mars 2011
    Messages
    38
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Loiret (Centre)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Mars 2011
    Messages : 38
    Par défaut
    Parce que j'ai ajouté une colonne critère et que cela m'évite de figer les colonnes de la matrice (pour la colonne clé et la colonne Retour)

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