bigaccess
Messages postés22Date d'inscriptionjeudi 1 mars 2012StatutMembreDernière intervention30 juillet 2012
-
21 mars 2012 à 15:10
ucfoutu
Messages postés18038Date d'inscriptionlundi 7 décembre 2009StatutModérateurDernière intervention11 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
cs_cheyenne
Messages postés690Date d'inscriptionsamedi 18 mai 2002StatutMembreDernière intervention17 avril 20172 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
cs_cheyenne
Messages postés690Date d'inscriptionsamedi 18 mai 2002StatutMembreDernière intervention17 avril 20172 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.
bigaccess
Messages postés22Date d'inscriptionjeudi 1 mars 2012StatutMembreDernière intervention30 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
Vous n’avez pas trouvé la réponse que vous recherchez ?
ucfoutu
Messages postés18038Date d'inscriptionlundi 7 décembre 2009StatutModérateurDernière intervention11 avril 2018209 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
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