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 :

Épuration des Activate, Selection etc [XL-2016]


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
    Étudiant
    Inscrit en
    Avril 2019
    Messages
    40
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Mayenne (Pays de la Loire)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2019
    Messages : 40
    Par défaut Épuration des Activate, Selection etc
    Bonjour tout le monde,

    Je viens vers vous car j'ai eu de nombreuses remarques sur mon code VBA. Étant débutant sur VBA, je n'avais pas trop fait attention mais en effet, ces Activate et Select surchargent beaucoup mon code.

    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
    Dim derniereLigne1 As Long
    Dim derniereLigne2 As Long
     
    Range("A" & Rows.Count).End(xlUp).Select
    derniereLigne1 = Range("A" & Rows.Count).End(xlUp).Row
     
    Sheets("XXX").Activate
    Range("A" & Rows.Count).End(xlUp).Select
    derniereLigne2 = Range("A" & Rows.Count).End(xlUp).Row
     
        Sheets("Données").Activate
        Range("A2:P" & derniereLigne1).Select
        Application.CutCopyMode = False
        Selection.Copy
        Sheets("XXX").Select
        Range("C" & derniereLigne2).Select
        ActiveSheet.Paste
        Sheets("Données").Activate
        Range("A1:P" & derniereLigne1).Select
        Selection.Delete
    Mon but grâce à ce code est donc de copier des données dans l'onglet "Données", ensuite je les colles dans mon onglet XXX (à la suite de mes autres données) et ensuite je revient sur l'onglet Données pour tout supprimer.

    Pour la première partie sur le comptage de la dernière ligne, il me semble que c'est bon. Par contre je sais que la deuxième partie peut être plus épurée. Est-il possible d'enlever tout les Activate pour faire cette manipulation ?

    Cordialement, Clément.

  2. #2
    Expert éminent Avatar de Menhir
    Homme Profil pro
    Ingénieur
    Inscrit en
    Juin 2007
    Messages
    16 037
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Finistère (Bretagne)

    Informations professionnelles :
    Activité : Ingénieur
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2007
    Messages : 16 037
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    Dim derniereLigne1 As Long
    Dim derniereLigne2 As Long
     
    derniereLigne1 = Worksheets("Données").Cells(Rows.Count, "A").End(xlUp).Row
    derniereLigne2 = Worksheets("XXX").Cells(Rows.Count, "A").End(xlUp).Row
     
    Worksheets("Données").Range("A2:P" & derniereLigne1).Copy Sheets("XXX").Cells(derniereLigne2, "C")
    Worksheets("Données").Range("A1:P" & derniereLigne1).Delete

  3. #3
    Membre expérimenté
    Homme Profil pro
    Étudiant
    Inscrit en
    Octobre 2018
    Messages
    254
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 29
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Octobre 2018
    Messages : 254
    Par défaut
    Bonjour,

    Pour éviter les activate et les select, il faut que tu pointes directement la cellule voulue :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    workbooks("TEST").worksheets("Données").range("A1")="x"
    Comme ça pas besoin d'activer la feuille.

    Du coup, pour l'exemple, ça te donnerait :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    Sheets("XXX").Activate
    Range("A" & Rows.Count).End(xlUp).Select
    derniereLigne2 = Range("A" & Rows.Count).End(xlUp).Row
     
    Deviendrait
     
    derniereLigne2=Workbooks("Test").worksheets("XXX").cells(rows.count,1).end(xlup).row
    Autrement, ce que tu peux faire c'est créer des variables Feuilles qui te permettront d'alléger la syntaxe de ton code :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    Dim WsXXX as Worksheet
    set WsXXX = workbooks("Test").worksheets("XXX")
     
    'Ca deviendrait donc :
     
    derniereLigne2 = WsXXX.cells(rows.count,1).end(xlup).row
    Si tu as d'autres questions n'hésite pas,

    Bonne journée,

  4. #4
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2019
    Messages
    40
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Mayenne (Pays de la Loire)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2019
    Messages : 40
    Par défaut
    Merci Menhir, ton code marche parfaitement !

    Merci Trystan aussi, ça m'a permis de comprendre un peu mieux comment je pouvais gérer mon code

    Bonne journée

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [MySQL] Base de données qui génère des histogrammes, courbes etc. Comment ?
    Par tonguim dans le forum PHP & Base de données
    Réponses: 2
    Dernier message: 25/08/2006, 18h13
  2. Réponses: 2
    Dernier message: 12/05/2006, 23h59
  3. Réponses: 4
    Dernier message: 06/03/2006, 10h38
  4. Réponses: 3
    Dernier message: 04/09/2002, 09h42

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