OVH Cloud OVH Cloud

Faire une recherche a deux critére

12 réponses
Avatar
pellet15
Bonjour =E0 Tous

Dans le fichier attacher je voudrait une formule en D8
pour trouver la Long/Lat (G2:G87) la plus pr=E8s de la s=E9lection faite
en
B8 et C8.

http://cjoint.com/?lBrNIpYZwx
Merci

2 réponses

1 2
Avatar
Daniel
Bonsoir FxM

J'ai fait un fichier avec 32569 donné GPS
Lorsque je fait une recherche cela prend 2 minute avant d'avoir une réponce.
Je voudrait te faire parvenir mon fichier (1.44zipé) .

Fait moi parvenir t'on courriel à (pas d'espace) "pellet15
@vidéotron.ca"

Merci

"FxM" a écrit dans le message de news:

pellet15 wrote:
Bonsoir FxM

ok cela fonctionne mais très lent.

je le transfer dans mon fichier principal,il y a 10 foix plus de donner
:-((
Merci



Bonsoir,

Excuses-moi du délai, je rentre de déplacement. D'ailleurs, il vaut mieux
ne pas s'absenter ... 895 messages en 4 jours sur MPFE !

Ceci étant dit, si tu es sûr que tes 'subd' sont regroupés et qu'il n'y a
donc pas d'isolés, tu peux terminer la boucle beaucoup plus rapidement.
C'est l'objet de la variable 'rep' rajoutée ci-dessous en plusieurs
endroits. Le 'if rep > 10' laisse une petite tolérance ;o)

Teste et dis-moi.

@+
FxM

Public Function cherche(subd, pmil)
Set liste = Sheets("Donne").Range("AR2:AR65000")
diff = 1000000000#: lig = -1: rep = 0
For Each celle In liste
If celle.Offset(0, -2).Text = subd Then
vale = celle.Offset(0, -1): rep = rep + 1
If (Abs(vale - pmil)) < diff Then
diff = Abs(vale - pmil): lig = celle.Row: rep = 0
End If
End If
If rep > 10 Then Exit For
Next celle
If lig > -1 Then cherche = Intersect(liste, Rows(lig))
End Function



PS pour AV : Alain, n'aurais-tu pas un petit .find (que je ne maîtrise pas
du tout) en stock ? :o)



Avatar
FxM
Un petit suivi des derniers échanges avec Daniel :

Avec le fichier original, une recherche prenait environ 79 secondes.
Pour la même recherche, ce temps tombe presque instantanément à 2
secondes en remplaçant :

If celle.Offset(0, -2).Text = subd Then
par


If celle.Offset(0, -2) = subd Then



Comme quoi Excel est un tableur et n'aime pas le '.text'
... OK, je sors :o)

@+
FxM





Daniel wrote:
Bonsoir FxM

J'ai fait un fichier avec 32569 donné GPS
Lorsque je fait une recherche cela prend 2 minute avant d'avoir une réponce.
Je voudrait te faire parvenir mon fichier (1.44zipé) .

Fait moi parvenir t'on courriel à (pas d'espace) "pellet15
@vidéotron.ca"

Merci

"FxM" a écrit dans le message de news:

pellet15 wrote:
Bonsoir FxM

ok cela fonctionne mais très lent.

je le transfer dans mon fichier principal,il y a 10 foix plus de donner
:-((
Merci

Bonsoir,


Excuses-moi du délai, je rentre de déplacement. D'ailleurs, il vaut mieux
ne pas s'absenter ... 895 messages en 4 jours sur MPFE !

Ceci étant dit, si tu es sûr que tes 'subd' sont regroupés et qu'il n'y a
donc pas d'isolés, tu peux terminer la boucle beaucoup plus rapidement.
C'est l'objet de la variable 'rep' rajoutée ci-dessous en plusieurs
endroits. Le 'if rep > 10' laisse une petite tolérance ;o)

Teste et dis-moi.

@+
FxM

Public Function cherche(subd, pmil)
Set liste = Sheets("Donne").Range("AR2:AR65000")
diff = 1000000000#: lig = -1: rep = 0
For Each celle In liste
If celle.Offset(0, -2).Text = subd Then
vale = celle.Offset(0, -1): rep = rep + 1
If (Abs(vale - pmil)) < diff Then
diff = Abs(vale - pmil): lig = celle.Row: rep = 0
End If
End If
If rep > 10 Then Exit For
Next celle
If lig > -1 Then cherche = Intersect(liste, Rows(lig))
End Function



PS pour AV : Alain, n'aurais-tu pas un petit .find (que je ne maîtrise pas
du tout) en stock ? :o)







1 2