Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
832 connectés 

  FORUM HardWare.fr
  Programmation
  VB/VBA/VBS

  [VB6] traitement sur tableau excel très lent [résolu]

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

[VB6] traitement sur tableau excel très lent [résolu]

n°1261990
amsterdam
Posté le 08-12-2005 à 18:10:11  profilanswer
 

Bonjour.
J'ai un soucis, je doit trier un fichier excel contenant quelques centaines de ligne en fonction de quelques dizaines de valeurs contenues dans une listbox.
 
Si je passe par une macro intégrée dans mon classeur le tri et la recopie sur la feuille voisine me prend au grand max 2 secondes.
 
Le même code repompé dans vb6 me prend 2 minutes.
Aors je veut bien admettre que je code comme un porc mais tout de même !!!!!
Surtout que le code est quasi identique.
Voici le code en question:
 


v_colonne = combo_lettre_colonne.Text
v_ligne = UpDown1.Value
v_colonne_fin = "o"
v_ligne_arrivee = 1
v_cellule = v_colonne & v_ligne
v_cellule = sheet.Range(v_cellule)
 
For k = 0 To liste_refs.ListCount - 1
    tableau_refs(k) = liste_refs.List(k)
Next k
 
    For j = 0 To tableau_refs(liste_refs.ListCount - 1)
        'v_ligne = UpDown1.Value
               For i = 0 To 200
           
            v_cellule = v_colonne & v_ligne  ' concaténation des deux précédentes
            v_nombre = Worksheets(1).Cells(v_ligne, v_colonne) ' attribue le contenu de la cellule à v_nombre
            If v_nombre = "" Then GoTo echap
            v_nombre = Right(v_nombre, 4) ' extrait les 4 derniers chiffres
                If v_nombre = tableau_refs(j) Then v_ligne_complete = ("a" & v_ligne & ":" & v_colonne_fin & v_ligne): Worksheets(1).Range(v_ligne_complete).Copy Destination:=Worksheets("Feuil3" ).Range("a" & v_ligne_arrivee): v_ligne_arrivee = v_ligne_arrivee + 1 _
                Else: GoTo echap
             
echap:
             
            v_nombre = ""
            v_cellule = ""
            v_ligne = v_ligne + 1
           
        Next i
    Next j


Si qqun a une idée je suis preneur. :)
Ps: po la peine de geuler après les goto y sont trop bô. :d


Message édité par amsterdam le 10-12-2005 à 22:39:07
mood
Publicité
Posté le 08-12-2005 à 18:10:11  profilanswer
 

n°1262016
watashi
La démotivation : JAMAIS !
Posté le 08-12-2005 à 18:47:06  profilanswer
 

Salut amsterdam,
 
A moins que je sois un peu taupe ce soir tu boucles 200 fois sur i que tu n'utilises pas :(
non ?
@+


---------------
Je bidouillle c'est sur... Mais j'essaye de faire en sorte que ça marche ;-)
n°1262024
amsterdam
Posté le 08-12-2005 à 18:53:13  profilanswer
 

Sisi je boucle bien sur i sinon mon code ne fonctionnerait pas du tout.
Mais j'ai quand même vérifié en faisant un débogage pas à pas et je boucle bien sur i.

n°1262057
amsterdam
Posté le 08-12-2005 à 19:39:30  profilanswer
 

Par contre j'ai rectifié une erreur car j'avait mis en commentaire la ligne:
v_ligne = UpDown1.Value dans la boucle j ( va savoir pourquoi...)

n°1262063
amsterdam
Posté le 08-12-2005 à 19:49:25  profilanswer
 

Reprenons, y a t'il un moyen de faire bosser excel via vb6 sans mettre deux plombes et sans bouffer 60% du CPU ?
Comme avec une simple macro quoi.  :fou:

n°1262355
watashi
La démotivation : JAMAIS !
Posté le 09-12-2005 à 10:18:59  profilanswer
 

Oki j'ai eu le temps de mieux regarder ta boucle sur i en effet elle permet d'augmenter le ligne désolé j'avais mal lu.
 
Le seul truc que j'ai remarqué avec excel piloté par VB(beta 2005 pas vb6) est que lorsque je dois recopier des données à la chaine dans une feuille je fais d'abord la collecte des données dans un array et là j'écris l'array en dernier et d'une seule fois. Je ne sais pas qu'elle est l'influence sur l'utilisation du cpu mais le temps de traitement était bien diminué chez moi (environ /10), surtout avec les saut de pages et même en application.visible=false.
 
@+

n°1262525
amsterdam
Posté le 09-12-2005 à 13:33:55  profilanswer
 

J'en suis arrivé à la même conclusion que toi mais n'ai pas encore eu le temps d'essayer.
L'avantage c'est qu'on ne dialogue q'une fois avec excel pour récupérer les données et une deuxième pour y écrire le résultat.
Je viendrait poster le résultat une fois fait.
To be continued...

n°1262540
watashi
La démotivation : JAMAIS !
Posté le 09-12-2005 à 13:49:51  profilanswer
 

oki bon courage :)


---------------
Je bidouillle c'est sur... Mais j'essaye de faire en sorte que ça marche ;-)
n°1263797
amsterdam
Posté le 10-12-2005 à 22:38:04  profilanswer
 

C'est bon j'ai réussi.  [:ambesanch]  
En gros ça donne çà:
-Une boucle pour copier toutes les cellules de la colonne à traiter dans un tableau.
 
-Une boucle pour remplir un tableau avec les entrées de la zone de liste.
 
-Deux boucles imbriquées ou je compare le contenu des cellules précédement copiées avec les entrées de la zone de liste et ou je remplit un autre tableau avec les numéros de lignes qui correspondent au critère de sélection.
 
-Enfin je copie les lignes qui m'interesse de la feuil1 du classeur vers la feuil2.
 
Résultat à peu près une seconde pour trier 200 lignes avec 3 références.
Donc même avec 10 références et 1000 lignes ça devrait le faire.  [:burtonsnowboard]  
 
Voili.


Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  VB/VBA/VBS

  [VB6] traitement sur tableau excel très lent [résolu]

 

Sujets relatifs
[resolu][VBE] Faire une macro pour copier un module ss excel[C#][Winforms] [Resolu] Centrer automatiquement un panel dans une Form
Créer un fichier vide en C. [Résolu]Python/unicode: écrire de gauche à droite/de droite à gauche [résolu]
[VBA Excel] Bloquer les barres de défilement à la fin d'un tableautraitement des caractères fonctions Lef, Mid , Right
(résolu) surcharge operateur <<Trier meilleurs scores dans un tableau
Plus de sujets relatifs à : [VB6] traitement sur tableau excel très lent [résolu]


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR