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

Résolu
GKI -  
galoute67 Messages postés 3 Statut Membre -
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

Résumé de la discussion

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.

Bobot (l'IA à votre service)
  1. Morgothal Messages postés 1350 Statut Membre 184
     
    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
    1. GKI
       
      Niquel :)
      Merci clément !!!
      ça marche dans mon 1er fichier, je l'intégre à mon 2ème fichier là, je croise les doigts !
      0
  2. Patrice33740 Messages postés 8400 Date d'inscription   Statut Membre Dernière intervention   1 784
     
    Il est probable qu'un Do ... Loop ou un While .. Wend fasse l'affaire.
    0
    1. GKI
       
      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
      0
    2. GKI
       
      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
      0
    3. Morgothal Messages postés 1350 Statut Membre 184
       
      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)
      0
    4. GKI
       
      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
      0
  3. Patrice33740 Messages postés 8400 Date d'inscription   Statut Membre Dernière intervention   1 784
     
    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é
    0
    1. Patrice33740 Messages postés 8400 Date d'inscription   Statut Membre Dernière intervention   1 784
       
      PS : il faudrait que tu mettes la macro que tu as enregistré pour qu'on voie ce qui ne va pas
      0
    2. GKI
       
      Si je mets toute la macro, ça va faire beaucoup, elle est longue et c'est un peu du bricolage parce que je n'y connais rien et je suis entrain de bidouiller.

      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.
      0
    3. GKI
       
      Est-ce que vous pensez que c'est possible?
      0
    4. Morgothal Messages postés 1350 Statut Membre 184
       
      Oui c'est possible
      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...
      0
    5. GKI
       
      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

      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
      0
  4. Patrice33740 Messages postés 8400 Date d'inscription   Statut Membre Dernière intervention   1 784
     
    Bonjour,

    Sans le fichier, ça reste difficile à comprendre !!!
    Essaies de le rendre anonyme avec des information "bidons" mais réalistes.
    0
  5. Vous n’avez pas trouvé la réponse que vous recherchez ?

    Posez votre question
  6. Morgothal Messages postés 1350 Statut Membre 184
     
    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 ?
    0
    1. GKI
       
      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
      0
    2. Morgothal Messages postés 1350 Statut Membre 184
       
      Quand tu dis sur date et équipe , c'est à dire la colonne A et la colonne C ?
      0
    3. Morgothal Messages postés 1350 Statut Membre 184
       
      Et toute cette discussion pour automatiser l'étape :
      faire filtre automatique sur date et équipe

      J'ai tout compris ! Je m'y atèle :-)
      0
    4. Morgothal Messages postés 1350 Statut Membre 184
       
      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.
      0
    5. GKI
       
      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 :)
      0
  7. Morgothal Messages postés 1350 Statut Membre 184
     
    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 ?
    0
    1. GKI
       
      Tu as modifié quelque chose dans la macro? Je ne comprend pas ce que tu veux dire

      oui je supprime à la main ce qu'il y a dans la feuil4 ce n'est pas ce qui prend le plus de temps
      0
    2. Morgothal Messages postés 1350 Statut Membre 184
       
      J'ai ajouté la suppression dans la Feuil1 de ce qui est ajouté à la feuille 4.
      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
      0
    3. GKI
       
      la ligne
      ActiveWorkbook.Worksheets("Feuil1").AutoFilter.Sort.SortFields.Clear dans la macro mise en forme ne fonctionne pas
      0
    4. Morgothal Messages postés 1350 Statut Membre 184
       
      Hmm
      Tu as bien pris toute la macro du fichier txt, sans réutiliser les anciennes macros ?
      Chez moi ça fonctionne...
      0
    5. GKI
       
      Oui j'ai repris tout après avoir effacé mes macros de base
      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?
      0