Recherche de données dans un tableau

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

  1. Contributeur
    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
    1. Contributeur
      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
      1. 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
    2. 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
      1. 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