simplification de codes vba

mezzo40

XLDnaute Nouveau
Bonjour à tous,

je me tourne vers vous car n'étant pas un pro du VBA je "pédale" pas mal.
Après pas mal de tentatives, de recherches et de coups de mains (notamment de votre part, "membres de ce forum"),
je suis arrivé à créer mon fichier de calcul sur excel 2010.
Néanmoins, je me heurte à un temps de calcul important et à des "plantages fréquents".
Je voudrais donc simplifier mes lignes de codes pour optimiser mon fichier.
J'ai déjà fait pas mal de tentatives en m'inspirant des divers sujets du forum, mais pour un résultat nul.

Il y a selon moi deux codes qui peuvent être optimisés.
Le premier pour copier/coller avec filtre:

Selection.SpecialCells(xlCellTypeVisible).Select
Range("A1:G5000").Select
Selection.Copy
Sheets("Données Filtrées").Select
Range("A1").Select
ActiveSheet.Paste
Application.CutCopyMode = False

Le second pour réaliser un historique:

Sub historique()


Dim ws As Worksheet
For Each ws In Worksheets
If ws.Name = "Données Semaine" Then
Application.ScreenUpdating = False
ws.Activate
Range("Tableau1").Select
Selection.Copy
Rem & [a1].SpecialCells(xlCellTypeLastCell).Address).Copy
Sheets("Historique Données").Activate
Range("A65536").End(xlUp).Offset(1, 0).Select
Rem ActiveSheet.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks:=False, Transpose:=False
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
:=False, Transpose:=False
Application.CutCopyMode = False
Range("Tableau4").Select
Range("C11").Activate
Selection.RemoveDuplicates Columns:=Array(1, 2, 3, 4, _
5, 6, 7), Header:=xlYes
ActiveWorkbook.Worksheets("Historique Données").ListObjects("Tableau4").Sort. _
SortFields.Clear
ActiveWorkbook.Worksheets("Historique Données").ListObjects("Tableau4").Sort. _
SortFields.Add Key:=Range("Tableau4[[#All],[date]]"), SortOn:= _
xlSortOnValues, Order:=xlDescending, DataOption:=xlSortTextAsNumbers
With ActiveWorkbook.Worksheets("Historique Données").ListObjects("Tableau4"). _
Sort
.Header = xlYes
.MatchCase = False
.Orientation = xlTopToBottom
.SortMethod = xlPinYin
.Apply
End With
Range("A2").Select
End If
Next ws

End Sub


Merci d'avance pour vos réponses avisées qui me donneront une nouvelle fois un sacré coup de main !!!

Cordialement

Mezzo
 

Roland_M

XLDnaute Barbatruc
Re : simplification de codes vba

Bonsoir,

toujours le même problème qui revient sans cesse !
on ne construit pas un classeur avec des copier/coller ! ça ne fonctionne jamais. alors plantage, normal !
aucune structure, impossible à suivre et donc à améliorer !

tout ce code est indigeste ! personne ne cherchera à le lire, moi le premier !

tu dois joindre le classeur et demander une seule aide à la fois !
 
Dernière édition:

mezzo40

XLDnaute Nouveau
Re : simplification de codes vba

Bonjour,

en effet je comprends que ce code puisse paraître indigeste (le second surtout).
Par ailleurs pour répondre à votre post, mon classeur n'est pas construit qu'avec des copier/coller mais il est vrai que pour remplir deux feuilles j'ai utilisé cette technique. Je suis débutant en VBA et n'ai donc pas le même recul que vous( professionnel de la programmation) sur la construction de fichiers.
Néanmoins, à force de "bataillage", je suis content d'avoir pu construire un doc qui fonctionne.
Je me tournais vers vous pour m'aider à améliorer ce doc et simplifier mes codes.
J'ai lu plusieurs topics mais n'ai pas réussi à adapter cela à mon cas.
Pour le second, je comprends tout à fait,mais je pensais que pour le premier, c'était abordable pour des pro comme vous(même sans mon fichier joint).Je ne peux le joindre car trop lourd et contenant trop de données propres à l'entreprise.

Je vous remercie tout de même de m'avoir répondu et vous souhaite une bonne continuation.

A +

Mezzo
 

Discussions similaires

Réponses
3
Affichages
586
Réponses
5
Affichages
130

Statistiques des forums

Discussions
312 223
Messages
2 086 407
Membres
103 201
dernier inscrit
centrale vet