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 :

Temps traitement excessif sur routine sur collage spécial


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Candidat au Club
    Homme Profil pro
    Chef de projet MOA
    Inscrit en
    Janvier 2017
    Messages
    2
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Seine Maritime (Haute Normandie)

    Informations professionnelles :
    Activité : Chef de projet MOA

    Informations forums :
    Inscription : Janvier 2017
    Messages : 2
    Par défaut Temps traitement excessif sur routine sur collage spécial
    Bonjour à tous,

    Un grand classique : Je suis béotien en VB mais je me soigne...
    Problématique du jour : Sur une base assez modeste dans une feuille intitulée "Indicateurs" comportant une liste d'indicateurs(original non?) , j'ai besoin de faire un collage spécial car je viens copier la cellule H9 comportant une formule et je souhaite recopier le résultat dans la cellule R9 puis je traite toutes les lignes.
    J'ai donc fais une macro avec une boucle toute bête sauf que, pour des raisons que j'ignore, ma macro toute pourrie met 1'55" pour traiter 334 lignes soit 0,34 seconde par ligne...
    Je soupçonne mes nombreux select et les paramètres de mon PasteSpecial mais je ne sais quel serait le code le plus rapide pour traiter cela.

    Quelqu'un aurait il une méthode plus rapide

    PS : l'idéal quand j'aurais réglé ce problème de vitesse serait que je puisse ajouter une barre de progression ...
    Si quelqu'un, a un joli code tout propre, je suis preneur.

    Merci à tous

    Thierry


    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
    Sub MAJ_Nom_Activite_dans_Indicateurs()
    '
    ' MAJ_Nom_Activite_dans_Indicateurs Macro
    ' Vient mettre à jour le nom de l'activité pour un indicateur donné dans la feuille
    ' Indicateurs 
     
    'annulation de  l'actualisation graphique d'Excel 
        Application.ScreenUpdating = False
    'Déclaration variables
        Dim Compteur As Integer
        Dim Lignes_traitées As Integer
        Dim NbLignes As Integer
     
    'Initialisation variables
        Compteur = 0
        Lignes_traitées = 0
        NbLignes = 0
    'Choix de la feuille active
        Worksheets("INDICATEURS").Select
    'calcul nombre de lignes
         NbLignes = WorksheetFunction.CountA(Range("E:E")) 
    ' Positionnement sur première cellule
        Range("R9").Select
    ' Lancement de la boucle et du traitement
        For Compteur = 0 To NbLignes
            If ActiveCell <> "" Then
                ActiveCell.Offset(0, -10).Select
                Selection.Copy
                ActiveCell.Offset(0, 10).Select
                Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, Transpose:=False
                Lignes_traitées = Lignes_traitées + 1
            End If
            ActiveCell.Offset(1, 0).Select
        Next Compteur
        msgbox "Cette routine a traité " & Lignes_traitées & " lignes"
    End Sub

  2. #2
    Expert confirmé
    Homme Profil pro
    aucune
    Inscrit en
    Avril 2016
    Messages
    7 563
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 84
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : aucune

    Informations forums :
    Inscription : Avril 2016
    Messages : 7 563
    Par défaut
    Bonjour
    Si quelqu'un, a un joli code tout propre, je suis preneur.
    On commence par une idée pour éviter du code non "propre" --->> ne pas travailler à coups de Select, Selection, etc ... mais directement sur les objets Excel.

    On continue en consultant la rubrique Range.PasteSpecial, méthode, de l'aide Interne VBA. Elle est claire et en outre assortie d'un exemple non moins clair.

    Nulle boucle n'est ici nécessaire.

  3. #3
    Invité
    Invité(e)
    Par défaut
    Bonjour,
    il faut apprendre à se servir de ses deux mains! un copier collé par valeur n'est pas utile!

    comme préciser par UnParia, évite les select, selection et autre activeXX

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
     ActiveCell.Offset(0, 10).value=ActiveCell.Offset(0, -10).value

Discussions similaires

  1. Erreur 1004 sur collage spécial (PasteSpecial)
    Par Erreur_1004 dans le forum Macros et VBA Excel
    Réponses: 3
    Dernier message: 14/10/2013, 16h41
  2. [XL-2007] Problème collage spéciale sur hauteur de ligne
    Par VITALTH dans le forum Excel
    Réponses: 0
    Dernier message: 31/10/2012, 15h30
  3. [PPT-2003] Erreur sur collage spécial : "the specified datatype is unavailable"
    Par Antoun dans le forum VBA PowerPoint
    Réponses: 1
    Dernier message: 28/07/2010, 05h28
  4. [VBA-E] collage spécial sur cellules fusionnées
    Par doringen dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 01/06/2010, 20h02
  5. Collage Spécial par défaut sur un Ctrl+V
    Par Peanut dans le forum Word
    Réponses: 14
    Dernier message: 04/03/2008, 00h32

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