Recherchev trop longue en temps de calcul.
Résolu
-
-
-
Bonjour à toutes et tous,
J'ai une base de données contenant un peu plus de 40000 lignes contenues dans un onglet de classeur (nom de la feuille : BASE)
Je veux récupérer certaines valeurs de cette base de données sur un autre onglet du même classeur (nom de la feuille : RECAP).
Je procède par recherchev et cela fonctionne très bien.
Mais quand j'étend la formule sur la plage de cellule qui m'intéresse (cette plage est effectivement très importante mais elle correspond à mon besoin, les calculs deviennent très long.
SI j'étends les formules contenues dans C3:C929 à D3:AYU929 les temps de calculs deviennent très longs.
Connaissez vous une méthode par formule ou même par macro qui me permettrait de réduire considérablement ces temps de calculs
Ci après ma formule :
RECHERCHEV(A3;BASE;2;0)
ou BASE est une plage nommée :
BASE!$C$3:$L$40352
Merci
Cordialement
Hugues
J'ai une base de données contenant un peu plus de 40000 lignes contenues dans un onglet de classeur (nom de la feuille : BASE)
Je veux récupérer certaines valeurs de cette base de données sur un autre onglet du même classeur (nom de la feuille : RECAP).
Je procède par recherchev et cela fonctionne très bien.
Mais quand j'étend la formule sur la plage de cellule qui m'intéresse (cette plage est effectivement très importante mais elle correspond à mon besoin, les calculs deviennent très long.
SI j'étends les formules contenues dans C3:C929 à D3:AYU929 les temps de calculs deviennent très longs.
Connaissez vous une méthode par formule ou même par macro qui me permettrait de réduire considérablement ces temps de calculs
Ci après ma formule :
RECHERCHEV(A3;BASE;2;0)
ou BASE est une plage nommée :
BASE!$C$3:$L$40352
Merci
Cordialement
Hugues
A voir également:
- Recherchev trop longue en temps de calcul.
- Renommer plusieurs fichiers en même temps - Guide
- Calcul moyenne excel - Guide
- Calcul km marche à pied gratuit - Télécharger - Sport
- Combien de temps reste une story sur facebook - Guide
- Maps satellite en temps réel - Guide
4 réponses
Bonjour,
Tu as conscience que ça fait 927x1345 formules, soit 1 246 815 ?
Soit t'acheter un Cray One d'occasion, soit aborder ton problème différemment, soit t'acheter de la patience et avoir une machine à café en état de fonctionnement...
Vu que les fonctions feuille sont bien optimisées et qu'il faut une recherche par cellule, en vba ça risque d'être encore plus lent.
Et si tu ramènes toujours la colonne 2 pourquoi une plage si large (BASE!$C$3:$L$40352) ?
eric
En essayant continuellement, on finit par réussir.
Donc plus ça rate, plus on a de chances que ça marche.(les Shadoks)
En plus du merci (si si, ça se fait !!!), penser à mettre en résolu. Merci
Tu as conscience que ça fait 927x1345 formules, soit 1 246 815 ?
Soit t'acheter un Cray One d'occasion, soit aborder ton problème différemment, soit t'acheter de la patience et avoir une machine à café en état de fonctionnement...
Vu que les fonctions feuille sont bien optimisées et qu'il faut une recherche par cellule, en vba ça risque d'être encore plus lent.
Et si tu ramènes toujours la colonne 2 pourquoi une plage si large (BASE!$C$3:$L$40352) ?
eric
En essayant continuellement, on finit par réussir.
Donc plus ça rate, plus on a de chances que ça marche.(les Shadoks)
En plus du merci (si si, ça se fait !!!), penser à mettre en résolu. Merci
Bonsoir,
colle ce bout de code dans les propriétés de ta feuille RECAP
Private Sub Worksheet_Change(ByVal Target As Range)
On Error Resume Next
If Not Intersect(Target, [A3]) Is Nothing Then
With Sheets("Feuil1")
.Range("B3").Value = WorksheetFunction.VLookup(.Range("A3").Value, [BASE], 2, False)
End With
End If
End Sub
lorsque tu saisiras ou changeras une donnée de la cellule A3, la donnée de la colonne 2 de ta base s'affichera en B3 voir si tu gagnes un peu de temps
A+
Mike-31
Une période d'échec est un moment rêvé pour semer les graines du savoir.
colle ce bout de code dans les propriétés de ta feuille RECAP
Private Sub Worksheet_Change(ByVal Target As Range)
On Error Resume Next
If Not Intersect(Target, [A3]) Is Nothing Then
With Sheets("Feuil1")
.Range("B3").Value = WorksheetFunction.VLookup(.Range("A3").Value, [BASE], 2, False)
End With
End If
End Sub
lorsque tu saisiras ou changeras une donnée de la cellule A3, la donnée de la colonne 2 de ta base s'affichera en B3 voir si tu gagnes un peu de temps
A+
Mike-31
Une période d'échec est un moment rêvé pour semer les graines du savoir.
Bonsoir,
http://boisgontierjacques.free.fr/pages_site/recherchev.htm#FonctionRechVM
Jacques Boisgontier
http://boisgontierjacques.free.fr/pages_site/recherchev.htm#FonctionRechVM
Jacques Boisgontier
Bonjour,
Voir PJ
https://www.cjoint.com/c/ECBrhGtcbMV
Function RechvM(clé As Range, dt As Range, champ As Range, colResult)
Application.Volatile
Set d = CreateObject("Scripting.Dictionary")
a = champ.Value
b = clé.Value
c = dt.Value
For i = LBound(a) To UBound(a)
d(a(i, 1)) = a(i, colResult)
Next i
Dim temp()
ReDim temp(LBound(b) To UBound(b), 1 To UBound(c, 2))
For i = LBound(b) To UBound(b)
For k = 1 To UBound(c, 2)
tmp = b(i, 1) & CDbl(c(1, k))
temp(i, k) = d(tmp)
Next k
Next i
RechvM = temp
End Function
Sélectionner C4:D273
=rechvm(A4:A273;C3:D3;BASE;2)
valider avec maj+ctrl+entrée
Jacques Boisgontier
Voir PJ
https://www.cjoint.com/c/ECBrhGtcbMV
Function RechvM(clé As Range, dt As Range, champ As Range, colResult)
Application.Volatile
Set d = CreateObject("Scripting.Dictionary")
a = champ.Value
b = clé.Value
c = dt.Value
For i = LBound(a) To UBound(a)
d(a(i, 1)) = a(i, colResult)
Next i
Dim temp()
ReDim temp(LBound(b) To UBound(b), 1 To UBound(c, 2))
For i = LBound(b) To UBound(b)
For k = 1 To UBound(c, 2)
tmp = b(i, 1) & CDbl(c(1, k))
temp(i, k) = d(tmp)
Next k
Next i
RechvM = temp
End Function
Sélectionner C4:D273
=rechvm(A4:A273;C3:D3;BASE;2)
valider avec maj+ctrl+entrée
Jacques Boisgontier