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.
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...
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"
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)