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 :

Macro fonctionnant mais lente


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre du Club
    Femme Profil pro
    Chargé d'affaire
    Inscrit en
    Août 2021
    Messages
    5
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Pyrénées Orientales (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Chargé d'affaire
    Secteur : Bâtiment

    Informations forums :
    Inscription : Août 2021
    Messages : 5
    Par défaut Macro fonctionnant mais lente
    Bonjour

    J'ai une macro qui fonctionne très bien, mais qui met pas mal de temps à s'exécuter.

    Quelqu'un aurait il des suggestions pour d'autre écritures qui la rendrait plus rapide.

    Ci après la macro en question.

    Son but est d'insérer une ligne de métré dans une table, de copier des plages avec les formules, et d'autres plages avec uniquement les valeurs, l'ensemble dans la même feuille.

    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 Macro7()
    '
    ' Macro7 Macro
    ' Enregistrement de la nature d'ouvrage dans la table Métré
    '
        Dim ret As Integer
        ret = MsgBox("Voulez vous Confirmer l'enregistrement ?", vbYesNo , "Enregistrement")
        If ret = vbNo Then
        Exit Sub
        Else
     
    With ActiveWorkbook.Worksheets("Métrés")
        Rows("20:20").Select
          Selection.Insert Shift:=xlDown, CopyOrigin:=xlFormatFromLeftOrAbove
     
    'Copy de la totalité de la ligne
        If Range("A17").Value <> 0 Then 
        Rows("17").Select 
        Selection.Copy 
        Rows("20").Select 
        Selection.PasteSpecial 
     
    'Copy des valeurs uniquement car elles sont initiées dans un pavé à part avec des listes déroulantes et comme des lignes futures vont s'intercaler les valeurs changeraient.
        Range("P20:T20").Select
        Selection.Copy 
        Range("P20:T20").Select
        Selection.PasteSpecial Paste:=xlPasteValues
        Range("N20").Select
        Selection.Copy 
        Range("N20").Select
        Selection.PasteSpecial Paste:=xlPasteValues
        End If
     
        Range("A17").Select
        Application.CutCopyMode = False
     
        Range("G17:I17").ClearContents
        If Range("L18").Value = "NON" Then
        Range("L17:M17").ClearContents
        End If
     
      End With
     
        MsgBox "La ligne de métré a été enregistrée" & Chr(10) & _
        "Passez à la suivante", vbExclamation , "Controle de la saisie",
     
      End If   
     
    End Sub
    Merci d'avance et très cordialement

  2. #2
    Expert confirmé
    Avatar de Qwazerty
    Homme Profil pro
    La très haute tension :D
    Inscrit en
    Avril 2002
    Messages
    4 127
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France

    Informations professionnelles :
    Activité : La très haute tension :D
    Secteur : Service public

    Informations forums :
    Inscription : Avril 2002
    Messages : 4 127
    Par défaut
    Salut

    Il y a des choses à modifier mais le mieux serait d'avoir une idée de l'organisation des données. Si la modification du tableau contenant les données est à ta main, il serait préférable de passer d’emblée sur un tableau structuré (ça ne modifie pas le contenu, ça crée juste une structure qui facilite l'ajout de ligne, et le traitement des données.

    Globalement.
    • Il faut supprimer les .Select en travaillant directement sur les plages.
    • Pour éviter le select + specialpast, mieux vaut faire directement le transfert de valeurs
      Code : Sélectionner tout - Visualiser dans une fenêtre à part
      Feuil2.Range("A3:A5").Value = Feuil2.Range("C3:C5").Value
    • Ne pas oublier de mettre des . avant les objet manipulés pour qu'il soient rattacher à la feuille pointée par With... (par exemple : .Range(...))
    • Éviter de travailler sur les lignes complètes (le tableau structuré aura toute sont importance), il vaut mieux travailler sur une plage de cellule réduite au strict nécessaire


    ++
    Qwaz

    MagicQwaz := Harry Potter la baguette en moins
    Le monde dans lequel on vit
    Ma page perso DVP
    Dernier et Seul Tutoriel : VBA & Internet Explorer
    Dernière contribution : Lien Tableau Structuré et UserForm
    L'utilisation de l’éditeur de message

Discussions similaires

  1. Réponses: 2
    Dernier message: 22/02/2020, 16h58
  2. [XL-2010] macro fonctionne dans l'editeur mais pas depuis une feuille
    Par Kanetsugu dans le forum Macros et VBA Excel
    Réponses: 4
    Dernier message: 22/12/2011, 06h56
  3. macro fonctionne avec xl2007 mais pas en 97 /2000
    Par Domimart dans le forum Macros et VBA Excel
    Réponses: 1
    Dernier message: 07/09/2009, 10h47
  4. [XL-2003] Macro qui fonctionne mais c'est trop lent
    Par lululaberlu dans le forum Macros et VBA Excel
    Réponses: 9
    Dernier message: 21/08/2009, 12h02
  5. Ma jolie macro fonctionne mais je ne comprends pas pourquoi ^
    Par ouskel'n'or dans le forum Macros et VBA Excel
    Réponses: 7
    Dernier message: 01/07/2007, 06h06

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