Comment améliorer une macro créé avec l'enregistreur?

Utilisateur anonyme -  
f894009 Messages postés 17417 Date d'inscription   Statut Membre Dernière intervention   -
Bonjour,

La macro que j’ai créé avec l’enregistreur et divers codes sur le net fonctionne très bien mais je trouve qu’elle est un peu trop longue.
Est-il possible d'améliorer ou simplifier les codes de cette macro du fichier ci-dessous?

https://www.cjoint.com/c/IFCpJyVhKps

Merci
Geoffroy

1 réponse

  1. f894009 Messages postés 17417 Date d'inscription   Statut Membre Dernière intervention   1 717
     
    Bonjour,

    Filtre pour copie ligne(s) filtree(s) et cadrillage
    Peut-être plus besoin de la procedure suppression lignes vides
    Faites un test avec code et si ok, intégrez le ou a defaut je le ferai. Pour le reste ai pas regarde en detail, mais je peux
    'Sub Fitre_Recup_Info(ns)
    Sub Fitre_Recup_Info()
        ns = 26             ' a passer en parametre
        With Worksheets("Feuil1")       'adaptez nom de feuille
            .Range("A2:M2").AutoFilter  'filtre en place
            With .Range("$A$2:$M$49")     'plage de cellules utilisees
                .AutoFilter Field:=13, Criteria1:=ns    'filtre Num semaine
                '--------- ajouter code si pas de lignes filtrees -----------------
                If .Cells(3, 13) <> "" Then      'cellule colonne filtre
                    Worksheets("Feuil1").Range("A1:M1").Copy Worksheets("feuil5").Range("A1")
                    Set Plage_ST = .Cells(1, 1).Resize(.Rows.Count - 1, .Columns.Count).SpecialCells(xlCellTypeVisible) 'plage de cellules sans les entetes
                    Plage_ST.EntireRow.Copy Worksheets("feuil5").Range("A2")
                Else
                    MsgBox ("Mot introuvable !")
                End If
                '------------------------------------------------------------------
            End With
            .Range("A2:M2").AutoFilter      'enleve filtre
        End With
    End Sub
    
    0
    1. Utilisateur anonyme
       
      Bonjour,
      Merci beaucoup.
      Je n'avais pas passé au filtre... :)
      mais il me faut le code de 'dernière ligne' car c'est une feuille de 3 km de lignes, apparemment ...oui sérieux si ce n'est pas plus...
      donc
      With .Range("$A$3:$M$49")     'plage de cellules utilisees
      49 remplacé par dernière ligne

      ça réduit pas mal déjà, super...
      J'avais fait une "copie" mais on peut ajouter une nouvelle feuille à chaque fois, renommée puis supprimée mais là je bloque un peu car plantage avec l'enregistreur.


      par contre cette ligne
      Plage_ST.EntireRow.Copy Worksheets("feuil5").Range("A2")

      fait un doublon
      merci encore, je vais modifier tout ça....
      @+
      0
    2. f894009 Messages postés 17417 Date d'inscription   Statut Membre Dernière intervention   1 717
       
      Bonjour,

      mais il me faut le code de 'dernière ligne'
      derlig = .Range("A" & Rows.Count).End(xlUp).Row
      With .Range("$A$3:$M$" & derlig)


      Pourquoi cette ligne fait doublon. Vous récupérez les lignes filtrées comment?????????

      je bloque un peu car plantage avec l'enregistreur.
      Pige pas ........

      Pour moi, une feuille modele serait plus adaptée remplie et initialisée a chaque demande. Comme ca plus de mise en page
      0
    3. Utilisateur anonyme
       
      Bonjour,

      J'ai fait doublon car j'ai copié la feuil1 et renommé 'copie'

      j'aimerais à la place de la 'feuil5' modèle, insérer une nouvelle feuille et copier le résultat

      Travailler dans une nouvelle feuille et la supprimer à l'impression à chaque lancement de la macro

      merci

      @+
      0
    4. f894009 Messages postés 17417 Date d'inscription   Statut Membre Dernière intervention   1 717
       
      Bonjour,

      Dans votre classeur regardez le code que vous aviez au depart pour créer la feuille que vous renommiez en copie. Le code que j'ai mis est adapte
      0