OVH Cloud OVH Cloud

Optimisation du code

7 réponses
Avatar
Noegor
Bonjour,
Je suis toujours aussi novice et je cherche à progresser...
J'ai lu les pages de Laurent Longre sur "le parcours et la recherche dans
une collection", mais je ne sais comment mettre en application pour mon cas
que voici :
Zones de recherche : A1 = 25, B1= "Décembre"
Zone de résultat : D1 reçoit le libellé de la recherche correspondant à
A1+B1.
Zones de données : C1:E1000
C1=01.....C1000= 31
D1=Janvier...D1000= Décembre
E1= 1er libellé E1000= dernier libellé.
Comment faire pour récupérer rapidement le libéllé correspondant au 25
Décembre?
Je n'ai rien trouvé de mieux que de me ballader de cellule en cellule. Je
pressens qu'il y a plus efficace...recherche indéxée? recherche
dichotomique?
Qui sait?
D'avance merci
Noégor

7 réponses

Avatar
Lolote
Salut Noegor,

Données récupérées en F1 et non pas en D1
ÞCALER(E1;A1-1+LIGNE(INDEX(E:E;EQUIV(B1;D:D;0);1))-1;0)
avec comme tu le dis :
En colonne C les chiffres
En colonne D les mois
En colonne E les libélés

En espérant avoir répondu à ta question.

@+ Lolote

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

Bonjour,
Je suis toujours aussi novice et je cherche à progresser...
J'ai lu les pages de Laurent Longre sur "le parcours et la recherche dans
une collection", mais je ne sais comment mettre en application pour mon
cas
que voici :
Zones de recherche : A1 = 25, B1= "Décembre"
Zone de résultat : D1 reçoit le libellé de la recherche correspondant à
A1+B1.
Zones de données : C1:E1000
C1.....C1000= 31
D1=Janvier...D1000= Décembre
E1= 1er libellé E1000= dernier libellé.
Comment faire pour récupérer rapidement le libéllé correspondant au 25
Décembre?
Je n'ai rien trouvé de mieux que de me ballader de cellule en cellule. Je
pressens qu'il y a plus efficace...recherche indéxée? recherche
dichotomique?
Qui sait?
D'avance merci
Noégor




Avatar
JB
Bonjour,

L'optimisation commence par une bonne organisation des données.

cas 1:
Toutes les dates sont consécutives et sous la forme jj/mm/aa et la
zone des libellés est nommée Libellés.

A B C D E F
1 16/1/2006 01/01/2006 AA1
2 02/01/2006 AA2
3 03/01/2006 AA3
4
5

=Index(libellés,A1-Date(2006;1;1)+1))

Cas 2/ Il manque des dates mais elles sont TRIEES dans l'ordre
croissant

=INDEX(Libellés;Equiv(A1;Dates;1))

Avec 1 dans Equiv, la recherche est dichotomique.

Cordialement JB
Avatar
Noegor
Merci des réponses, je peux avancer mais si je voulais le faire en VBA?
A +
"JB" a écrit dans le message de
news:
Bonjour,

L'optimisation commence par une bonne organisation des données.

cas 1:
Toutes les dates sont consécutives et sous la forme jj/mm/aa et la
zone des libellés est nommée Libellés.

A B C D E F
1 16/1/2006 01/01/2006 AA1
2 02/01/2006 AA2
3 03/01/2006 AA3
4
5

=Index(libellés,A1-Date(2006;1;1)+1))

Cas 2/ Il manque des dates mais elles sont TRIEES dans l'ordre
croissant

=INDEX(Libellés;Equiv(A1;Dates;1))

Avec 1 dans Equiv, la recherche est dichotomique.

