Optimisation code VBA

Bonjour,

J'ai un fichier Excel ou l'on crée à chaque fois une feuille pour un "dossier client"

La feuille Historique permet de récupérer quelques informations sur chaque "dossier client" cellule en jaune

Je ne suis pas un expert en VBA et je pense que le code de recherche pourrais être optimisé ?

Autre petit soucis quand mon ma feuille est Historique n'est pas en dernière position j'ai une ligne vide. Autre possibilité de code la boucle FOR ?

25historique.xlsm (68.72 Ko)

code vba :

Sub Macro6()
Worksheets("02 - Historique").Range("A:E").Clear
For K = 1 To Worksheets.Count
If Not (Worksheets(K).Name = "02 - Historique" Or _
Worksheets(K).Name = "Param") Then
'Worksheets("02 - Historique").Cells(k, 1) = Worksheets(k).Name
Worksheets("02 - Historique").Cells(K, 1).Hyperlinks.Add Anchor:=Worksheets("02 - Historique").Cells(K, 1), Address:="", SubAddress:=Worksheets(K).Name & "!b2", TextToDisplay:=Worksheets(K).Name
Worksheets("02 - Historique").Cells(K, 2) = Worksheets(K).Range("H7").Value
Worksheets("02 - Historique").Cells(K, 3) = Worksheets(K).Range("V7").Value
Worksheets("02 - Historique").Cells(K, 4) = Worksheets(K).Range("V8").Value
Worksheets("02 - Historique").Cells(K, 5) = Worksheets(K).Range("L27").Value
End If
Next K
Worksheets("02 - Historique").Select
Range("A1").Select
Selection.EntireRow.Insert , CopyOrigin:=xlFormatFromLeftOrAbove
Range("A1").Select
ActiveCell.FormulaR1C1 = "Lien vers Feuille "
Range("B1").Select
ActiveCell.FormulaR1C1 = "Désignation "
Range("C1").Select
ActiveCell.FormulaR1C1 = "Date "
Range("D1").Select
ActiveCell.FormulaR1C1 = "Emetteur "
Range("E1").Select
ActiveCell.FormulaR1C1 = "Cause "
Columns("A:E").Select
Selection.EntireColumn.AutoFit
Selection.AutoFilter
ActiveWorkbook.Save
Range("A1").Select
End Sub

Bonjour Seb111,

La ligne vide est liée au fait que tu utilises la même variable K pour identifier la feuille client et le n° de la ligne à écrire dans l'historique. Positionnes la feuille "Param" en 2ème position après "02 - Historique" et tu auras 2 lignes vides.

Le fichier joint contient un 1er niveau d'optimisation mais pour l'historisation il serait plus intéressant d'utiliser un tableau structuré et la question que je me pose : pourquoi reconsolider toutes les feuilles client à chaque traitement ?

Cdlt,

Cylfo

Bonjour Cylfo,

Merci pour tes corrections de code.
J'ai un soucis avec l'autofiltre. Il fonctionne 1 fois sur 2 .

Pour la reconsolidation des données. Si je fais une comparaison sur le nom des feuilles et que je modifie la cause je risque d'être avec des données erronées.
Le tableau structuré peut être gérer avec des nouvelles feuilles ?

Re,

Pour le filtre, remplace la ligne de code .AutoFilter par If Worksheets("02 - Historique").AutoFilter Is Nothing Then .AutoFilter .

Pour la comparaison sans tenir compte de la casse, tu peux au choix :

  • Ajouter en tête du module l'option Option Compare Text qui s'appliquera à tout le module
  • Faire une comparaison en majuscules If UCase(VarMachin) = UCase(VarTtruc) Then te permet de comparer en majuscules le contenu des variables VarMachin et Vartruc.

Pour le tableau structuré : Oui mais le code est à adapter, par exemple la ligne de code de vidage des données :

With Worksheets("02 - Historique")
    .Range("A2:E" & .Range("A2").End(xlDown).Row).Clear

deviendrait (en imaginant que le TS se nomme THisto)

With Worksheets("02 - Historique").ListObjects("THisto")
    If .ListRows.Count > 0 Then .DataBodyRange.Delete

et il faudrait aussi modifier l'écriture des lignes dans le tableau.

Cdlt,

Cylfo

Rechercher des sujets similaires à "optimisation code vba"