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 :

Problème de vitesse en vba


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Nouveau candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Octobre 2012
    Messages
    2
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Octobre 2012
    Messages : 2
    Par défaut Problème de vitesse en vba
    Bonjour,

    Je suis débutant en vba ( j'ai commencé il y a un mois ...) et j'ai un problème avec l'un de mes codes.
    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
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    Sub check_inclu()
    p = 0
    k = 0
    m = 0
    'Boucle pour naviguer sur les différents étages des noms_inclus
    For n = 0 To 20
    'Boucle pour naviguer sur les différentes lignes du compteur
        For k = 0 To (nb_file2 - 1)
    'Boucle pour checker les inclus de chaque fichier
        For i = 0 To (compteur_inclu2(n, k) - 1)
    'On test si l'inclu existe
            My_inclu = Dir(path_inclu2(n, i))
            If My_inclu <> "" Or My_inclu <> nom_inclu2(n, i) Then
    'S'il existe on ouvre le fichier
                Open path_inclu2(n, i) For Input As #4
    'Tant que la fin du fichier n'est pas atteinte
                Do While Not EOF(4)
    'On stock chaque ligne
                Line Input #4, cherche_inclu
    'On check la ligne
                If Left(cherche_inclu, 6) = "IMPFIL" Or Left(cherche_inclu, 5) = "INCLU" Then
    'Si elle répond aux critètres, on la stock dans le niveau n+1
                    nom_inclu2(n + 1, p) = Right(cherche_inclu, Len(cherche_inclu) - 8)
    'On supprime les espaces s'il y en a
                    nom_inclu2(n + 1, p) = Replace(nom_inclu2(n + 1, p), " ", "")
                    pos_path = InStrRev(path_inclu2(n, i), "\")
                    path_inclu2(n + 1, p) = Left(path_inclu2(n, i), pos_path) & nom_inclu2(n + 1, p)
    'On compte le nombre de fichier inclu relevé dans ce niveau n+1
                    compteur_inclu2(n + 1, m) = compteur_inclu2(n + 1, m) + 1
    'On passe à la ligne suivante du niveau
                    p = p + 1
                End If
    'On réitère jusque  la fin du fichier
                Loop
    'On ferme l'accès au fichier
                Close #4
    'Si le fichier n'existe pas
                Else
    'On l'indique par un message
                MsgBox "le fichier : " & nom_inclu2(i, 0) & " n'existe pas"
    'On quitte la procédure
                Exit Sub
     
            End If
    'On passe au i suivant
        Next i
        m = m + 1
    'on passe au k suivant
        Next k
        nb_file2 = m
        p = 0
        m = 0
    'On passe au niveau n suivant
    Next n
     
    End Sub
    Ce code a pour but de consulter les fichiers stockés dans le tableau à 2 dimensions nom_inclu2, de vérifier s'il y a une ligne qui commence par INCLU et si c'est le cas de récupérer le nom du fichier.
    Cependant la taille des fichiers qu'il lit peut faire100 lignes ou plus de 70 000 lignes.... Ce qui fait que le code est très long à s'éxecuter....
    Auriez-vous une piste pour permettre une éxecution plus rapide ?
    Merci du temps que vous voudrez bien me consacrer

  2. #2
    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,

    Je pense qu'en chargeant le fichier d'un bloc (dans un chaine de caractères) comme ça par exemple:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     Dim iNumFichier As Integer
    Dim contenu As String
    Dim pathFile as String
     
     pathfile= "C:\toto\... "  'path de ton fichier 
     
     iNumFichier = FreeFile
     Open pathfile For Input As #iNumFichier
     contenu = Input$(LOF(iNumFichier), iNumFichier) '-- Lit la totalité du fichier
     Close #iNumFichier
    puis en utilisant la fonction InStr pour détecter la chaine voulue, cela serait plus rapide.

    Je te laisse tester.

    Bon courage

  3. #3
    Nouveau candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Octobre 2012
    Messages
    2
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Octobre 2012
    Messages : 2
    Par défaut
    Bonjour issoram,

    merci pour la proposition, je vais tester et je reviendrais vers toi quand ce sera fait

Discussions similaires

  1. Problème de requête en VBA
    Par otravaglini dans le forum Access
    Réponses: 2
    Dernier message: 20/04/2006, 11h19
  2. [Son] problème de vitesse
    Par glloq8 dans le forum Composants
    Réponses: 6
    Dernier message: 13/02/2006, 14h45
  3. Problème avec open() [Excel VBA]
    Par Invité dans le forum Macros et VBA Excel
    Réponses: 7
    Dernier message: 28/11/2005, 16h21
  4. [debutant][c++] Problème de vitesse de déplacement
    Par bornibus dans le forum OpenGL
    Réponses: 15
    Dernier message: 26/02/2005, 09h16
  5. [OpenGL] Problème de Vitesse d'éxécution
    Par stick059 dans le forum OpenGL
    Réponses: 9
    Dernier message: 19/11/2004, 13h57

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