Effectuer ma macro pour chaque sélection dans la liste déroulant

[Résolu/Fermé]
Signaler
-
Messages postés
3
Date d'inscription
jeudi 3 octobre 2013
Statut
Membre
Dernière intervention
16 mars 2016
-
Bonjour,

je suis entrain d'essayer d'automatiser une transformation de données
j'ai ma macro qui fait ce qui va bien pour l'ensemble des lignes qui sorte que je sélectionne une date dans ma liste déroulante
ce que je voudrais faire c'est rajouter dans ma macro le fait qu'elle me fasse cela pour chaque date de ma liste déroulante sans que j'ai besoin de passer à la date suivante manuellement (j'ai plus de 365 jours de date donc ça serait beaucoup trop long).

Merci pour votre aide

6 réponses

Messages postés
1235
Date d'inscription
jeudi 22 avril 2010
Statut
Membre
Dernière intervention
19 mai 2015
177
On va récapéter alors :)

Sub copie_données_filtrées() 
Dim ligne As Integer 
ligne = 1 

Do 
ligne = ligne + 1 
Loop Until Cells(ligne, 1) <> Cells(ligne + 1, 1) Or Cells(ligne, 3) <> Cells(ligne + 1, 3) 

Range("A1:M" & ligne).Select 

Application.CutCopyMode = False 
Selection.Copy 
Sheets("Feuil3").Select 
Range("A1").Select 
ActiveSheet.Paste 
End Sub 

Ici on compte dans la Feuil1 les lignes qui comportent la même date et la même équipe qui se suivent. Ensuite on sélectionne, on copie colle, et terminé.



Sub suppression_dans_la_feuille_1() 
Dim ligne As Integer 
ligne = 1 
Sheets("Feuil1").Select 
Do 
ligne = ligne + 1 
Loop Until Cells(ligne, 1) <> Cells(ligne + 1, 1) Or Cells(ligne, 3) <> Cells(ligne + 1, 3) 

Range("A2:AA" & ligne).Select 
Selection.Delete 
End Sub  

Et ici on fait la même chose, on compte les lignes de la Feuil1 qui ont même date et même équipe, on sélectionne, on supprime, et terminé.
1
Merci

Quelques mots de remerciements seront grandement appréciés. Ajouter un commentaire

CCM 41713 internautes nous ont dit merci ce mois-ci

Niquel :)
Merci clément !!!
ça marche dans mon 1er fichier, je l'intégre à mon 2ème fichier là, je croise les doigts !
Messages postés
8539
Date d'inscription
dimanche 13 juin 2010
Statut
Membre
Dernière intervention
20 juillet 2021
1 705
Il est probable qu'un Do ... Loop ou un While .. Wend fasse l'affaire.
Merci pour votre réponse !
Mais je débute avec les macro, je ne sais donc pas ce qu'est un Do lopp ou un while wend, pouvez vous m'expliquer comment je l'intègre dans ma macro et ce que ça fait !

Merci beaucoup
J'ai regardé un peu sur internet, d'après ce que j'ai compris, il me faudrait plutot un FOR EACH mais je ne suis pas sûr, le problème étant qu'il faudrait faire dérouler la liste des dates (filtre automatique) une par une

je ne sais pas si je suis très claire

merci beaucoup
Messages postés
1235
Date d'inscription
jeudi 22 avril 2010
Statut
Membre
Dernière intervention
19 mai 2015
177
Si tu as la liste des dates possibles dans un range, tu peux effectivement utiliser un For Each :

Sub test()

For Each cell In Range("A1:A10")
MsgBox cell 'chaque cell contient le contenu (oui oui...) des cellules de 'A1 à A10 à chaque itération
Next

End Sub


A la place du msgbox, mettre la procédure qui traite chaque date (la date est dans la variable cell)
J'ai essayé mais cela me refait la formule sur la 1ere ligne en boucle.
Enfait, je voudrais que la macro sélectionne dans le menu déroulant (du filtre automatique) une à une chaque date.

cela donnerait :
sélection date 1 dans menu déroulant (du filtre auto)
fait manip automatique que j'ai enregistré
puis dans le menu déroulant sélectionne date 2
fait manip
ainsi de suite jusqu'à ce que toutes les dates du menu déroulant soient faites

