Coller toutes les lignes contenant telle valeur
narzi91
Messages postés
14
Date d'inscription
Statut
Membre
Dernière intervention
-
narzi91 Messages postés 14 Date d'inscription Statut Membre Dernière intervention -
narzi91 Messages postés 14 Date d'inscription Statut Membre Dernière intervention -
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 :)
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 :)
A voir également:
- Excel recuperer toutes les lignes contenant un mot
- Comment récupérer les messages supprimés sur whatsapp - Guide
- Liste déroulante excel - Guide
- Trousseau mot de passe iphone - Guide
- Aller à la ligne excel - Guide
- Comment récupérer un compte yahoo sans mot de passe - Guide
8 réponses
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
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
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
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
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 :)
En outre, j'aimerais apprendre à faire cette manip' par vba :)
merci en tout cas :)
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
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,
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,
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
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
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 !
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 !