KWET2501
Messages postés8Date d'inscriptionvendredi 14 septembre 2007StatutMembreDernière intervention20 septembre 2007
-
20 sept. 2007 à 15:22
KWET2501
Messages postés8Date d'inscriptionvendredi 14 septembre 2007StatutMembreDernière intervention20 septembre 2007
-
20 sept. 2007 à 18:11
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
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
tubafat
Messages postés79Date d'inscriptionlundi 17 juillet 2006StatutMembreDernière intervention25 septembre 2007 20 sept. 2007 à 17:36
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
tubafat
Messages postés79Date d'inscriptionlundi 17 juillet 2006StatutMembreDernière intervention25 septembre 2007 20 sept. 2007 à 16:10
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
KWET2501
Messages postés8Date d'inscriptionvendredi 14 septembre 2007StatutMembreDernière intervention20 septembre 2007 20 sept. 2007 à 16:54
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!
tubafat
Messages postés79Date d'inscriptionlundi 17 juillet 2006StatutMembreDernière intervention25 septembre 2007 20 sept. 2007 à 17:08
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
KWET2501
Messages postés8Date d'inscriptionvendredi 14 septembre 2007StatutMembreDernière intervention20 septembre 2007 20 sept. 2007 à 17:27
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
KWET2501
Messages postés8Date d'inscriptionvendredi 14 septembre 2007StatutMembreDernière intervention20 septembre 2007 20 sept. 2007 à 17:48
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?
tubafat
Messages postés79Date d'inscriptionlundi 17 juillet 2006StatutMembreDernière intervention25 septembre 2007 20 sept. 2007 à 17:57
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