Optimisation d'une formule d'insertion de ligne VBA avec .Select
Bonjour à tous!
Je commence à découvrir le VBA dans Excel et dans l'un de mes fichiers une macro toute simple est devenue très lente par rapport à sa complexité.
J'ai effectué quelques recherches sur le web et je pense avoir trouvé la ligne problématique qui serait en fait liée au ".Select"
C'est un fichier de comptabilité et cette macro me permet d'ajouter une ligne à un tableau
Sub Transfert_ajout()
Rows("12:12").Select
Selection.Insert Shift:=xlDown, CopyOrigin:=xlFormatFromLeftOrAbove
Range("D13:o13").Select
Selection.AutoFill Destination:=Range("D12:o13"), Type:=xlFillDefault
Range("g12:h12").ClearContents
Range("j12:l12").ClearContents
Range("d12").ClearContents
Range("o12").ClearContents
Rows("12:12").EntireRow.AutoFit
End SubY a-t-il quelqu'un qui serait capable de me proposer une alternative d'écriture pour arriver au même résultat ? J'ai aussi sur un autre onglet du même fichier un code similaire. Ce dernier s'effectue en 1 seconde, alors que le premier passage s'effectue en 16 secondes.
Autre code sur le même fichier
Sub Insertion()
Rows("12:12").Select
Selection.Insert Shift:=xlDown, CopyOrigin:=xlFormatFromLeftOrAbove
Range("B13:m13").Select
Selection.AutoFill Destination:=Range("B12:m13"), Type:=xlFillDefault
Range("B12:d12").Select
ActiveCell.FormulaR1C1 = ""
Range("d12").ClearContents
Range("h12").ClearContents
Range("g12").ClearContents
Range("m12").ClearContents
Range("l12").ClearContents
Range("c12").ClearContents
Rows("12:12").EntireRow.AutoFit
End SubEdit modo : code mis entre balises
Un grand merci d'avance.
Julien
P.S. Lors de l'ajout d'une ligne certaine colonne doivent rester des formules et d'autres des cellules pour entrer de l'information. D'oû l'utilisation peut-être excessive du ".ClearContents". Mais c'est la seule façon j'ai réussi à arriver à mes fins avec mes connaissances actuelles.
Bonjour Julien et
Une petite présentation ICI serait la bienvenue
Si vous ne l'avez pas encore fait, je vous invite à lire la charte du forum [A LIRE AVANT DE POSTER]
qui vous aidera dans vos demandes et réponses sur ce forum et notamment :
- Joignez (si possible) un fichier pour augmenter vos chances d'obtenir de l'aide en cliquant sur le bouton Fichier de l'éditeur. Si votre fichier est trop lourd ou contient des données personnelles, créez une version allégée de votre fichier avec juste assez d'informations pour permettre de comprendre votre problème. Dans tous les cas, ne postez JAMAIS de fichiers avec des informations personnelles ou confidentielles (cet utilitaire peut vous aider à les retirer).
et
- Pour plus de lisibilité, utilisez le bouton
pour insérer vos codes VBA (et si possible aussi pour vos formules Excel).
Merci de votre participation et de votre compréhension
En ce qui concerne votre problématique, cela ne vien pas de ces quelques lignes de code
A+
Bonjour Bruno,
Je suis désolé si mon dernier commentaire n'était pas parfait. Je vais avec plaisir prendre connaissance des méthodes du Forum.
Pour ce qui est du fichier, il y a beaucoup d'éléments confidentiels notamment dans des noms de plage, listes déroulantes, etc. Donc ce que j'ai fais c'est supprimer 90% du fichier et anonymisé les données restantes qui sont en lien direct avec la macro. Le fichier contient donc beaucoup de cellules avec des erreurs, mais elles ne devraient pas avoir d'impact.
Cependant, la macro est toujours lente, alors le problème doit être dans les onglets liées à celle-ci j'imagine. Dans l'onglet "Transfert' il y a un bouton pour activer la macro.
Merci encore pour ton aide.