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

Messages postés
127
Date d'inscription
dimanche 29 mars 2015
Statut
Membre
Dernière intervention
5 juillet 2019
-
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
Afficher la suite 

1 réponse

Messages postés
14786
Date d'inscription
dimanche 25 novembre 2007
Statut
Membre
Dernière intervention
13 octobre 2019
1176
0
Merci
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
geoffroy1958
Messages postés
127
Date d'inscription
dimanche 29 mars 2015
Statut
Membre
Dernière intervention
5 juillet 2019
-
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....
@+
f894009
Messages postés
14786
Date d'inscription
dimanche 25 novembre 2007
Statut
Membre
Dernière intervention
13 octobre 2019
1176 -
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
geoffroy1958
Messages postés
127
Date d'inscription
dimanche 29 mars 2015
Statut
Membre
Dernière intervention
5 juillet 2019
-
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

@+
f894009
Messages postés
14786
Date d'inscription
dimanche 25 novembre 2007
Statut
Membre
Dernière intervention
13 octobre 2019
1176 -
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
Commenter la réponse de f894009