Coller toutes les lignes contenant telle valeur

Fermé
narzi91 Messages postés 14 Date d'inscription vendredi 7 février 2014 Statut Membre Dernière intervention 3 septembre 2014 - 2 sept. 2014 à 18:50
narzi91 Messages postés 14 Date d'inscription vendredi 7 février 2014 Statut Membre Dernière intervention 3 septembre 2014 - 3 sept. 2014 à 12:31
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

via55 Messages postés 14398 Date d'inscription mercredi 16 janvier 2013 Statut Membre Dernière intervention 10 avril 2024 2 701
2 sept. 2014 à 20:35
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
via55 Messages postés 14398 Date d'inscription mercredi 16 janvier 2013 Statut Membre Dernière intervention 10 avril 2024 2 701
3 sept. 2014 à 12:27
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
Licorne rose Messages postés 997 Date d'inscription mardi 10 juillet 2007 Statut Membre Dernière intervention 18 janvier 2024 227
2 sept. 2014 à 20:07
Ne la code pas, enregistre-la à la main, tout simplement.
0
narzi91 Messages postés 14 Date d'inscription vendredi 7 février 2014 Statut Membre Dernière intervention 3 septembre 2014
2 sept. 2014 à 20:09
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

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

Posez votre question
narzi91 Messages postés 14 Date d'inscription vendredi 7 février 2014 Statut Membre Dernière intervention 3 septembre 2014
2 sept. 2014 à 20:47
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
via55 Messages postés 14398 Date d'inscription mercredi 16 janvier 2013 Statut Membre Dernière intervention 10 avril 2024 2 701
2 sept. 2014 à 21:18
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
narzi91 Messages postés 14 Date d'inscription vendredi 7 février 2014 Statut Membre Dernière intervention 3 septembre 2014
3 sept. 2014 à 11:13
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
narzi91 Messages postés 14 Date d'inscription vendredi 7 février 2014 Statut Membre Dernière intervention 3 septembre 2014
3 sept. 2014 à 11:17
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
narzi91 Messages postés 14 Date d'inscription vendredi 7 février 2014 Statut Membre Dernière intervention 3 septembre 2014
3 sept. 2014 à 12:31
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