Coller toutes les lignes contenant telle valeur

narzi91 Messages postés 14 Statut Membre -  
narzi91 Messages postés 14 Statut Membre -
Bonjour à tous !

Je me heurte à un léger problème sur Excel. Je vous explique : j'ai un longue liste de produit qui sont identifés selon un numéro à 6 chiffres suivi de lettres selon leurs provenances ("576897 FR" pour un français, "789674 UK" pour un anglais, etc.). J'aimerais "simplement" avoir la liste les produit français uniquement dans une autre feuille. Donc, que ma macro fasse un scanne de la colonne identifiant, qu'elle sélectionne toutes les cellules contenant la valeur "FR" , et qu'elle colle toutes ces lignes dans une autre feuille.

En cherchant un peu sur le net, j'ai reconstituer une macro qui donne ceci, qui ne fonctionne toujours pas :

Sub test()
For Each cel In Sheets("original").Range("A2:A" & Sheets("original").Range("A15000").End(xlUp).Row)
If UCase(cel) = "FR" Then
Sheets("original").Range("A" & cel.Row & ":D" & cel.Row).Copy _
Sheets("résultat_souhaité").Range("A" & Sheets("résultat_souhaité").Range("A15000").End(xlUp).Row + 1)
End If
Next
End Sub

J'ai aussi essayé de me dépatouiller avec la méthode Find, mais sans succès.

J'ai joint à ma question assez tortueuse un exemple très facilement compréhensible :)

https://www.cjoint.com/?0IcsZyc7lKi

Pour Excel 2003 : https://www.cjoint.com/?0Ics0ocMU4d

Je vous remercie d'avance pour le temps que vous passerez à me répondre, en espérant que ma requête soit compréhensible :)

8 réponses

  1. via55 Messages postés 14395 Date d'inscription   Statut Membre Dernière intervention   2 759
     
    Bonsoir,

    Essaye avec ce code :

    Sub tri()
    x = 1
    Dim DernLigne As Long
    DernLigne = Sheets("original").Range("A" & Rows.Count).End(xlUp).Row
    For n = 2 To DernLigne
    ident = Sheets("original").Range("A" & n)
    If Right(ident, 2) = "FR" Then
    x = x + 1
    With Sheets("résultat_souhaité")
    .Range("A" & x) = Sheets("original").Range("A" & n)
    .Range("B" & x) = Sheets("original").Range("B" & n)
    .Range("C" & x) = Sheets("original").Range("C" & n)
    .Range("D" & x) = Sheets("original").Range("D" & n)
    End With
    End If
    Next

    End Sub

    Cdlmnt
    1
  2. via55 Messages postés 14395 Date d'inscription   Statut Membre Dernière intervention   2 759
     
    Bonjour,

    Pour tenir compte de toutes les écriture il suffit de convertir en majuscules (comme tu avais fait dans ton 1er essai) dans la macro avant le test en modifiant ainsi la ligne de test :

    If Ucase(Right(ident, 2)) = "FR" Then

    Cdlmnt
    1
  3. Licorne rose Messages postés 1047 Statut Membre 226
     
    Ne la code pas, enregistre-la à la main, tout simplement.
    0
  4. narzi91 Messages postés 14 Statut Membre
     
    La liste fais des milliers de ligne. Si je fais mes copiers coller, Excel va jamais comprendre que ce qui relie toutes ces lignes est le "FR". Comment automatiser tout cela dès lors.
    En outre, j'aimerais apprendre à faire cette manip' par vba :)

    merci en tout cas :)
    0
  5. Vous n’avez pas trouvé la réponse que vous recherchez ?

    Posez votre question
  6. narzi91 Messages postés 14 Statut Membre
     
    Salut via55, merci pour ta réponse rapide. J'avoue ne pas connaitre toutes les méthodes que tu as utilisés, mais ça marche bien !
    Seul hic, c'est quand même assez lent, alors je n'imagine pas ce que ça donnera quand je l'adapterais à mon fichier qui contient des milliers de références.

    N'y a t-il pas moyen d'adapter le 'bricolage' que je vous ai fourni?

    Merci encore.
    Amicalement,
    0
  7. via55 Messages postés 14395 Date d'inscription   Statut Membre Dernière intervention   2 759
     
    Re

    Je ne crois pas que le fait de selectionner une feuille copier la ligne et selectionner l'autre feuille pour l'y copier soit necessairement plus rapide

    Rajoutes déja ces2 lignes tout en début de macro
    Application.ScreenUpdating = False ' desactivation rafraichissement ecran
    Application.Calculation = xlCalculationManual 'desactivation calcul auto

    puis leur inverse tout à la fin :
    Application.ScreenUpdating = True
    Application.Calculation = xlCalculationAutomatic

    Sur mon PC (qui rame un pourtant) le traitement de 11 000 lignes à partir de ton fichier exemple prend 7 secondes avec ma macro

    Si quelqu'un sait faire mieux ..;

    Cdlmnt
    0
  8. narzi91 Messages postés 14 Statut Membre
     
    re,

    En effet, ces quelques lignes en début et en fin de code ont considérablement diminué le temps de traitement. (ça prenait une dizaine de seconde pour quelques lignes avant ça). Je t'en remercie ! J'ai pu facilement adapté la macro au fichier original, et ça me permet de sortir une feuille par pays d'origine.

    C'est tout pour moi :) merci infiniment et bonne continuation !
    0
    1. narzi91 Messages postés 14 Statut Membre
       
      Petite question : n'y a t-il pas moyen de préciser dans le code de ne pas différencier les majuscules des minuscules ? (j'ai parfois du "fr", parfois du "Fr", et parfois du "FR").
      0
  9. narzi91 Messages postés 14 Statut Membre
     
    normal que ça ne fonctionnait pas pour moi, j'avais oublié une parenthèse quand je mettais ceci . Merci !
    Sujet parfaitement résolu :)
    A bientôt
    0