Trier une liste

KWET2501 Messages postés 8 Date d'inscription vendredi 14 septembre 2007 Statut Membre Dernière intervention 20 septembre 2007 - 20 sept. 2007 à 00:11
KWET2501 Messages postés 8 Date d'inscription vendredi 14 septembre 2007 Statut Membre Dernière intervention 20 septembre 2007 - 20 sept. 2007 à 11:59
Bonjour

je suis débutant dans le sujet et dans le forum d'ailleur, et suis ravis d'y participer

mon sujet:
sur une feuille excel je présente un tableau avec comme titre colonne: Semaine, Nature , Lieu, Observation.
dans semaine on retrouve (32,34,35,.....52) Nature (Forêt, Aquatique......) Lieu(Bordeaux, Paris...) observation (cyclisme, Natation....)
je recherche a faire une macro me permettant de trier mes données, elle me demanderais sous forme input box de rentrer un N° de semaine puis me retourner les résultats obtenus sur une nouvelle feuille en reprenant les titres de colonnes (en sachant qu'il peut exister plusieurs lignes avec le même N° de semaine)
le même principe qu'il filtre automatique ou éloboré sous Excel mais sous forme macro

mon Problème:
étant nouveau dans le domaine je suis en difficulté: en voici le code que j'ai essayé de faire:
code: Sub tri_semaine()
          Sheets.Add
          ActiveSheet.Name = "Resultat_Semaine_Choisie"' création d'une feuille nouvelle nommée : Resultat_Semaine_Choisie



' recopie du titre des données situées en A5, B5, C5, D5 de la feuil1
    Range("A5").Select
    ActiveCell.FormulaR1C1 = "=liste_exercé!RC"
    Range("A1:B1").FillRight



    Range("B5").Select
    ActiveCell.FormulaR1C1 = "=liste_exercé!RC"
    Range("A1:B1").FillRight
   
    Range("C5").Select
    ActiveCell.FormulaR1C1 = "=liste_exercé!RC"
    Range("A1:B1").FillRight
   
    Range("D5").Select
    ActiveCell.FormulaR1C1 = "=liste_exercé!RC"
    Range("A1:B1").FillRight
   
' choix semaine    
    Range("A6").FormulaR1C1 = InputBox("choisir la semaine")



' sélection des données par filtre

    Sheets("liste_exercé").Select
    Sheets("Feuil1").Range("A1:B8").AdvancedFilter Action:=xlFilterCopy, _
    CriteriaRange:=Range("B1:B2"), CopyToRange:=Range("A4"), Unique:=False



End Sub



résultat

J'arrive a créer le nouvelle feuille nommée Resultat_semaine_choisie, sur celle ci je retrouve bien mes différentes entêtes de tableau, j'ai également l'inputBox me demandant de choisir ma semaine et le problème se trouve après; j'arrive pas à filtrer le tableau pour insérer dans la nouvelle feuille le ou les résultats attendus

merci D'avance pour votre aide
Kwet

5 réponses

PCPT Messages postés 13280 Date d'inscription lundi 13 décembre 2004 Statut Membre Dernière intervention 3 février 2018 49
20 sept. 2007 à 01:32
VBA! pas VB6 !!!

topic déplacé
0
tubafat Messages postés 79 Date d'inscription lundi 17 juillet 2006 Statut Membre Dernière intervention 25 septembre 2007
20 sept. 2007 à 09:51
Bonjour,

j'avoue que ton code me laisse énormément perplexe...
Pourquoi passer par l'écriture de formules dans les cellules pour seulement recopier un titre?

De plus, tu fais référence à une Sheets("Feuil1") à la fin de ton code, alors que la feuille sur laquelle tu veux travailler s'appelle Sheets("liste_exercé").

Evite également les accents dans les noms de feuille, ou les noms de contrôle...

Un petit code qui me semble plus judicieux (mais je peux me tromper)...

Sub tri_semaine()
Dim reponse As Integer
Dim i As Integer
Sheets.Add
'ATTENTION la feuille ne doit pas déjà exister, sinon la macro plante!!
ActiveSheet.Name = "Resultat_Semaine_Choisie" ' création d'une feuille nouvelle nommée : Resultat_Semaine_Choisie
' recopie du titre des données situées en A5, B5, C5, D5de la feuil1
ActiveWorkbook.Worksheets("Resultat_Semaine_Choisie").Range("A5:D5").Value = ActiveWorkbook.Worksheets("liste_exercé").Range("A5:D5").Value
' choix semaine
reponse = InputBox("choisir la semaine")
'initialisation des variables de boucle
i = 6
j = 6
'boucle de copie
While ActiveWorkbook.Worksheets("liste_exercé").Range("A" & i).Value <> ""
    'test de la valeur de la colonne semaine
    If ActiveWorkbook.Worksheets("liste_exercé").Range("A" & i).Value = reponse Then
    ActiveWorkbook.Worksheets("Resultat_Semaine_Choisie").Range("A" & j & ":D" & j).Value = ActiveWorkbook.Worksheets("liste_exercé").Range("A" & i & ":D" & i).Value
    j = j + 1
    End If
i = i + 1
Wend

End Sub

A améliorer bien sur (gestion des entrées non numériques de l'inut box, test de l'existence de la feuille résultat,...) mais ça te fait un bonne base pour commencer.

Tubafat  
Avant d'imprimer, pensez à l'environnement
0
cs_MPi Messages postés 3877 Date d'inscription mardi 19 mars 2002 Statut Membre Dernière intervention 23 août 2018 21
20 sept. 2007 à 11:53
Tu pourrais aussi utiliser la méthode du filtre comme tu as dit ...
Il te suffit d'utiliser l'enregistreur de macro, regarder le code généré et l'adapter avec un InputBox.

MPi
0
KWET2501 Messages postés 8 Date d'inscription vendredi 14 septembre 2007 Statut Membre Dernière intervention 20 septembre 2007
20 sept. 2007 à 11:58
bonjour
merci pour ton aide je comprend deja la facon de faire!
je viens d'essayer ta facon de voir mais il dois y avoir un problème à partir de la boucle car ça me génére un code 9
je retrouve le résultat que j'avais auparavant.
je regarderais un peu plus un détail cet aprem et te dirais quoi!

merci de ton aide Kwet
0

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

Posez votre question
KWET2501 Messages postés 8 Date d'inscription vendredi 14 septembre 2007 Statut Membre Dernière intervention 20 septembre 2007
20 sept. 2007 à 11:59
message ci dessus adressé à "tubafat"
0