Google Groups no longer supports new Usenet posts or subscriptions. Historical content remains viewable.
Dismiss

Equivalent de la fonction Equiv en VBA

1,251 views
Skip to first unread message

Zarkoff

unread,
Mar 13, 2004, 9:10:14 AM3/13/04
to
Bonjour,

j'ai fait un code VBA qui est devenu d'une lenteur affligeante au fur et à
mesure que la base de données grandissait

en gros elle fait :
Pour toutes les lignes du fichier source, examiner toutes les lignes du
fichier destinatio et si les données des colonnes A sont identiques alors
faire un certains nombre de chose. et ceux avec 2 For...Next imbriqué (For 1
to nombre_de_ligne_source... For 1 to nombre_de_ligne_destination...next
...next)

Les problème c'est que le fichier source est tellement important que ma
macro tourne pendant 15 minutes !

Je dois donc changer de methode mais je suis bloqué car je ne connais pas la
synthaxe pour faire l'équivalent de la fonction EQUIV en VBA.

en gros mon idée est qu'au lieu de regarder chaque ligne, et comparer les
valeurs, la macro recherche la position de la valeur fichier_source dans la
base de donnée fichier_destination. Au préalable, je mettrais une fonction
On Error Resume Next pour éviter un gros plantage en cas d'insuccès de la
recherche.

donc en gros :

Windows(Fichier_Source).Activate
For a to nombre_ligne_source
val_recherche = cells (a,1)
On Error Resume Next
Windows(Fichier_Destination).Activate
/!\ --- Determination de la position de la ligne dans la
database.--- Votre aide pour cette ligne...

Pourriez-vous m'aider sur ce point ?

Merci d'avance,

Cordialement.


M. PETIT

unread,
Mar 13, 2004, 9:24:40 AM3/13/04
to
Bonjour

Mettre une fonction EQUIV dans une feuille à part
ou une cellule cachée programmée directement dans
le tableur ou par vba (soit en A1)
Cette fonction recherchera un "mot" placé en valeur
de référence dans une cellule adjacente (soit en B1)
Vba placera le mot en B1 et recherchera le résultat
en A1.

Autre solution : écrire une macro de compilation
de la base de données générant des pointeurs
d'accès ; dans un premier temps cette macro
aura effectué un tri (possible sur 3 critères
en 1 seule ligne de code ; plus par récurrence
sur zones mises en évidence par chaque tri
précédent)

Autre solution mixte : une macro de tri mais
une feuille avec une batterie de fonctions excel
"EQUIV" prenant toute leur signification après
lancement de ce tri


A+


"Zarkoff" <zar...@mangoosta.fr> a écrit dans le message de news:
c2v4o0$2d99$1...@biggoron.nerim.net...

Pascal Engelmajer

unread,
Mar 13, 2004, 9:34:26 AM3/13/04
to
Salut,
est-ce que la lenteur provient bien de la fonction EQUIV ?
Application.ScreenUpdating est-il bien à False ?
Si le données sont triées une recherche dichotomique dans un tableau est
très rapide.
Si les données ne sont pas triées on peut les trier avec un QuickSort(plus
rapide sans récursivité) puis effectuer la rechercher dichotomique
--
Amicalement.
Pascal
"il n'y a pas de vent favorable pour celui qui ne sait pas ou il va."
Sénèque.
http://www.ilyapa.net/excel

"Zarkoff" <zar...@mangoosta.fr> a écrit dans le message de news:
c2v4o0$2d99$1...@biggoron.nerim.net...

jacques.berthier

unread,
Mar 13, 2004, 1:19:57 PM3/13/04
to

"Pascal Engelmajer" <pascal.engelmajer@ilyapa_spam.net> a écrit dans le
message de news:%23zSaIhQ...@TK2MSFTNGP12.phx.gbl...

.
> Pascal
> "il n'y a pas de vent favorable pour celui qui ne sait pas ou il va."
> Sénèque.

Ca prouve que Seneque c'etait quelqu'un de négatif
Sinon il eut dit
"Tous les vents sont favorables pour celui qui ne sait pas ou il va"


Frédéric Sigonneau

unread,
Mar 13, 2004, 3:02:19 PM3/13/04
to
Bonsoir,

L'équivalent VBA de la fonction EQUIV, c'est Application.Match. Même syntaxe que
la fonction de feuille de calcul :

PositionDansLeTableau=Application.Match(Valeur_cherchée,Tableau,0)

Ou, pour chercher la ligne dans la colonne A de la feuille 2 de la valeur en
feuille 1 de la cellule A1 :

Sub test()

Position = Application.Match( _
Sheets("Feuil1").Range("A1").Value, _
Sheets("Feuil2").Range("A1:A100").Value, _
0)

If Not IsError(Position) Then
MsgBox Sheets("Feuil2").Range("A" & Position).Address
Else: MsgBox "pas trouvé"
End If

End Sub

FS
--
Frédéric Sigonneau [MVP Excel - né un sans-culottide]
Gestions de temps, VBA pour Excel :
http://perso.wanadoo.fr/frederic.sigonneau
Si votre question sur Excel est urgente, évitez ma bal !

Zarkoff a écrit:


> Bonjour,
>
> j'ai fait un code VBA qui est devenu d'une lenteur affligeante au fur et à
> mesure que la base de données grandissait
>
> en gros elle fait :
> Pour toutes les lignes du fichier source, examiner toutes les lignes du
> fichier destinatio et si les données des colonnes A sont identiques alors
> faire un certains nombre de chose. et ceux avec 2 For...Next imbriqué (For 1
> to nombre_de_ligne_source... For 1 to nombre_de_ligne_destination...next

> ....next)

0 new messages