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 :

Probleme de lenteur avec macro VBA de recherche de string


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Futur Membre du Club
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Avril 2019
    Messages
    2
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2019
    Messages : 2
    Par défaut Probleme de lenteur avec macro VBA de recherche de string
    Bonjour tout le monde, je viens vers vous car j'ai un problème avec une macro. En deux mots, je compare des string de deux feuilles différentes et des qu'il y a match je stock une donnée dans une cellule. La macro fonctionne, j'obtiens le résultat attendu mais le problème est qu'elle est hyper lente a effectuer le traitement, mais vraiment très lente. Du coup je voulais savoir si quelqu'un pouvait m'aider a optimiser tout ca. Merci beaucoup.

    Voila mon code :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    Function MULTIPLEVLOOKUPP(lookupval, lookuprange As Range, indexcol As Long)
    Dim r As Range
    Dim result As String
    result = ""
    For Each r In lookuprange
        If r = lookupval Then
            If result <> "" Then
                result = result & ", "
            End If
            result = result & r.Offset(0, indexcol)
        End If
    Next r
    MULTIPLEVLOOKUP = result
    End Function

    Merci beaucoup !

  2. #2
    Modérateur

    Homme Profil pro
    Inscrit en
    Octobre 2005
    Messages
    15 410
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations forums :
    Inscription : Octobre 2005
    Messages : 15 410
    Par défaut
    Bonjour.

    Si tu n'appliques pas de filtre à tes données, tu peux utiliser .Find à la place d'un parcourt séquentiel.

    Quelque chose comme :

    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
    public function MULTIPLEVLOOKUPP(lookupval, lookuprange As Range, indexcol As Long) as string
       dim result as string
       dim cellule as range
       dim memAdresse as string
       set cellule=lookuprange .Find(lookupval)
     
       if not cellule is nothing then
           memAdresse=cellule.address
     
           do
              If result <> "" Then
                   result = result & ", "
              End If
     
              result = result & cellule.Offset(0, indexcol)
              set cellule=lookuprange .Find(lookupval, cellule.offset(1,0))
          loop while cellule.address<>memAdresse
     
       end if
     
       MULTIPLEVLOOKUPP=result
    end function
    A+
    Vous voulez une réponse rapide et efficace à vos questions téchniques ?
    Ne les posez pas en message privé mais dans le forum, vous bénéficiez ainsi de la compétence et de la disponibilité de tous les contributeurs.
    Et aussi regardez dans la FAQ Access et les Tutoriaux Access. C'est plein de bonnes choses.

  3. #3
    Membre averti Avatar de jonathan.chaf
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Février 2018
    Messages
    34
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Ardèche (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Février 2018
    Messages : 34
    Par défaut lenteur exécution macro
    Lorsque l'on exécute vba en bouclant sur les lignes la manipulation reviens à aller et revenir de vba à excel pour chaque test.
    Une autre solution que la fonction find que je n'aime pas truc car je l'utilisait surement mal mais elle me causait plein de plantage et qui t'oblige quand même a boucler une fois, c'est de récupérer l'intégralité tes deux plage dans une variable tableau et de comparer ces deux variable.
    Tu verras que ton code va s’accélérer grandement


    Platon Formation pour travailler moins tout en gagnant plus

Discussions similaires

  1. Recherche mot dans .PDF avec macro VBA
    Par klemsy20 dans le forum Macros et VBA Excel
    Réponses: 16
    Dernier message: 25/09/2019, 14h15
  2. [XL-MAC 2011] Aide Macro VBA Bouton - Recherche données avec ligne vide
    Par tibo13 dans le forum Macros et VBA Excel
    Réponses: 3
    Dernier message: 28/04/2016, 12h09
  3. Recherche matricielle avec Macro VBA (Find?)
    Par Phakops92 dans le forum Macros et VBA Excel
    Réponses: 9
    Dernier message: 23/05/2013, 15h43
  4. Probleme d'enregistrement sur Macro/VBA de Excel
    Par life is magic dans le forum Macros et VBA Excel
    Réponses: 6
    Dernier message: 28/11/2005, 17h23
  5. probleme de selection aleatoire sur excel avec macro vba
    Par guillaume sors dans le forum Macros et VBA Excel
    Réponses: 1
    Dernier message: 21/10/2005, 10h51

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