Gestion données [Résolu]

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

9 réponses

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

Bon ça va alors j'avais bien compris!

Si tu prends ce que je t'ai écrit sur l'autre post, ça fonctionne je l'ai testé. Ce que j'ai fait, c'est que plutôt que d'utiliser un filtre, je recopie uniquement les valeurs correspondant au numéro de semaine de l'inputbox.

l'intérêt de la boucle While c'est que si tu décides de rajouter des lignes et que tu dois sélectionner de A6 à D32 par exemple, il faudra que tu corriges la macro.

Ce que j'ai appris sur ce forum, c'est déjà d'éviter de coder avec des données en dur (genre "A6:D24") et de plutôt passer par des variables... Quand c'est possible bien évidemment.

Pour éviter les aller-retour, je remets le code que je t'avais proposé ici:

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_exerce").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_exerce").Range("A" & i).Value <> ""
    'test de la valeur de la colonne semaine
    If ActiveWorkbook.Worksheets("liste_exerce").Range("A" & i).Value = reponse Then
    ActiveWorkbook.Worksheets("Resultat_Semaine_Choisie").Range("A" & j & ":D" & j).Value = ActiveWorkbook.Worksheets("liste_exerce").Range("A" & i & ":D" & i).Value
    j = j + 1
    End If
i = i + 1
WendEnd Sub

Tubafat  
Avant d'imprimer, pensez à l'environnement
Messages postés
79
Date d'inscription
lundi 17 juillet 2006
Statut
Membre
Dernière intervention
25 septembre 2007

SAlut, pourquoi repostes-tu ta question alors que tu as déjà eu des réponses???
Si les réponses ne te conviennent pas il suffit de continuer sur le précédent et de le dire!!!
Tubafat  
Avant d'imprimer, pensez à l'environnement
Messages postés
8
Date d'inscription
vendredi 14 septembre 2007
Statut
Membre
Dernière intervention
20 septembre 2007

tubafat

salut
on m'a dis que je n'étais pas sur le bon chemin (thème) alors j'ai reposté le message sur le thème qui me semblais le plus approprié voila pourquoi tu retrouve ce message ici!!!
sinon je suis encore en train de bosser sur mon truc! je trouve intérressant le vba même si je galère un peu!

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

Dans des cas comme ça vaut mieux demander à un admin de déplacer ton message (au risque de se faire un peu remonter les bretelles! ).

C'est plus pour une question de suivi...

Tu as essayé ce que je t'avais proposé?

Tubafat  
Avant d'imprimer, pensez à l'environnement
Messages postés
79
Date d'inscription
lundi 17 juillet 2006
Statut
Membre
Dernière intervention
25 septembre 2007

Pour avancer sur ton code:

- Pourquoi écrire une formule dans ta cellule pour recopier la valeur, et pas recopier la valeur de suite?
- A quoi sert Range("A1:B1").FillRight qui apparait plusieurs fois de suite?
- Ta copie avec filtre sélectionne les celulles de A1 à B8... pourquoi???
- Tu dois faire attention à la gestion de tes feuilles... dans ton code de filtre tu sélectionnes la feuille liste_exercé et tu fais ton filtre sur le feuille Feuil1 avant de faire une copie en A4... Déjà si tes entêtes de cellule sont en A5, ça fout le bazar!
Je crois que tu n'es pas très à l'aise sur la gestion de tes différentes feuilles.

Plus clairement, explique:
- Ta feuille de départ: son nom, et les données qui s'y trouve
- Ta feuille d'arrivée: son et le données qu'y doivent s'y trouver
- As-tu besoin d'autres feuilles??? Si oui explique pourquoi...
N'hésite pas à mettre un exemple de tableau...

Tubafat  
Avant d'imprimer, pensez à l'environnement
Messages postés
8
Date d'inscription
vendredi 14 septembre 2007
Statut
Membre
Dernière intervention
20 septembre 2007

a tubafat
re
j'ai enlevé la facon de recopier mes titres de colonne sur autre page, trop lourd dans le programme et j'ai rejoins ta facon de faire qui marche très bien pour ce type de procédure.
en ce qui concerne ma plage de cellule c'est une erreur, je dois plutot essayé par exemple de A5 à D24 qui qui ma plage de cellule à trier.
question: je pourrais juste selection par exemple A5 à A24? il recopierait mes lignes des autres colonne quand même (en sachant que sermaine est en gros ma clé primaire)?

explication sur la facon de faire:
feuille de depart : liste_exerce avec un tableau regroupant les données expliquées message en haut
feuille arrivée resultat_semaine_choisie 

en gros j'essai par rapport a la feuille de depart avoir une input box qui me demande quelle semaine je veux voir! ensuite les données me sont renvoyées sur la feuille arrivées avec tout ce qui concerne la semaine 32 par exemple avec tout les champs (semaine, lieu, observation,..) repris.

tu as raison la fin du programme est un peu confus! je galère un peu
il reste juste a faire un genre de boucle qui parcour mon tableau ma feuille de départ et me recopie tout sur la feuille arrivée et je trouve ca difficile lol

@+
kwet  
Messages postés
8
Date d'inscription
vendredi 14 septembre 2007
Statut
Membre
Dernière intervention
20 septembre 2007

re
trop fort tubafat

je comprend pas je viens d'essayer et ca marche alors que ce matin sans resultat!

par contre je voudrais comprendre certains trucs
initialisation des variable de la boucle pourquoi i et j =6 ?
et je comprend pas de trop non plus les i et j dans "Range("A" & j & ":D" & j)."
je commence le vba et ca je comprend pas de trop!
je comprend qu'ils vont s'incrementer mais aussi pourquoi deux variables?

tu connais un site bien ou je pourrais apprendre facilement et rapidemant la vb?

et merci beaucoup pour l'aide!

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

Alors c'est une bidouille que j'ai trouvé quand tu parcours deux listes mais que tu veux pas recopier tous les éléments... tout en les recopiant les uns à la suite des autres...

En gros i parcourt toute ta liste de base, même les lignes que tu ne veux pas copier...

et j s'incrément que quand tu passes dnas la condition IF donc seulement quand tu copies une ligne.
pour le Range("A" & j & ":D" & j) si j = 6 ça donne Range (A6:D6)

pour l'initialisation à 6, c'est juste parceque tu as tes entêtes en A5, donc tes première valeurs à recopier seront obligatoirement en A6...

Pour le site, je te conseille... celui-ci!!!

Va faire un tour dans la section tutoriaux, mot clé VBA, tu trouveras quelques petits trucs, tu as aussi des codes VBA dans la section code. Si tu les télécharge tu pourras essayer de comrpendre leur fonctionnement et apprendre de nouvelles fonctions.

Le meilleur apprentissage de toute façon, c'est la pratique! (enfin pour moi). Après y a les bouquins mais je suis pas fan...

Tubafat  
Avant d'imprimer, pensez à l'environnement
Messages postés
8
Date d'inscription
vendredi 14 septembre 2007
Statut
Membre
Dernière intervention
20 septembre 2007

re
merci pour les explication et du conseil et pour ta présence

à bientot