EQUIV INDEX en VBA pour gagner du temps - enjeu: 10 mn de calculs

Bonjour

Je dois remonter pour chaque ligne d'un article remonter dans une cellule les titres des colonnes cochées "O" pour cet article et les séparer avec un ";" pour l'export après.

Mes produits vont de la ligne i = 8 à la ligne DL.

Les catégories sont dans les colonnes 133 à 144 et les intitulés sont donc dans la ligne 6.

Je suis obligé de faire ça et ne peut pas mettre le nom en direct dans la formule car c'est du cyrillique.

Mon résultat, une chaine de caractère séparé par un ";" se trouve donc en colonne 28. Bien sur elle ne doit pas se terminer par ";"

Aujourd'hui j'ai écrit ça:

For i = 8 To DL

For j = 133 To 144

If Cells(i, j) = "O" Then

Cells(i, 28) = Cells(6, j) & ";" & Cells(i, 28) 'Ru

Else

End If

Next j

' la suite des caractéristiques est créé à ce stade, il faut juste équeuter le dernier caractère*

L = Len(Cells(i, 28))

If L <> 0 Then

D = L - 1

Cells(i, 28) = Left(Cells(i, 28), D)

End If

Next i

*Je suis obligé de supprimer le dernier caractère sinon je vais me trouver, dans la cas d'une seule caractéristique, avec un truc du genre "BIO;" et le programme derrière va planter car il va attendre la caractéristique suivante.

Ca marche bien, d'autant que j'ai trois langues étrangères à traiter comme ça MAIS, avec mon i5 4750 et Excel 2013, les 3000 lignes de mes produits me prennent 10 minutes mesurées chrono.

Je m'ennuie ..

Aussi je voudrais savoir si avec EQUIV/INDEX que je maitrise à peine en temps normal, je peux gagner du temps sur la boucle ?

qu'en pensez vous ?

Salut Polygos,

même remarque que pour l'autre post...

A+

Bonjour,

ce qui te prend du temps c'est de lire/écrire plusieurs fois chaque cellule.

Il faut lire/écrire en bloc et travailler en mémoire.

Ex :

    Dim datas, lig As Long, col As Long, i As Long, j As Long, result() As String
    datas = Cells(8, 133).Resize(DL, 12).Value
    ReDim result(1 To UBound(datas), 1 To 1)
    For i = 1 To UBound(datas, 1)
        For j = 1 To UBound(datas, 2)
            If datas(i, j) = "O" Then
                result(i, 28) = result(i, 28) & ";" & datas(6, j)   'Ru
            End If
        Next j
        result(i, 28) = Mid(result(i, 28), 2)
    Next i
    Cells(8, 28).Resize(DL) = result

non testé bien sûr vu l'absence de fichier. Tu auras peut-être des petites correction à faire.

eric

De rien Polygos !

..faut être franc.

c'est trop compliqué pour moi, j'y comprends rien. Donc je retourne à mes cours.

Rechercher des sujets similaires à "equiv index vba gagner temps enjeu calculs"