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 recherchev [XL-2003]


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Homme Profil pro
    Étudiant
    Inscrit en
    Octobre 2011
    Messages
    94
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Finance

    Informations forums :
    Inscription : Octobre 2011
    Messages : 94
    Par défaut optimisation de code recherchev
    Bonjour à tous,

    J'aimerai optimiser mon code car celui-ci prend trop de temps à l’exécution (environ 3mn).
    Il s'agit de faire une boucle sur environ 1000 lignes puis de faire 2 recherchev conditionnelle.
    La recherchev s'effectue sur un tableau xl d'une autre feuille comprenant plus de 3000 lignes et renvoie la valeur 7 et 8 de ce tableau dans notre boucle.
    Ci-dessous le code à optimiser.

    Merci pour votre aide.


    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
    Sub passif_ecart()
     
    Dim Rg As Range
    Dim i As Long
    With Sheets("Contrôle Niveau 2")
      For i = 18 To .Range("C" & .Rows.Count).End(xlUp).Row
        If Sheets("Contrôle Niveau 2").Cells(i, 14) = "GVIE" Then
          Set Rg = Sheets("baseGVIEdumois").Range("A:A").Find(What:=.Range("C" & i).Value, LookAt:=xlWhole)
          If Not Rg Is Nothing Then
          .Range("AM" & i).Value = Rg.Offset(0, 7).Value
          .Range("AN" & i).Value = Rg.Offset(0, 8).Value
        End If
        End If
      Next i
    End With
     
    End Sub

  2. #2
    Membre Expert Avatar de Fvandermeulen
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juillet 2007
    Messages
    1 869
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Juillet 2007
    Messages : 1 869
    Par défaut
    Salut,

    A mon sens, il n'y a pas grand chose à faire pour gagner du temps, la boucle étant absolument nécessaire (et les autres types de boucle ne te ferons pas gagner des minutes (on a déjà testé ) donc:

    1. Bloquer la mise à jour de l'écran, à mettre en début de code:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    application.screenupdating=false
    2. Bloquer le calcul automatique, à mettre en début de code:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    application.calculation = xlcalculationmanual
    Eventuellement revoir la plage de recherche en utilisant la plage réellement utilisée par A:A dans la feuille "baseGVIEdumois".

    Et na pas oublier de mettre en fin de code:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    application.screenupdating = true
    application.calculation = xlcalculationautomatic

  3. #3
    Membre émérite Avatar de issoram
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Janvier 2009
    Messages
    665
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Saône et Loire (Bourgogne)

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

    Informations forums :
    Inscription : Janvier 2009
    Messages : 665
    Par défaut
    Bonjour,

    Passer par des tableaux plutôt que par des plages quand on a des boucles conséquentes à faire dessus.
    Pour le range.find préciser la plage de recherche plutôt que toute la colonne ("A:A")

    http://silkyroad.developpez.com/vba/tableaux/#LI

    Cordialement.

  4. #4
    Membre confirmé
    Homme Profil pro
    Étudiant
    Inscrit en
    Octobre 2011
    Messages
    94
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Finance

    Informations forums :
    Inscription : Octobre 2011
    Messages : 94
    Par défaut
    Merci à vous 2 pour vos réponses.
    Le code va effectivement plus vite.

    Je vais étudier pour la mise en place de tableau.

    Merci encore

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

Discussions similaires

  1. Réponses: 3
    Dernier message: 06/05/2015, 15h50
  2. optimiser le code
    Par bibi2607 dans le forum ASP
    Réponses: 3
    Dernier message: 03/02/2005, 14h30
  3. syntaxe et optimisation de codes
    Par elitol dans le forum Langage SQL
    Réponses: 18
    Dernier message: 12/08/2004, 11h54
  4. 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