Optimisation de code VBA

Bonjour,

Je boss actuellement sur un fichier excel pas très compliqué mais qui a été utilisé par des collaborateurs à tour de rôle, par conséquent le code n'est pas optimisé,

l'enregistreur de macro a permis par ci par là d'ajouter quelques lignes mais au fond c'est très déstructuré ce qui engendre souvent des erreurs d'exécution.

Exemple :

'Tableau coisé dynamique

ThisWorkbook.Sheets("TCD").Range("B1:C10000").Select
    ActiveWorkbook.PivotCaches.Create(SourceType:=xlDatabase, SourceData:= _
        "ListeCompo!R1C2:R515C3", Version:=xlPivotTableVersion10).CreatePivotTable _
        TableDestination:="TCD!R7C14", TableName:="Tableau croisé dynamique10", _
        DefaultVersion:=xlPivotTableVersion10
    Sheets("TCD").Select
    Cells(7, 14).Select
    With ActiveSheet.PivotTables("Tableau croisé dynamique10").PivotFields("ref")
        .Orientation = xlRowField
        .position = 1
    End With
    ActiveSheet.PivotTables("Tableau croisé dynamique10").AddDataField ActiveSheet. _
        PivotTables("Tableau croisé dynamique10").PivotFields("Qté"), "Nombre de Qté", _
        xlCount
    With ActiveSheet.PivotTables("Tableau croisé dynamique10").PivotFields( _
        "Nombre de Qté")
        .Caption = "Somme de Qté"
        .Function = xlSum
    End With
    With ActiveSheet.PivotTables("Tableau croisé dynamique10").PivotFields("ref")
        .PivotItems("(blank)").Visible = False
    End With
    Range("N9").Select
    With ActiveSheet.PivotTables("Tableau croisé dynamique10")
        .ColumnGrand = False
        .RowGrand = False
    End With
    Range("N9:O10000").Select
    Selection.Copy
    Sheets("Ordre").Select
    Range("E2").Select
    ActiveSheet.Paste
    

Lors de la création du TCD, le compilateur bloque dessus dès la première ligne "Objet Select de la classe range a échoué..."

Est ce que quelqu'un peut me dire comment éviter toutes ces erreurs et optimiser/simplifier le code pour d'une part augmenter la rapidité d'exécution et d'autre parts facilité la lisibilité.

J'ai ajouté une procédure en fin de code, j'ai essayais de faire ça proprement. N'hésitez pas à dire ce que vous en pensez. Toute critique est bonne à prendre.

Cordialement .

Fichier: https://www.cjoint.com/c/EHsmGrbjIVM

Si je lance fusion(), il coince ici

ActiveSheet.PivotTables("Tableau croisé dynamique10").PivotSelect "", xlDataAndLabel, True

il faut dire aussi que le TCD n'existe pas !

Merci Steelson de l’intérêt que tu porte à ma discussion,

il faut dire aussi que le TCD n'existe pas !

Oui effectivement, ce code n'est pour le coup vraiment pas optimisé.

C'est un tout petit peu plus complexe que ça en réalité.

Le TCD est créé un peu plus bas. Pour lancer l'exécution du code. J'ai tendance à mettre en commentaire les lignes qui plantent pour permettre la création de ce dernier.

Lors de la seconde exécution je dé-commente les lignes précédemment commentées.

Le TCD n'étant pas supprimé après sa création, on peut donc supposé qu'il est encore présent après la première exécution.

Encore une fois j'ai conscience que ce n'est pas des manières de faire. Mais j'ai récupéré ce fichier tel quel et j'ai vraiment du mal à m'y retrouver. C'est donc pour cette raison que je fais appel aux experts excel.

Pour en revenir au code, j'ai repéré qu'il y a beaucoup de objet.Activate ou objet.Select. Certaines fois je ne vois pas l’intérêt de ces lignes. Parfois le code à même du mal a comprendre ou il en est, quelle feuille? quelle plage de quelle feuille?

Y a-t-il une méthode pour palier à ces différents problèmes ?

Rechercher des sujets similaires à "optimisation code vba"