merci
Messages postés
8539
Date d'inscription
dimanche 13 juin 2010
Statut
Membre
Dernière intervention
20 juillet 2021
1 705
Quel est l'intérêt de sélectionner automatiquement chaque date une par alors qu'il faut faire toutes les dates ???

Autant toutes les faire directement (sans les sélectionner une à une).

Dans ce cas le code de Morgothal est tout à fait adapté
Messages postés
1235
Date d'inscription
jeudi 22 avril 2010
Statut
Membre
Dernière intervention
19 mai 2015
177
D'accord, je comprends mieux, mais c'est vrai qu'il serait carrément plus aisé de travailler sur un fichier raccourci et anonymisé : en laissant 4 ou 5 dates seulement et anonymisant les noms et données confidentielles par exemple...
d'accord je vais essayer de faire un fichier simplifié et anonymisé,
comment je fais pour vous l'envoyer
Messages postés
1235
Date d'inscription
jeudi 22 avril 2010
Statut
Membre
Dernière intervention
19 mai 2015
177
Via cjoint.com, c'est assez pratique ;-)
Messages postés
8539
Date d'inscription
dimanche 13 juin 2010
Statut
Membre
Dernière intervention
20 juillet 2021
1 705
http://cjoint.com/?3Gxp1eu2EKg

voilà, je ne sais pas si ça va marcher dites moi

vous verrez sans doute des choses étranges c'est la 1ere fois que je fais une macro

merci beaucoup en tout cas
Messages postés
8539
Date d'inscription
dimanche 13 juin 2010
Statut
Membre
Dernière intervention
20 juillet 2021
1 705
Bonjour,

Sans le fichier, ça reste difficile à comprendre !!!
Essaies de le rendre anonyme avec des information "bidons" mais réalistes.
Messages postés
1235
Date d'inscription
jeudi 22 avril 2010
Statut
Membre
Dernière intervention
19 mai 2015
177
Aah un fichier :-)
Oui le lien cjoint fonctionne bien

Donc avec tout ce qu'on a dit plus haut, je récapète :
Tu souhaites prendre toutes les lignes de chaque date de la colonne A, les copier (ou couper ?)/coller sur une autre feuille, et agréger les lignes selon certains critères pour n'avoir qu'une ligne par date, me trompe-je ?


Quels sont ces critères ?
http://cjoint.com/?3GxqfGlLjEm

j'ai changé le fichier les données n'étaient pas représentative

oui c'est ça !
enfait chaque ligne correspond à un voyage jusqu'à une usine
je veux avoir une ligne par jour et par équipe regroupant les données des voyages effectué ce jour la
c'est à dire
date équipe véhicule heure arrivée usine voyage 1 puis heure sortie pour chaque voyage horaire des employées et poids de chaque trajet et au final le nombre de voyage
j'ai mis le déroulé de mes macro dans l'en tete du fichier joint
je le remet ici :
-mise_en_forme
faire filtre automatique sur date et équipe
-copie_données_filtrées
-compilation
-copie_remise_zéro
(les 3 dans recoupement_complet)
-nb_voyage_jour
Messages postés
1235
Date d'inscription
jeudi 22 avril 2010
Statut
Membre
Dernière intervention
19 mai 2015
177
Quand tu dis sur date et équipe , c'est à dire la colonne A et la colonne C ?
Messages postés
1235
Date d'inscription
jeudi 22 avril 2010
Statut
Membre
Dernière intervention
19 mai 2015
177
Et toute cette discussion pour automatiser l'étape :
faire filtre automatique sur date et équipe

J'ai tout compris ! Je m'y atèle :-)
Messages postés
1235
Date d'inscription
jeudi 22 avril 2010
Statut
Membre
Dernière intervention
19 mai 2015
177
Il y a quand même des simplifications à apporter :
Il n'y a pas besoin de filtrer par date et par équipe dans le cas où il n'y a qu'une ligne par date et équipe.
Il arrive que des fois il y ait deux fois la même équipe pour une même date, ce sont ces cas là qui sont problématiques...

En dehors de ces cas problématiques, il suffit de prendre ligne à ligne pour que ce soit correct.

