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

Fermé
Utilisateur anonyme - Modifié le 28 juin 2019 à 17:36
f894009 Messages postés 17185 Date d'inscription dimanche 25 novembre 2007 Statut Membre Dernière intervention 15 avril 2024 - 30 juin 2019 à 17:55
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
A voir également:

1 réponse

f894009 Messages postés 17185 Date d'inscription dimanche 25 novembre 2007 Statut Membre Dernière intervention 15 avril 2024 1 701
29 juin 2019 à 08:05
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
Utilisateur anonyme
Modifié le 29 juin 2019 à 18:00
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
f894009 Messages postés 17185 Date d'inscription dimanche 25 novembre 2007 Statut Membre Dernière intervention 15 avril 2024 1 701
30 juin 2019 à 06:40
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
Utilisateur anonyme
30 juin 2019 à 17:11
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
f894009 Messages postés 17185 Date d'inscription dimanche 25 novembre 2007 Statut Membre Dernière intervention 15 avril 2024 1 701
30 juin 2019 à 17:55
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