Effectuer ma macro pour chaque sélection dans la liste déroulant
Résolugaloute67 Messages postés 3 Statut Membre -
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
- Effectuer ma macro pour chaque sélection dans la liste déroulant
- Liste déroulante excel - Guide
- Vous devez disposer d'une autorisation pour effectuer cette action - Guide
- Liste déroulante en cascade - Guide
- Telecharger macro convertir chiffre en lettre excel - Télécharger - Tableur
- Liste code ascii - Guide
6 réponses
L'objectif est d'appliquer une transformation sur toutes les dates d'une liste déroulante sans changer manuellement de date.
Les interventions proposent de traiter les lignes par date et par équipe, en copiant/collant les blocs correspondants sur une autre feuille et en gérant les cas où une même équipe apparaît plusieurs fois pour une même date.
Un problème récurrent est que l’utilisation de sélections globales copie toutes les lignes visibles, ce qui empêche une boucle ciblée par date, d’où l’idée d’isoler les lignes d’une date puis de passer à la suivante, voire d’utiliser deux macros séparées pour la première et les exécutions suivantes.
Des difficultés techniques sont évoquées, notamment une erreur d’exécution 438 lors de l’utilisation du filtre automatique, avec des clarifications sur les colonnes concernées (date en colonne A et équipe en colonne C) et la possibilité d’un fichier de référence.
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é.
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)
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
Autant toutes les faire directement (sans les sélectionner une à une).
Dans ce cas le code de Morgothal est tout à fait adapté
enfait l'intérêt de sélectionner les dates une à une, c'est que j'ai plusieurs ligne pour chaque date et que ma macro me permet de regrouper ces différentes lignes en une seule.
Ta macro doit traiter une date que tu choisis à la main.
Le bout de code que j'ai écrit plus haut permet de passer sur chaque date dans la liste.
Il faut donc juste mettre ta macro dans la boucle écrite plus haut, et modifier ta variable date par la variable utilisée dans la boucle...
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
tu parles de celui-ci?
mais je ne voudrais pas choisir la date à la main, je voudrais que ça se fasse tout seul (je demande peut être un peu beaucoup je ne sais pas)
qu'entends tu par modifier la variable date par la variable de la boucle?
Merci
Sans le fichier, ça reste difficile à comprendre !!!
Essaies de le rendre anonyme avec des information "bidons" mais réalistes.
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre questionOui 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 ?
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
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.
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 ?
Je t'ai mis toutes les macros dans ce fichier txt, il faut tout mettre dans un module, et supprimer les autres modules (les macros portent le même nom) et lancer ta macro "recoupement_complet".
Voili voilou
mais il me dit :
erreur d'exécution "91:
variable objet ou variable de bloc non définie
et si je clique sur débogage il me met : ActiveWorkbook.Worksheets("Feuil1").AutoFilter.Sort.SortFields.Clear en jaune
cette ligne permet d'ouvrir le filtre auto? Puis les lignes suivante de sélectionner la 1ere ligne du champs 1?
Merci clément !!!
ça marche dans mon 1er fichier, je l'intégre à mon 2ème fichier là, je croise les doigts !