IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Macros et VBA Excel Discussion :

Optimiser mon code VBA pour avoir une excusion rapide de mes macros.


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Homme Profil pro
    Chargé d'affaire
    Inscrit en
    Mars 2023
    Messages
    13
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Chargé d'affaire
    Secteur : Industrie

    Informations forums :
    Inscription : Mars 2023
    Messages : 13
    Par défaut Optimiser mon code VBA pour avoir une excusion rapide de mes macros.
    Bonjour les développeurs,

    Je suis un débutant en VBA,je veux optimiser mon code VBA pour avoir une excusion rapide de mes macros.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    Sub Macro1()
     
    Application.ScreenUpdating = False
     
    'Extraction des Données'
     
        Sheets("Données").Select
        Range("B4:JJ10000").Select
        Selection.Copy
        Sheets("Détails Rang2").Select
        Range("B4").Select
        Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
            :=False, Transpose:=False
     
    'Copier & Coller sans doublants'
     
        Sheets("Détails Rang2").Select
        Range("D4: D10000").Select
        Selection.Copy
        Range("JM4").Select
        Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
            :=False, Transpose:=False
        Application.CutCopyMode = False
        ActiveSheet.Range("$JM$3:$JM$1000").RemoveDuplicates Columns:=1, Header:= _
            xlYes
     
        Sheets("Accueil").Select
     
    'Liste de A a Z'
     
       ActiveWorkbook.Worksheets("Détails Rang2").Sort.SortFields.Clear
        ActiveWorkbook.Worksheets("Détails Rang2").Sort.SortFields.Add Key:=Range( _
            "JM3"), SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:= _
            xlSortNormal
     
        With ActiveWorkbook.Worksheets("Détails Rang2").Sort
            .SetRange Range("JM4:TM1000")
            .Header = xlNo
            .MatchCase = False
            .Orientation = xlTopToBottom
            .SortMethod = xlPinYin
            .Apply
        End With
     
    Application.ScreenUpdating = True
     
    UserForm1.Show
     
    End Sub

  2. #2
    Membre éclairé
    Homme Profil pro
    instituteur
    Inscrit en
    Juillet 2018
    Messages
    617
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : Côte d'Ivoire

    Informations professionnelles :
    Activité : instituteur
    Secteur : Enseignement

    Informations forums :
    Inscription : Juillet 2018
    Messages : 617
    Par défaut
    bonjour...
    commence par retirer Sheets("Données").Select
    tout simplement
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    sheets("Données").Range("B4:JJ10000").copy Sheets("Détails Rang2").Range("B4")
    Sheets("Détails Rang2").Range("D4: D10000").Copy Range("JM4")

  3. #3
    Membre émérite
    Homme Profil pro
    Retraité
    Inscrit en
    Octobre 2022
    Messages
    685
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 64
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Octobre 2022
    Messages : 685
    Par défaut
    Bonjour

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    Sub Macro1()
     
        Application.ScreenUpdating = False
        Application.Calculation = False
     
    'Extraction des Données'
     
        ThisWorkbook.Sheets("Données").Range("B4:JJ10000").Copy
        ThisWorkbook.Sheets("Détails Rang2").Range("B4").PasteSpecial xlPasteValues
     
    'Copier & Coller sans doublons'
     
        ThisWorkbook.Sheets("Détails Rang2").Range("D4:D10000").Copy
        ThisWorkbook.Sheets("Détails Rang2").Range("JM4").PasteSpecial xlPasteValues
        ThisWorkbook.Sheets("Détails Rang2").Range("$JM$3:$JM$1000").RemoveDuplicates Columns:=1, Header:=xlYes
     
    'Liste de A a Z'
     
        With ThisWorkbook.Worksheets("Détails Rang2").Sort
            With .SortFields
                .Clear
                .Add Key:=Range("JM3"), SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:=xlSortNormal
            End With
            .SetRange Range("JM4:TM1000")
            .Header = xlNo
            .MatchCase = False
            .Orientation = xlTopToBottom
            .SortMethod = xlPinYin
            .Apply
        End With
     
        Application.Calculation = True
        Application.ScreenUpdating = True
     
        UserForm1.Show
     
    End Sub
    J'ai le sentiment que les plages de travail sont énormes et pas cohérentes.

    Au début on travaille sur 10000 lignes, le tri ne porte plus que sur 1000.
    On commence par copier les colonnes de B à JJ (pas loin de 300 colonnes !) de la feuille 1 à la feuille 2
    Puis dans la feuille 2 on copie la colonne D (fraichement copiée) dans la colonne JM
    Puis on dédoublonne les 1000 (?) premières valeurs de JM
    Puis on trie la fin de la feuille 2 : 1000 lignes de JM à TM (encore 300 colonnes mais des autres). Comme le contenu des colonnes JNà TM était déjà là, ça serait un coup de bol extraordinaire que la copie +dédoublonnage ait amené les bonnes valeurs sur les bonnes lignes pour que ce tri ait un sens...

    Il suffisait déjà de copier directement la colonne D de la feuille 1 (et 1000 lignes seulement) en JM.

  4. #4
    Membre averti
    Homme Profil pro
    Chargé d'affaire
    Inscrit en
    Mars 2023
    Messages
    13
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Chargé d'affaire
    Secteur : Industrie

    Informations forums :
    Inscription : Mars 2023
    Messages : 13
    Par défaut
    Merci pour votre aide.
    le Code ça marche bien et trés optimiser.

  5. #5
    Membre Expert
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    1 508
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Juillet 2006
    Messages : 1 508
    Par défaut
    Note pour les maniaco-depressifs du Application.ScreenUpdating = False:

    Virez toutes les selections, activations, appels à l'objet Selection, Activexxx et autre cochonneries de ce genre, et votre code non seulement sera plus lisible, s'executera à vitesse convenable, et ne transformera pas votre classeur en sapin de Noël.

  6. #6
    Membre averti
    Homme Profil pro
    Chargé d'affaire
    Inscrit en
    Mars 2023
    Messages
    13
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Chargé d'affaire
    Secteur : Industrie

    Informations forums :
    Inscription : Mars 2023
    Messages : 13
    Par défaut
    Merci pour votre conseil c'est fait

Discussions similaires

  1. [Toutes versions] Optimisation d'un code VBA pour remplacer une image en fonction d'une équivalence de cellule
    Par DeeJas dans le forum Macros et VBA Excel
    Réponses: 9
    Dernier message: 11/12/2022, 12h06
  2. [XL-2007] Optimiser un code VBA pour accélérer l'éxécution
    Par Rayanea dans le forum Macros et VBA Excel
    Réponses: 0
    Dernier message: 01/08/2010, 15h18
  3. Réponses: 2
    Dernier message: 14/10/2009, 08h57
  4. Code VBA pour Copier une cellule dans un filtre?
    Par Redisdead dans le forum Macros et VBA Excel
    Réponses: 1
    Dernier message: 12/02/2009, 05h48

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo