Excel / VBA boucle lente

bigaccess Messages postés 23 Date d'inscription jeudi 1 mars 2012 Statut Membre Dernière intervention 30 juillet 2012 - 21 mars 2012 à 15:10
ucfoutu Messages postés 18038 Date d'inscription lundi 7 décembre 2009 Statut Modérateur Dernière intervention 11 avril 2018 - 22 mars 2012 à 16:27
Bonjour,

Je veux faire une recherche d'une valeur dans une feuille sur une autre feuille.

Je veux aller chercher la valeur qui se trouve dans l'autre feuille s'il y'en a.

Le problème est que la macro prend un temps fou à s'exécuter. Avez-vous une solution.

Le première feuille contient 100000 entrée et la 2e environ 93000.

Voici mon code:
Sub macro1()
Sheets("Master").select
Dim plage As Range

'recherche du nombre d'entrée exact (environ 100000)
Do While Cells(y, 1) <> ""
y = y + 1
Loop
y = y - 1

'boucle
x = 1
For i = 1 To y '
For Each plage In Sheets("DOM").Range("A2:A93592")
If Cells(x, 1) = plage Then
Sheets("Master").Cells(y, 8) = Sheets("DOM").Cells(y, 2)
End If
Next
y = y + 1
Next
End Sub

Merci.

5 réponses

Utilisateur anonyme
21 mars 2012 à 16:22
Bonjour,

Tu peux utiliser les fonctions de feuilles de calcul de rercherche de valeurs en passant par application.worksheetfunction.

Mais moi, je ferais tout bonnement un filtre élaboré.
0
cs_cheyenne Messages postés 693 Date d'inscription samedi 18 mai 2002 Statut Membre Dernière intervention 17 avril 2017 2
21 mars 2012 à 22:59
Bonjour,

Le filtre est une bonne solution.

Néanmoins si tu tiens à faire une boucle, indique déjà ce que dois recevoir ta cellule.
Une couleur, une formule, une bordure ou autre, non c'est une valeur, alors :
If Cells(x, 1).value = plage Then
Sheets("Master").Cells(y, 8).Value = Sheets("DOM").Cells(y, 2).Value 

Ensuite, en début de procédure tu mets Application.ScreenUpdating = False
que tu remets à True avant de quitter la procédure. Tu gagneras en rapidité puisque tu inhibes l'affichage pendant la boucle.
Tu peux te passer de Do While, il suffit de récupérer la dernière ligne avec :
y = Sheets("Master").Range("A2:A93592").End(xlUp).Row 

Cheyenne
0
cs_cheyenne Messages postés 693 Date d'inscription samedi 18 mai 2002 Statut Membre Dernière intervention 17 avril 2017 2
21 mars 2012 à 23:18
Re,

A quoi te sert x ? Initialisé à 1 au départ, il ne varie pas ensuite !
Tu as un boucle Each en trop. La boucle y suffit. Pas étonnant que ce soit si long.
Tu peux utiliser plus avantageusement la méthode Find et FindNext dans un boucle Do While.
Ouvres ton aide Excel sur Range.FindNext pour en savoir plus.

Cheyenne
0
bigaccess Messages postés 23 Date d'inscription jeudi 1 mars 2012 Statut Membre Dernière intervention 30 juillet 2012
22 mars 2012 à 14:08
cheyenne,

Le problème c'est que je ne sais pas le nombre d'entrée dans la feuille1 d'où le do while.

Et
"If Cells(x, 1).value = plage Then
Sheets("Master").Cells(y, 8).Value = Sheets("DOM").Cells(y, 2).Value"
ne fonctionne pas!

Ce que je dois faire c'est de mettre la valeur de Sheets("DOM").Cells(y, 2) dans la première feuille s'il trouve la même valeur dans la colonne A comme un recherchev.

Ensuite, x est i plutôt.
donc;

Sub macro1()
Sheets("Master").select
Dim plage As Range

'recherche du nombre d'entrée exact (environ 100000)
Do While Cells(y, 1) <> ""
y = y + 1
Loop
y = y - 1

'boucle
For i = 1 To y '
For Each plage In Sheets("DOM").Range("A2:A93592")
If Cells(i, 1) = plage Then
Sheets("Master").Cells(y, 8) = Sheets("DOM").Cells(y, 2)
End If
Next
y = y + 1
Next
End Sub
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
ucfoutu Messages postés 18038 Date d'inscription lundi 7 décembre 2009 Statut Modérateur Dernière intervention 11 avril 2018 211
22 mars 2012 à 16:27
Bonjour,
1) Tu n'as tenu aucun compte de ce que t'a exposé cheyenne !
y = Sheets("Master").Range("A" & Rows.count).End(xlUp).Row 

te retourne (en lieu et place de ta boucle do ... loop) le rang de la dernère cellule remplie en colonne A
2) je comprends mal ce que tu veux faire dans ta boucle For to, surtout cette ligne
Sheets("Master").Cells(y, 8) = Sheets("DOM").Cells(y, 2) 

alors que, de surcroît, tu incrémente y de 1
C'est assez troublant !
Peux-tu exposer en quelques mots et avec précision les tenants et aboutissants exacts ?


____________________
Réponse exacte ? => "REPONSE ACCEPTEE" pour faciliter les recherches d'autres forumeurs.
Pas d'aide en ligne installée ? ==> ne comptez pas sur moi pour simplement vous dire ce qu'elle contient
0
Rejoignez-nous