Je continue de voir comment intégrer ça à tes macros.
oui, c'est ça
j'ai fait la manip sur chaque ligne pensant qu'une macro ne saurait pas faire la distinction.
Mon but est d'avoir le tableau feuil4 au final avec une ligne par date (colonne A) et par équipe (colonne C).

merci

c'est vraiment super gentil de m'aider :)
Messages postés
1235
Date d'inscription
jeudi 22 avril 2010
Statut
Membre
Dernière intervention
19 mai 2015
177
Hello
C'est OK, la macro sélectionne maintenant la première ligne s'il n'y a pas d'autres lignes même date/même équipe.
Cependant je ne vois rien dans la macro qui supprime la ligne qui se trouve maintenant dans la feuille4...
Faut-il le rajouter, est-ce une manip que tu fais à la main ?
Messages postés
1235
Date d'inscription
jeudi 22 avril 2010
Statut
Membre
Dernière intervention
19 mai 2015
177
Ceci explique peut-être cela alors !
Ce classeur est trié à la main, la macro ne s'occupe plus de ça. Sans doutes marchera-t-elle mieux chez toi :)
alors du coup ça ne me met pas de message d'erreur
mais ça me demande à chaque fois si je veux effacer la ligne entière et donc j'ai laissé déroulé un moment puis j'ai stoppé et enfait les lignes sur la feuil4 était vide et les lignes traitées (je suppose) n'était pas supprimé feuil1
Messages postés
1235
Date d'inscription
jeudi 22 avril 2010
Statut
Membre
Dernière intervention
19 mai 2015
177
Je ne comprends vraiment pas alors, chez moi j'exécute une fois la macro 1, puis plein de fois la macro 2, ça me donne ça : le classeur un peu exécuté.
GENIAL !!!!
j'ai compris je suis désolée je suis vraiment pas douée
enfait il suffit que je trie par date puis par équipe et ensuite que j'execute la macro et ça marche du tonnerre :) !!!
c'est niquel merci beaucoup !
par contre si tu peux m'expliquer
les différentes lignes de :
Sub copie_données_filtrées()
Dim ligne As Integer
ligne = 1

Do
ligne = ligne + 1
Loop Until Cells(ligne, 1) <> Cells(ligne + 1, 1) Or Cells(ligne, 3) <> Cells(ligne + 1, 3)

Range("A1:M" & ligne).Select

Application.CutCopyMode = False
Selection.Copy
Sheets("Feuil3").Select
Range("A1").Select
ActiveSheet.Paste
End Sub
et de :

Sub suppression_dans_la_feuille_1()
Dim ligne As Integer
ligne = 1
Sheets("Feuil1").Select
Do
ligne = ligne + 1
Loop Until Cells(ligne, 1) <> Cells(ligne + 1, 1) Or Cells(ligne, 3) <> Cells(ligne + 1, 3)

Range("A2:AA" & ligne).Select
Selection.Delete
End Sub

que je puisse l'intégrer dans mes autres fichiers du même type :)

Merci infiniment !!!
Messages postés
3
Date d'inscription
jeudi 3 octobre 2013
Statut
Membre
Dernière intervention
16 mars 2016

Bonjour,

Je reviens aujourd'hui car après plus de deux ans de bons et loyaux services de la macro que vous m'avez aidé à réaliser... Nous passons à office 2010 et la portion :
Sub copie_données_filtrées()
Dim ligne As Integer
ligne = 1

Do
ligne = ligne + 1
Loop Until Cells(ligne, 1) <> Cells(ligne + 1, 1) Or Cells(ligne, 3) <> Cells(ligne + 1, 3)

Range("A1:M" & ligne).Select

Application.CutCopyMode = False
Selection.Copy
Sheets("Feuil3").Select
Range("A1").Select
ActiveSheet.Paste
End Sub
et de :

Sub suppression_dans_la_feuille_1()
Dim ligne As Integer
ligne = 1
Sheets("Feuil1").Select
Do
ligne = ligne + 1
Loop Until Cells(ligne, 1) <> Cells(ligne + 1, 1) Or Cells(ligne, 3) <> Cells(ligne + 1, 3)

Range("A2:AA" & ligne).Select
Selection.Delete
End Sub

ne fonctionne plus, seriez-vous à nouveau m'aider? Je n'ai pas de message d'erreur, mais il ne copie qu'une ligne même lorsqu'il y en a deux ou plus!