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 :

Simplifier une macro


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Homme Profil pro
    Architecte de base de données
    Inscrit en
    Mars 2015
    Messages
    123
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Deux Sèvres (Poitou Charente)

    Informations professionnelles :
    Activité : Architecte de base de données

    Informations forums :
    Inscription : Mars 2015
    Messages : 123
    Par défaut Simplifier une macro
    Bonjour,

    Peut-on simplifier la macro ?

    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
    Sub Macro2()
    '
    ' Macro2 Macro
    '
     
    '
        Columns("AK:AK").Select
        Selection.Insert Shift:=xlToRight
        Selection.Insert Shift:=xlToRight
        Columns("AK:AL").Select
        Range("AL1").Activate
        Selection.NumberFormat = "m/d/yyyy"
        Range("AK2").Select
        ActiveCell.FormulaR1C1 = _
            "=VLOOKUP(RC[-8],'[bidule.xlsx]BAL'!R2C28:R1904C30,3,FALSE)"
        Range("AK2").Select
        Selection.AutoFill Destination:=Range("AK2:AK1895")
        Range("AK2:AK1895").Select
        Range("AL2").Select
        ActiveCell.FormulaR1C1 = _
            "=VLOOKUP(RC[-9],'[bidule.xlsx]BAL'!R2C28:R1904C31,4,FALSE)"
        Range("AL2").Select
        Selection.AutoFill Destination:=Range("AL2:AL1895")
        Range("AL2:AL1895").Select
        Range("AK2").Select
    End Sub

  2. #2
    Membre Expert Avatar de Gado2600
    Homme Profil pro
    Développeur Office VBA
    Inscrit en
    Mai 2013
    Messages
    909
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur Office VBA

    Informations forums :
    Inscription : Mai 2013
    Messages : 909
    Par défaut
    Bonjour,

    Ta question est plutôt : "L'enregistreur de macro me donne ça. Comment le mettre au propre ?".
    Premier point : utilisation de variables pour les sheets pour un code plus sûr et plus clair
    Second point : les .select sont inutiles et générateurs d'erreur donc, il vaut mieux avoir du :
    plutôt que du :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    range("A1").select
    selection.value = 1
    Troisième point : retirer les lignes complètement inutiles (comme les double select)

    Cordialement,

  3. #3
    Rédacteur
    Avatar de Philippe Tulliez
    Homme Profil pro
    Formateur, développeur et consultant Excel, Access, Word et VBA
    Inscrit en
    Janvier 2010
    Messages
    13 176
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Formateur, développeur et consultant Excel, Access, Word et VBA

    Informations forums :
    Inscription : Janvier 2010
    Messages : 13 176
    Billets dans le blog
    53
    Par défaut
    Bonjour,
    En premier lieu, utiliser les objets feuille, colonne, cellule directement plutôt que d'utiliser les méthodes Select, Activate ainsi que l'objet Selection. C'est parfaitement inutile et ralentit l'exécution du programme.
    Ensuite pour éviter les problèmes préciser la filiation complète de l'objet Range (Classeur + feuille).
    Et encore, pour entrer une formule sur un ensemble de cellules, il n'est pas nécessaire d'utiliser la méthode AutoFill
    Exemple pour la formule =A2*B2 qui sera appliquée sur la plage C2:C1000
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ThisWorkbook.Worksheets("Feuil1").Range("C2:C1000").Formula = "=A2*B2"
    Ceci écrit en vitesse sans avoir tout lu
    Philippe Tulliez
    Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément. (Nicolas Boileau)
    Lorsque vous avez la réponse à votre question, n'oubliez pas de cliquer sur et si celle-ci est pertinente pensez à voter
    Mes tutoriels : Utilisation de l'assistant « Insertion de fonction », Les filtres avancés ou élaborés dans Excel
    Mon dernier billet : Utilisation de la fonction Dir en VBA pour vérifier l'existence d'un fichier

  4. #4
    Membre confirmé
    Homme Profil pro
    Architecte de base de données
    Inscrit en
    Mars 2015
    Messages
    123
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Deux Sèvres (Poitou Charente)

    Informations professionnelles :
    Activité : Architecte de base de données

    Informations forums :
    Inscription : Mars 2015
    Messages : 123
    Par défaut
    J'ai trouvé la solution pour la simplifier merci de votre temps.
    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
    Sub recherchev()
     
        'création de colonne au format date
        Columns("AK:AK").Select
        Selection.Insert Shift:=xlToRight
        Selection.Insert Shift:=xlToRight
        Columns("AK:AL").Select
        Selection.NumberFormat = "m/d/yyyy"
     
        'recherchev des date d'abonnement
        Range("C2").Select
    Do While ActiveCell.Value <> ""
         ActiveCell.Offset(0, 34).Select
         ActiveCell.FormulaR1C1 = "=VLOOKUP(RC[-8],'[bidule.xlsx]BAL'!R2C28:R1904C30,3,FALSE)"
         ActiveCell.Offset(1, -34).Select
     
     Loop
     
         Range("C2").Select
    Do While ActiveCell.Value <> ""
         ActiveCell.Offset(0, 35).Select
         ActiveCell.FormulaR1C1 = "=VLOOKUP(RC[-9],'[bidule.xlsx]BAL'!R2C28:R1904C31,4,FALSE)"
         ActiveCell.Offset(1, -35).Select
     
     Loop
     
    End Sub
    Pouvez vous me dire si elle est encore à améliorer ?

  5. #5
    Rédacteur
    Avatar de Philippe Tulliez
    Homme Profil pro
    Formateur, développeur et consultant Excel, Access, Word et VBA
    Inscrit en
    Janvier 2010
    Messages
    13 176
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Formateur, développeur et consultant Excel, Access, Word et VBA

    Informations forums :
    Inscription : Janvier 2010
    Messages : 13 176
    Billets dans le blog
    53
    Par défaut Il n’est pire sourd que celui qui ne veut pas entendre
    Bonjour,
    Pouvez vous me dire si elle est encore à améliorer ?
    Il y a des fois c'est exaspérant d'essayer d'aider quelqu'un.
    As-tu lu les réponses faites ?
    Manifestement pas.
    Nous sommes deux à t'avoir dit de ne pas utiliser les Select, Selection, etc.
    Je t'ai écrit aussi de placer ta formule directement sur l'ensemble de la plage concernée.
    Philippe Tulliez
    Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément. (Nicolas Boileau)
    Lorsque vous avez la réponse à votre question, n'oubliez pas de cliquer sur et si celle-ci est pertinente pensez à voter
    Mes tutoriels : Utilisation de l'assistant « Insertion de fonction », Les filtres avancés ou élaborés dans Excel
    Mon dernier billet : Utilisation de la fonction Dir en VBA pour vérifier l'existence d'un fichier

  6. #6
    Invité
    Invité(e)
    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
    Sub recherchev()
     
        'création de colonne au format date
        With Columns("AK:AL")
            .Insert Shift:=xlToRight
            .NumberFormat = "m/d/yyyy"
        End With
        'recherchev des date d'abonnement
    Dim I As Long
    With Range("C2")
        Do While .Offset(I).Value <> ""
            .Offset(I, 34).FormulaR1C1 = "=VLOOKUP(RC[-8],'[bidule.xlsx]BAL'!R2C28:R1904C30,3,FALSE)"
            .Offset(I, 35).FormulaR1C1 = "=VLOOKUP(RC[-9],'[bidule.xlsx]BAL'!R2C28:R1904C31,4,FALSE)"
            I = I + 1
         Loop
    End With
    End Sub

  7. #7
    Membre confirmé
    Homme Profil pro
    Architecte de base de données
    Inscrit en
    Mars 2015
    Messages
    123
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Deux Sèvres (Poitou Charente)

    Informations professionnelles :
    Activité : Architecte de base de données

    Informations forums :
    Inscription : Mars 2015
    Messages : 123
    Par défaut
    Merci rdurupt pour votre simplification. Cependant, le format date ne fonctionne cela me parait bizarre...

  8. #8
    Invité
    Invité(e)
    Par défaut
    autant pour moi!
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    Columns("AK:AL").Insert Shift:=xlToRight
    Columns("AK:AL").NumberFormat = "m/d/yyyy"

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

Discussions similaires

  1. [XL-2007] Simplifier une macro
    Par INFINITY100 dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 08/05/2015, 17h06
  2. [XL-2007] Je cherche à simplifier une macro
    Par INFINITY100 dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 06/05/2015, 04h55
  3. [XL-2010] Simplifier une macro
    Par Ardiden31 dans le forum Macros et VBA Excel
    Réponses: 12
    Dernier message: 14/04/2015, 14h14
  4. [XL-2003] Meme tache a effectuer sous une macro (possibilité de simplifier ?)
    Par teddy72000 dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 24/02/2011, 01h49
  5. {VBA Excel} Simplifier une macro avec une copie
    Par Thomas69 dans le forum Macros et VBA Excel
    Réponses: 7
    Dernier message: 21/06/2007, 14h38

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