Trier une feuille de calcul selon critères

Fermé
grovallat - 29 juil. 2009 à 16:18
 grovallat - 17 août 2009 à 08:33
Bonjour a tous,
Tout d'abord, excusez moi si un post du genre a déja été posté.

Je vous explique mon problème, je cherche à programmer une macro VB me permettant de copier les lignes d'un tableau excel répondant à certain critères dans une nouvelle feuille par le simple clic sur un bouton.

Je m'explique:
J'ai 4 tableaux (4 feuilles) et je voudrai par un simple clic, creer 4 pages respectives qui contiendraient les lignes telle que, par exemple: si case A1=X-> copie ligne 1
si case B2=Y-> copie ligne 2........
En d'autres termes, on test pour toutes les lignes si la colonne A contient la valeur X et on copie les lignes qui ont cette valeur, puis on test pour toutes les lignes si la colonne B contient la valeur Y et on copie les lignes qui ont cette valeur, ect....

Je sais pas si j'ai été très clair mais je n'est aucun résultat pour le moment, je repart de 0.
HELP PLEASE
merci d'avance
A voir également:

9 réponses

lermite222 Messages postés 8724 Date d'inscription dimanche 8 avril 2007 Statut Contributeur Dernière intervention 22 janvier 2020 1 191
29 juil. 2009 à 16:24
En d'autres termes, on test pour toutes les lignes si la colonne A contient la valeur X et on copie les lignes qui ont cette valeur, puis on test pour toutes les lignes si la colonne B contient la valeur Y et on copie les lignes qui ont cette valeur, ect....
Mais si la condition en A est vraie, tu copie la ligne , OK ? alors plus besoin de tester B et de copier une deuxième fois la ligne ?
Tu dis.
A+
0
Oui tu as très bien compris, mais peut m'importe les doublons. Ce que je cherche c'est une macro qui teste toute ligne et si le critère C1 (présence de la valuer X dans la colonne 1) ou si le critère C2 ( présence de la valeur Y dans la colonne 2) ou si ect ..... la ligne soit copier dans une nouvelle feuille.

c'est assez difficile à expliquer par écrit.
merci bcp pour ta réponse
0
Excuse moi j'ai dit" peut m'importe les doublons" mais je suis suiffisamment deseperé que les doublons je m'en fiche.
0
Voilà peut-etre une structure qui te permettra de mieux comprendre la cause de mon futur suicide ^^^(je dec') (enfin c'est comme ca que j'entraperçois la macro)

Quandclic_bouton 1

Dans feuille 1
Pour ligne 1 à infini
test Critère 1 ou Critere 2 ou Critère 3 ou Critère 4
si OK -> copie ligne dans feuille 1bis
Fin si
Fin boucle
Fin macro

Comme ça, les lignes répondant aux critères choisis seront alors copiées les unes a la suite des autres dans la feuille 1bis.
0

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

Posez votre question
lermite222 Messages postés 8724 Date d'inscription dimanche 8 avril 2007 Statut Contributeur Dernière intervention 22 janvier 2020 1 191
29 juil. 2009 à 17:35
Une piste !! ??
Sub RecopionsLignes()
Dim Lig As Long
Dim LigC As Long
'supposons le nom de ta nouvelle feuille = "Recopie"
'puisque, en principe c'est une nouvelle feuille, commenbce la copie à la ligne 2
    LigC = 1
    For Lig = 1 To Range("A65536").End(xlUp).Row
        If Cells(Lig, 1) = "X" Or Cells(Lig, 2) = "Y" Or Cells(Lig, 3) = "Z" Then
            LigC = LigC + 1
            Rows(Lig).Copy Sheets("Recopie").Rows(LigC)
        End If
    Next Lig
End Sub

Tu dis.
0
Je crois que ca m'avance beaucoup...merci beaucoup....mais pourrais-tu la detailler un peu pour que j'aprenne un peu ca que tout cela veut dire stp...

Excuse-moi si je te bouffe ton tmps, dsl et merci beaucoup.
0
Pour tout te dire, je me demande:
-ou on voit sur quelle feuille s'exécute la macro( d'ou les lignes vont etre copier) ?
-ou on voit sur quelle colonne on test la valeur?
-et quelle ligne de code commande la création d'une feuille?
0
lermite222 Messages postés 8724 Date d'inscription dimanche 8 avril 2007 Statut Contributeur Dernière intervention 22 janvier 2020 1 191
30 juil. 2009 à 14:40
pas de problème, j'explique
Tu ajoute une feuille, par VBA ou en manuel ?
Commencons par "en manuel" , ajoute une feuille que tu renomme (l'onglet) avec Recopie , attention qu'il n'y ai pas des espaces non voulu dans le nom sinon ça plante.
Ensuite, renomme la feuille où tu a tes données Base
Maintenant ça va être plus clair
Sub RecopionsLignes()
Dim Lig As Long
Dim LigC As Long
'supposons le nom de ta nouvelle feuille = "Recopie"
'puisque, en principe c'est une nouvelle feuille, commenbce la copie à la ligne 2
    LigC = 1
    For Lig = 1 To Sheets("Base").Range("A65536").End(xlUp).Row
        If Sheets("Base").Cells(Lig, 1) = "X" Or Sheets("Base").Cells(Lig, 2) = "Y" Or Sheets("Base").Cells(Lig, 3) = "Z" Then
            LigC = LigC + 1
            Sheets("Base").Rows(Lig).Copy Sheets("Recopie").Rows(LigC)
        End If
    Next Lig
End Sub

Il y a bien sûr moyen de faire plus cour mais c'est pour t'aider à comprendre.
Et quand tu aurras bien compris tu peu remplacer par.
Sub RecopionsLignes()
Dim Lig As Long
Dim LigC As Long
'supposons le nom de ta nouvelle feuille = "Recopie"
'puisque, en principe c'est une nouvelle feuille, commenbce la copie à la ligne 2
    LigC = 1
    Sheets("Base").Select
    For Lig = 1 To Range("A65536").End(xlUp).Row
        If Cells(Lig, 1) = "X" Or Cells(Lig, 2) = "Y" Or Cells(Lig, 3) = "Z" Then
            LigC = LigC + 1
            Rows(Lig).Copy Sheets("Recopie").Rows(LigC)
        End If
    Next Lig
End Sub

Ca ferra la même chose.
Tu dis..
A+
0
Problème résolu!!!! youpi
remerciement à lermite222

Topic clos et @++ sur un prochain problème...^^
0