utilisation de tableaux pour traitements de ...

Boostez vos compétences Excel avec notre communauté !

Rejoignez Excel Downloads, le rendez-vous des passionnés où l'entraide fait la force. Apprenez, échangez, progressez – et tout ça gratuitement ! 👉 Inscrivez-vous maintenant !

romainchu78

XLDnaute Occasionnel
un ami m'a parle des tableaux. ils permettent entre autre de traiter des volumes important de donnees dans la memoire du pc en diminuant ainsi les temps de compile. je souhaiterais donc utiliser des tableaux pour comparer des colonnes.
jai 4 colonnes de donnee. elle fonctionnent deux par deux. 1ere colonne des noms de produits la 2eme leurs valeures. la 3eme colonne des autres produits et la 4eme des quantites.
je souhaiterais comparer la 1ere colonne a la 2eme. et retenir les produits similaires. si c'est la cas, le produit duplique sera mis en colonne G.
pour cela je voudrais charger la 1ere dans un tableau puis la 3 eme colonne. et apres comparer les valeurs des tableaux entre eux.
jai fais ce code mais cela ne fonctionne pas:

Sub test()
Dim tabl1(10000)
Dim tabl2(10000)
For i = 0 To 10000
tabl1(i) = Cells(i, 1)
tabl2(i) = Cells(i, 4)
Next i
For j = 0 To 10000
If tabl1(j) = tabl2(j) Then
Cells(j, 7) = tabl1(j)
End If
Next j
End Sub

pourais-je avoir de l'aide, merci d'avance
romain,
 
Re : utilisation de tableaux pour traitements de ...

un ami m'a parle des tableaux. ils permettent entre autre de traiter des volumes important de donnees dans la memoire du pc en diminuant ainsi les temps de compile. je souhaiterais donc utiliser des tableaux pour comparer des colonnes.
jai 4 colonnes de donnee. elle fonctionnent deux par deux. 1ere colonne des noms de produits la 2eme leurs valeures. la 3eme colonne des autres produits et la 4eme des quantites.
je souhaiterais comparer la 1ere colonne a la 2eme. et retenir les produits similaires. si c'est la cas, le produit duplique sera mis en colonne G.
pour cela je voudrais charger la 1ere dans un tableau puis la 3 eme colonne. et apres comparer les valeurs des tableaux entre eux.
jai fais ce code mais cela ne fonctionne pas:

Sub test()
Dim tabl1(10000)
Dim tabl2(10000)
For i = 0 To 10000
tabl1(i) = Cells(i, 1)
tabl2(i) = Cells(i, 4)
Next i
For j = 0 To 10000
If tabl1(j) = tabl2(j) Then
Cells(j, 7) = tabl1(j)
End If
Next j
End Sub

pourais-je avoir de l'aide, merci d'avance
romain,
Salut
P'vez répéter la question ?!? 😕
Premier passage sur ta 1re boucle :
i = 0 => tab1(0)= cells(0,1) ? c'est quoi la ligne 0 ?

Le fait que la mise en variable "économise du temps" n'est pas toujours vrai.
Dans ton exemple c'est loin d'être le cas.
Ce qui perd du temps, c'est le passage Excel/µprocesseur et inverse.
Donc, plus tu peux limiter ces transferts, plus vite s'exécute ton code

Mais pour ton exemple, ce code
For j = 1 To 10000
If cells(j,1) = cells(j,4) Then Cells(j, 7) = cells(j,1)
Next j
sera nettement plus rapide, puisqu'il fait le même nombre de transfert Excel/Code, mais avec une seule boucle et moins d'instructions.
Et tu peux "l'accélérer" en bloquant le rafraîchissement écran
A+
 
Dernière édition:
Re : utilisation de tableaux pour traitements de ...

Bonjour Romain, bonjour Gorfael, bonjour à tous,

Le traitement des tableaux en mémoire est effectivement extrêmement rapide mais il faut bien les définir et cela dépend aussi du nombre de données à traiter.

Dans ton cas, si tu as 10000 lignes d'enregistrements et 90% des cellules en colonne 7 à modifier, la méthode de Gorfael sera plus rapide; si par contre sur 30000 lignes seules quelques cellules seront à modifier, les tables en mémoire seront plus rapides.

Pour définir les tables, tu peux utiliser le "Current region" qui est très pratique et permet de mettre une partie de ta feuille en mémoire en une seule instruction.

Ci-dessous, un petit exemple à tester:

Code:
Sub Test()
Dim tablo As Variant, i As Integer
Application.ScreenUpdating = False
Application.Calculation = xlManual
Sheets("Données").Activate
tablo = ActiveSheet.Range("a3").CurrentRegion
For i = 2 To UBound(tablo) 'Début ligne 2 pour éviter les titres de colonne
    If tablo(i, 1) = tablo(i, 4) Then
    Cells(i, 7).Value = tablo(i, 1)
    End If
Next i
Application.Calculation = xlAutomatic
Application.ScreenUpdating = True
End Sub

@+

Gael
 
- Navigue sans publicité
- Accède à Cléa, notre assistante IA experte Excel... et pas que...
- Profite de fonctionnalités exclusives
Ton soutien permet à Excel Downloads de rester 100% gratuit et de continuer à rassembler les passionnés d'Excel.
Je deviens Supporter XLD

Discussions similaires

Réponses
8
Affichages
690
Réponses
7
Affichages
922
Réponses
33
Affichages
3 K
Retour