Trier une liste

Signaler
Messages postés
8
Date d'inscription
vendredi 14 septembre 2007
Statut
Membre
Dernière intervention
20 septembre 2007
-
Messages postés
8
Date d'inscription
vendredi 14 septembre 2007
Statut
Membre
Dernière intervention
20 septembre 2007
-
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

Messages postés
13280
Date d'inscription
lundi 13 décembre 2004
Statut
Modérateur
Dernière intervention
3 février 2018
39
VBA! pas VB6 !!!

topic déplacé
Messages postés
79
Date d'inscription
lundi 17 juillet 2006
Statut
Membre
Dernière intervention
25 septembre 2007

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
Messages postés
3877
Date d'inscription
mardi 19 mars 2002
Statut
Membre
Dernière intervention
23 août 2018
18
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
Messages postés
8
Date d'inscription
vendredi 14 septembre 2007
Statut
Membre
Dernière intervention
20 septembre 2007

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
Messages postés
8
Date d'inscription
vendredi 14 septembre 2007
Statut
Membre
Dernière intervention
20 septembre 2007

message ci dessus adressé à "tubafat"