Cordialement JB
Avatar
Fredo P.
Bonsoir Neogor
Tu devrais pouvoir te débrouiller avec ça.
[D1] = Range("E" & Evaluate("=sum((A1:A1000 %) * (B1:B1000=""Décembre"") *
Row(B1:B1000))"))
ou
[D1] = Range("E" & Evaluate("=sum((A1:A1000 ¡) * (B1:B1000±) *
Row(B1:B1000))"))

--
Mon E-mail, c'est sans voyelle avant l'@.
"Noegor" a écrit dans le message de
news:
Bonjour,
Je suis toujours aussi novice et je cherche à progresser...
J'ai lu les pages de Laurent Longre sur "le parcours et la recherche dans
une collection", mais je ne sais comment mettre en application pour mon
cas

que voici :
Zones de recherche : A1 = 25, B1= "Décembre"
Zone de résultat : D1 reçoit le libellé de la recherche correspondant à
A1+B1.
Zones de données : C1:E1000
C1.....C1000= 31
D1=Janvier...D1000= Décembre
E1= 1er libellé E1000= dernier libellé.
Comment faire pour récupérer rapidement le libéllé correspondant au 25
Décembre?
Je n'ai rien trouvé de mieux que de me ballader de cellule en cellule. Je
pressens qu'il y a plus efficace...recherche indéxée? recherche
dichotomique?
Qui sait?
D'avance merci
Noégor




Avatar
JB
http://cjoint.com/?bAuTWqJLGO

Sub essai1()
d = Range("A1")
MsgBox Application.Index(Range("libelles"), [A1] - DateSerial(2006,
1, 1) + 1)
End Sub

Sub essai2()
d = Range("A1")
p = Application.Match([A1], Range("dates"), 1)
If IsError(p) Then
MsgBox "Non trouvé"
Else
MsgBox Application.Index(Range("libelles"), p)
End If
End Sub

JB
Avatar
Noegor
Bonjour Fredo,
Je profite du weekEnd pour tester les réponses et je n'y arrive pas.
Si j'ai bien compris :
D1 reçoit la réponse
A 1 +B1 c'est ma clef de recherche
A1:A1000 ?
B1:B1000 ?
Je suis perdu.
Peux-tu me donner la "clef" ?
Merci d'avance et bon dimanche
Noégor

"Fredo P." a écrit dans le message de
news:
Bonsoir Neogor
Tu devrais pouvoir te débrouiller avec ça.
[D1] = Range("E" & Evaluate("=sum((A1:A1000 %) * (B1:B1000=""Décembre"")
*

Row(B1:B1000))"))
ou
[D1] = Range("E" & Evaluate("=sum((A1:A1000 ¡) * (B1:B1000±) *
Row(B1:B1000))"))

--
Mon E-mail, c'est sans voyelle avant l'@.
"Noegor" a écrit dans le message de
news:
Bonjour,
Je suis toujours aussi novice et je cherche à progresser...
J'ai lu les pages de Laurent Longre sur "le parcours et la recherche
dans


une collection", mais je ne sais comment mettre en application pour mon
cas

que voici :
Zones de recherche : A1 = 25, B1= "Décembre"
Zone de résultat : D1 reçoit le libellé de la recherche correspondant à
A1+B1.
Zones de données : C1:E1000
C1.....C1000= 31
D1=Janvier...D1000= Décembre
E1= 1er libellé E1000= dernier libellé.
Comment faire pour récupérer rapidement le libéllé correspondant au 25
Décembre?
Je n'ai rien trouvé de mieux que de me ballader de cellule en cellule.
Je


pressens qu'il y a plus efficace...recherche indéxée? recherche
dichotomique?
Qui sait?
D'avance merci
Noégor








Avatar
Fredo P.
J'ai repris ton premier post pour revoir la chose, effectivement cela avait
besoin d'être revu.

Zones de recherche : A1 = 25, B1= "Décembre"
Zone de résultat : D1 reçoit le libellé de la recherche correspondant à
A1+B1.
____1) Si tu inscrit le résultat en D1 qui appartient à ta zone de données,
cela ne peut pas bien fonctionner.
Zones de données : C1:E1000
C1.....C1000= 31
D1=Janvier...D1000= Décembre
E1= 1er libellé E1000= dernier libellé.
Comment faire pour récupérer rapidement le libéllé correspondant au 25
Décembre?
--
Je suis perdu.
Peux-tu me donner la "clef" ?
Dans ce cas il n'y a pas besoin de clef, cette ligne de code suffit à

trouver ce que tu cherches.
Si En A1=premier critére de recherche à trouver en C1:C1000 et B1.me crit
de rech de rech à trouver en D1:D1000, en E1:E1000 la référence.
[D1] = Range("E" & Evaluate("=sum((C1:C1000 ¡) * (D1:D1000±) *
Row(D1:D1000))"))
Si tes critères de recherche sont toujours en A1 & B1, tu peux mettre la
ligne dans une fonction comme ceci:
Function Trv()
Trv=Range("E" & Evaluate("=sum((C1:C1000 ¡) * (D1:D1000±) *
Row(D1:D1000))"))
End Function
;que tu pourras appeler dans n'importe quelle cellule libre de cette
manière:=Trv()