Ceci est une page optimisée pour les mobiles. Cliquez sur ce texte pour afficher la vraie page.

recopie formule et/ou mettre résultats

erics83

XLDnaute Impliqué
Bonjour,

J'ai un classeur avec la feuille "Base" contenant beaucoup de ligne.

Dans une des colonnes, je fais un INDEX/EQUIV pour trouver des correspondances, mais vu le nombre de lignes, cela prend beaucoup de temps et le poids du classeur en prend un coup aussi....

N'y aurait-il pas une solution, pour qu'à l'ouverture du classeur, les correspondances entre les feuilles "Base" et "Nom" se fassent ?

En vous remerciant par avance,
 

Pièces jointes

  • Classeur11.xlsm
    96.9 KB · Affichages: 69
  • Classeur11.xlsm
    96.9 KB · Affichages: 65

néné06

XLDnaute Accro
Re : recopie formule et/ou mettre résultats

Bonjour Eric,

Salut OO

Une autre méthode!


A+

René
 

Pièces jointes

  • Copie de Classeur11.xlsm
    75.2 KB · Affichages: 31
  • Copie de Classeur11.xlsm
    75.2 KB · Affichages: 27

DoubleZero

XLDnaute Barbatruc
Re : recopie formule et/ou mettre résultats

Re-bonjour, bonjour, néné06 ,

...Une autre méthode!...

néné06 ,

* L'occasion m'est donnée, ici, de te remercier.

Pour quelle raison ? Tu m'as fait comprendre que la méthode "Match" est bien plus rapide que la méthodes "Find".

Après quelques minutes , heures , jours , semaines ... j'en ai, me semble-t-il, assimilé la "recette".

Pour ce qui concerne les tabl..., je crois que je "mourirai" avant d'en avoir saisi le raisonnement. Cela n'est pas grave : l'important, pour moi, est le *.

A bientôt
 

néné06

XLDnaute Accro
Re : recopie formule et/ou mettre résultats

Re,

@ 00

Merci pour le post #4, mais pour les tableaux, je suis persuadé que tu vas vite les adopter !

@ tous
un version un peu plus optimisée !



A+
René
 

Pièces jointes

  • Classeur1.xlsm
    84.8 KB · Affichages: 29
  • Classeur1.xlsm
    84.8 KB · Affichages: 34
Dernière édition:

job75

XLDnaute Barbatruc
Re : recopie formule et/ou mettre résultats

Bonsoir erics83, hello chère ânesse, néné06,

Application.Match ne sera pas plus rapide que la fonction EQUIV puisque c'est la même chose

Si l'on veut vraiment aller vite il faut utiliser le Dictionary :

Code:
Sub Dico()
Dim d As Object, t, i&, P As Range
Set d = CreateObject("Scripting.Dictionary")
t = Feuil2.[A1].CurrentRegion.Resize(, 2) 'feuille Nom
For i = 1 To UBound(t)
  d(t(i, 1)) = t(i, 2)
Next
Set P = Feuil1.[A1].CurrentRegion.Resize(, 6) 'feuille Base
t = P
For i = 2 To UBound(t)
  If d.exists(t(i, 1)) Then t(i, 6) = d(t(i, 1)) Else t(i, 6) = ""
Next
P.Columns(6) = Application.Index(t, , 6)
End Sub
Testé les 2070 lignes de la feuille "Base" sur Win 8 - Excel 2013 :

- macro du post #3 => 0,12 seconde

- macro du post #5 => 0,06 seconde

- macro de ce post => 0,02 seconde.

A+
 
Dernière édition:

néné06

XLDnaute Accro
Re : recopie formule et/ou mettre résultats

Re,

@ Job75

Bonsoir Job

C'est vrai que "Dictionary" est plus rapide, mais je crois que notre ami Eric à un fichier de plus de 200000 lignes et "Dictionary" est limité à 65535 données, je pense.
La version du post#5 =>0.07 seconde

A+

René
 

job75

XLDnaute Barbatruc
Re : recopie formule et/ou mettre résultats

Re René,

mais je crois que notre ami Eric à un fichier de plus de 200000 lignes et "Dictionary" est limité à 65535 données, je pense

Il n'y a aucune limite de ce genre pour le Dictionary, ensuite ici le nombre d'items est le nombre de noms en feuille "Nom".

J'ai complété mon post #6 avec la durée d'exécution de ta 2ème macro.

A+
 

job75

XLDnaute Barbatruc
Re : recopie formule et/ou mettre résultats

Re,

Testé sur 206900 lignes :

- macro du post #3 => 14,3 secondes

- macro du post #5 => 5,4 secondes

- macro du post #6 => 1,8 seconde.

Bonne fin d soirée.
 

job75

XLDnaute Barbatruc
Re : recopie formule et/ou mettre résultats

Re,

Par comparaison les formules INDEX/EQUIV du post #1 sur 206900 lignes s'exécutent en 3,7 secondes :

Code:
Sub test()
Dim t
t = Timer
[F2:F206901].Formula = [F2:F206901].Formula
MsgBox "Durée " & Format(Timer - t, "0.00 \s")
End Sub
Bonne nuit.
 

job75

XLDnaute Barbatruc
Re : recopie formule et/ou mettre résultats

Bonjour erics83, 00, René, le forum,

En ne chargeant que la 1ère colonne du tableau c'est nettement plus rapide :

Code:
Sub Dico()
Dim dur, d As Object, t, i&, P As Range, rest$()
dur = Timer
Set d = CreateObject("Scripting.Dictionary")
t = Feuil2.[A1].CurrentRegion.Resize(, 2) 'feuille Nom
For i = 1 To UBound(t)
  d(t(i, 1)) = t(i, 2)
Next
With Feuil1 'feuille Base
  Set P = .Range("A2", .Range("A" & .Rows.Count).End(xlUp)(3)) 'au moins 2 éléments
End With
t = P
ReDim rest(1 To UBound(t), 1 To 1) 'base 1
For i = 1 To UBound(t)
  If d.exists(t(i, 1)) Then rest(i, 1) = d(t(i, 1))
Next
'MsgBox "Durée du calcul " & Format(Timer - dur, "0.00 \s")
'dur = Timer
P.Columns(6) = rest
MsgBox "Durée " & Format(Timer - dur, "0.00 \s")
End Sub
Durée d'exécution sur 206900 lignes => 0,8 seconde dont :

- 0,5 seconde pour le calcul (remplissage du tableau rest)

- 0,3 seconde pour la restitution dans la feuille.

Bonne journée.
 

Discussions similaires

Réponses
4
Affichages
337
Les cookies sont requis pour utiliser ce site. Vous devez les accepter pour continuer à utiliser le site. En savoir plus…