Temps de traitement long d'excel vers listbox vb6

sancho12345 Messages postés 131 Date d'inscription jeudi 21 mai 2009 Statut Membre Dernière intervention 18 mars 2012 - 18 janv. 2011 à 11:18
sancho12345 Messages postés 131 Date d'inscription jeudi 21 mai 2009 Statut Membre Dernière intervention 18 mars 2012 - 20 janv. 2011 à 09:29
Bonjour à vous,


J'ai un souci de rapidité entre VB6 et Excel, je m?explique.

J'ai un fichier Excel avec plusieurs colonnes et environ 300 lignes. La premier ligne d'Excel correspond a l'entête des colonnes (Noms des colonnes).

Le but et de trouver dans la première ligne Excel l'entête nommée « Liste » puis remplir un list5 avec les 300 lignes (tant que c'est différent de vide) de la colonne « Liste » et des 6 colonnes qui suivent colonne « Liste ».

Si par exemple l'entête « Liste » et en M1 alors on remplit la list5 avec M,N,O,P,Q,R de la ligne 2 à la ligne 300 ( tant que c'est différent de vide).

Voici mon code qui fonctionne mais dont le temps de traitement est extrêmement long.


' Permet de rapatriement du fichier excel  vers la List5
         
Dim i As Integer
Dim a As Integer
Dim r As Integer

For i = 2 To 290
For a = 1 To 36
For r = a To 36

sTemp = Trim(classeur_excel.Cells(i, r).Value)
sTemp5 = Trim(classeur_excel.Cells(1, a).Value)

If sTemp5 = "Liste" And sTemp <> "" Then List5.AddItem sTemp

Next
Next
Next



Auriez-vous une solution plus rapide.

Merci d'avance.

4 réponses

nhervagault Messages postés 6063 Date d'inscription dimanche 13 avril 2003 Statut Membre Dernière intervention 15 juillet 2011 37
18 janv. 2011 à 14:31
Salut,

Essaie de lire par range, c'est plus rapide

avec
.Range("A1:C10")
Ca doit gérer plusieurs lignes


Exemple
  Dim xlRange As Excel.Range = xlWSheet.Range("A1:A10")
        Dim xlCell As Excel.Range = Nothing
        Dim arrlist As New ArrayList
        With xlApp
            For Each xlCell In xlRange
                If CBool(xlCell.HasFormula) Then
                    arrlist.Add(xlCell.Formula.ToString)
                Else
                    arrlist.Add(xlCell.Value)
                End If
            Next
        End With
0
sancho12345 Messages postés 131 Date d'inscription jeudi 21 mai 2009 Statut Membre Dernière intervention 18 mars 2012
18 janv. 2011 à 22:50
Bonsoir et merci pour ta réponse,


Dans cet exemple de code ou dois-je placer la recherche "Liste" dans la première colonne d'Excel ainsi que la destination LIST5.additem.

Je ne suis pas trop calé en VB.

Merci
0
nhervagault Messages postés 6063 Date d'inscription dimanche 13 avril 2003 Statut Membre Dernière intervention 15 juillet 2011 37
18 janv. 2011 à 23:40
Je ne comprends pas trop le but de ton algo.

Il est preferable de charger tout ton fichier excel dans une collection à 2 dimensions
une collection de collection ou un array [][]

et de le lire apres en recopiant ton algo du premier post.

Ce qui ralenti ton algo c'est que classeur_excel.Cells(1, a).Value
est tres lent d'apres mes souvenirs car il y a un appel com a chaque fois.

Un seul appel avec .Range("A1:B10") pour avoir un range
devrait améliorer sensiblement les performances.
0
sancho12345 Messages postés 131 Date d'inscription jeudi 21 mai 2009 Statut Membre Dernière intervention 18 mars 2012
20 janv. 2011 à 09:29
Salut,

Merci pour ton aide.

A+
0
Rejoignez-nous