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 :

Amélioration des perfomances lecture des cellules VBA [XL-2007]


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Juillet 2015
    Messages
    2
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juillet 2015
    Messages : 2
    Par défaut Amélioration des perfomances lecture des cellules VBA
    Bonjour,
    J'aimerais effectuer des test logiques sur les valeurs des cellules d'un fichier Excel, mais je me rends compte que le traitement est en réalité assez long.
    Du coup j'ai fait quelques tests mais je ne vois pas comment je pourrais rendre cette exécution plus rapide.
    Enfait si je fais par exemple 2500*2500 comparaisons entre deux nombres, Excel est plutôt rapide (moins d'une seconde): voir l'exemple ci-dessous.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    Sub TestlogiqueNombre()
    For i = 1 To 2500
        For j = 1 To 2500
            If i = j Then
                m = m + 1
            End If
        Next j
    Next i
    MsgBox (m)
    End Sub
    En revanche si je fais les mêmes opérations, mais cette fois ci, je n'utilise plus des nombres directement mais les cellules de mon classeur, le traitement est beaucoup plus long ! Jusqu’à une minute...
    Je précise pour le code ci-dessous, que mes colonnes A et B contiennent toutes deux des valeurs de 1 à 2500
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     Sub TestlogiqueCellule()
    For i = 1 To 2500
        For j = 1 To 2500
            If Cells(i, 1).Value = Cells(j, 2).Value Then
                m = m + 1
            End If
        Next j
    Next i
    MsgBox (m)
    Donc en soi les deux fonctions effectuent les mêmes opérations mais l'une va chercher les valeurs dans la feuille Excel, j'imagine donc que c'est cela qui est aussi long.
    Pourriez-vous m'indiquer comment faire pour pouvoir comparer deux cellules Excel de manière plus rapide ?

    Merci d'avance

  2. #2
    Expert confirmé

    Homme Profil pro
    Curieux
    Inscrit en
    Juillet 2012
    Messages
    5 169
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Curieux
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Juillet 2012
    Messages : 5 169
    Billets dans le blog
    5
    Par défaut
    Bonjour,

    en utilisant une variable tableau, tu vas voir ce que vaut le TGV face à la trotinette

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


    en gros, tu transmet le contenu de ta plage à un tableau VBA, et tu fais ton traitement de comparaison dedans

    exemple issu de ton cas
    (remplir A1:A2500 avec les chiffres au préalable)

    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
    Sub TestlogiqueCellule()
    Dim Tablo()
    Dim i As Long
    Dim j As Long
     
    ' on prend la plage de A1 à A2500
    ' et on la met dans un tableau
    Tablo = Application.Transpose(Cells(1, 1).Resize(2500, 1))
     
    ' boucle sur tous les éléments du tableau
    For i = LBound(Tablo) To UBound(Tablo)
        ' autre boucle sur tous les éléments
        For j = LBound(Tablo) To UBound(Tablo)
            If Tablo(i) = Tablo(j) Then
                m = m + 1
            End If
        Next j
    Next i
     
    MsgBox (m)
     
    End Sub
    moins d'une seconde de traitement

  3. #3
    Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Juillet 2015
    Messages
    2
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juillet 2015
    Messages : 2
    Par défaut
    Parfait !
    C'est exactement ce que je cherchais :p, c'est vrai que c'est plutôt rapide
    Merci à toi

  4. #4
    Expert confirmé

    Homme Profil pro
    Curieux
    Inscrit en
    Juillet 2012
    Messages
    5 169
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Curieux
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Juillet 2012
    Messages : 5 169
    Billets dans le blog
    5
    Par défaut
    Regarde un peu ce sujet

    c'est un cas de comparaison sur des très grandes quantités de données (300K)

    temps de traitement réduit à peau de chagrin grâce aux tableau

    c'est pas du niveau débutant sur ce type de variables, certes, mais la compréhension est possible

    http://www.developpez.net/forums/d15...s-specifiques/

  5. #5
    Invité
    Invité(e)
    Par défaut
    Bonjour,
    Personnellement j'utiliserais un dictionnaire
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    For j = LBound(Tablo) To UBound(Tablo)
            dico(Tablo(j))=dico(Tablo(j))+1
           Next j

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

Discussions similaires

  1. Réponses: 3
    Dernier message: 09/10/2009, 19h05
  2. Intégrer des macros sur des nouvelles feuilles crées par VBA
    Par arkorrigan dans le forum Macros et VBA Excel
    Réponses: 1
    Dernier message: 29/05/2008, 16h11
  3. Nombres total des LECTURES DES E/S des Datafiles
    Par atporfi dans le forum Administration
    Réponses: 18
    Dernier message: 21/11/2007, 16h53
  4. Réponses: 3
    Dernier message: 13/09/2007, 19h11
  5. Réponses: 3
    Dernier message: 23/01/2007, 09h14

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