Recherche de données dans un tableau

Fermé
teamstgobain - 8 sept. 2014 à 17:31
eriiic Messages postés 24571 Date d'inscription mardi 11 septembre 2007 Statut Contributeur Dernière intervention 8 mai 2024 - 9 sept. 2014 à 12:02
Bonjour à toutes la communauté,

Je me permets de me tourner vers vous car je suis bloqué concernant un code VBA.
Voilà, à partir d'un tableau de données (qui comprend un nombre de ligne différent selon le jour de production) j'effectue une recherche par rapport à une donné d'entrée dans un "Userform", puis je colle cette donnée à chaque fois qu'elle apparaît dans une autre feuille de mon classeur. Vous trouverez ci dessous mes lignes de codes :

If TextBox2 <> "" Then
Worksheets("Data").Activate
Z = Range("A2").End(xlDown).Row
For i = 2 To Z
If Range("F" & i).Value = TextBox2.Value Then
Worksheets("Data").Rows(i).Copy
Sheets("Data_2").Select
ligne = Sheets("Form").Range("A1").Value
Range("A" & ligne).Select
ActiveSheet.Paste
Sheets("Form").Range("A1").Value = Sheets("Form").Range("A1").Value + 1
Worksheets("Data").Activate
End If
Next i
End If


Ce code fonctionne parfaitement si mon tableau de départ comporte peu de données, mais dès que j'ai plus de 2000 données le traitement est long ....

Ce que je souhaite savoir, c'est est-ce qu'il possible d'écrire un code avec un "For each" ou quelque chose du genre qui me permettrai de selectionner toutes mes données contenant ma "textbox2" puis tout coller en une seule fois au lieu de procéder ligne par ligne ...

J'espère avoir était assez clair dans mes explications, n'hésitez à me contactez pour plus d'informations.

Merci d'avance aux personnes qui prendront le temps de me répondre



5 réponses

eriiic Messages postés 24571 Date d'inscription mardi 11 septembre 2007 Statut Contributeur Dernière intervention 8 mai 2024 7 216
9 sept. 2014 à 12:02
Je suis d'accord pour le filtre Eric, mais est-il possible qu'il soit en automatique ?
Il est où le fichier de travail ?
Sinon l'enregistreur de macro te donne une bonne base de départ.

eric
1
eriiic Messages postés 24571 Date d'inscription mardi 11 septembre 2007 Statut Contributeur Dernière intervention 8 mai 2024 7 216
9 sept. 2014 à 00:45
Bonjour,

tu filtres et copie-colle le résultat du filtre, c'est ce qui sera le plus rapide.

Pour tes prochaines demandes : mettre en forme le code et joindre un fichier (cjoint.com)

eric
0
teamstgobain Messages postés 2 Date d'inscription mardi 9 septembre 2014 Statut Membre Dernière intervention 9 septembre 2014
9 sept. 2014 à 11:31
Je suis d'accord pour le filtre Eric, mais est-il possible qu'il soit en automatique ?
En cliquant sur le bouton "Valider" de mon userform ?
0
pijaku Messages postés 12263 Date d'inscription jeudi 15 mai 2008 Statut Modérateur Dernière intervention 4 janvier 2024 2 745
9 sept. 2014 à 09:14
Bonjour,

Regardez le code de cette fonction findall : https://forums.commentcamarche.net/forum/affich-37621992-methode-find-dans-vba-recherche-de-donnees-sous-excel#findall

En cas de difficulté n'hésitez pas...

ps : salut Eric
0
teamstgobain Messages postés 2 Date d'inscription mardi 9 septembre 2014 Statut Membre Dernière intervention 9 septembre 2014
9 sept. 2014 à 11:29
Merci d'avoir pris le temps de me repondre.

pijaku, désomé pour le doublon, étant donné que je suis nouveau sur le site je pensais que ma demande n'avais pas était prise en compte.
0

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

Posez votre question
borntobealive Messages postés 138 Date d'inscription jeudi 17 juillet 2014 Statut Membre Dernière intervention 25 février 2019 7
9 sept. 2014 à 11:38
en enlevant le superflue et en reajoutant des inhibiteurs je pense que tu peux accelerer :

application.screenUpdating = false
 
dim cel as Range 
dim Data as Worksheet
dim Data2 as Worksheet 

set Data = ThisWorkbook.Worksheets("Data")
set Data2 = ThisWorkbook.Worksheets("Data_2")
 
'j'ai pas mis F parce que je sais pas si il n'y pas de cellule vide dans la colonne en question 
for each cel in Data.Range("A:A").specialCells(xlTextValue)
'du coup ça m'oblige à faire un offset 
    if cel.offset(0,5).value = textBox2.value then 
        ligne = Sheets("Form").Range("A1").Value
        Data2.cells(ligne,1).entireRow.value = cel.entireRow.value
        sheets("Form").range("A1").value = ligne +1        
    end if 
next cel 
 
application.screenUpdating = true


Dis moi si ça accélère ( j'ai aucune certitude)

PS : slt eric, slt Franck
0