Bonjour le forum,
Je débute dans VBA (2 mois d'utilisation). J'ai pas mal bouquiné et passé du temps sur les forums pour bien comprendre le fonctionnement de VBA.
J'ai créé une macro dont le code est ci-dessous. Cependant, l'utilisation de la macro est particulièrement long. Je souhaiterais savoir s'il est possible de l'alléger ou de l'écrire différemment pour accélérer les calculs (Temps d'exécution moyen: 2min). Voici la macro:
Je vous explique comment elle fonctionne:
En cellule C3, il y a une liste déroulante avec le nom des fournisseurs dont les produits sont à étudier. Lorsque je change de nom, la macro démarre grâce à :
Le reste est détaillé au fur et à mesure du code.
Honnêtement, je ne vois pas comment simplifier tout ca. Un coup de main est bienvenue. Malheureusement, je ne peux pas poster de fichier pour vous montrer car les données sont confidentielles.
Merci pour votre aide,
Marral
EDIT: Je précise que la macro Recuperation_80 s'exécute parfaitement et le traitement est rapide.
Je débute dans VBA (2 mois d'utilisation). J'ai pas mal bouquiné et passé du temps sur les forums pour bien comprendre le fonctionnement de VBA.
J'ai créé une macro dont le code est ci-dessous. Cependant, l'utilisation de la macro est particulièrement long. Je souhaiterais savoir s'il est possible de l'alléger ou de l'écrire différemment pour accélérer les calculs (Temps d'exécution moyen: 2min). Voici la macro:
Code:
Sub PU_Code()
' *** Définition des données
Dim Mafeuille As Worksheet, FeuilleAnalyse As Worksheet
Dim CelluleDepart As Range, CelluleFin As Range, DetectionCode As Range, DetectionNombrePU As Range
Dim LigneFin As Long, Annee As Long
Dim Compteur As Integer
Dim ValeurProduit(400) As Variant, Valeur(10) As Variant, PUMoyen As Variant
Dim NomFournisseur As String
Application.ScreenUpdating = False
' *** Récupération du nom du fournisseur à traiter
Set Mafeuille = ThisWorkbook.Worksheets("Specific Analysis")
Set FeuilleAnalyse = ThisWorkbook.Worksheets("DATABASE")
' *** Récupération du nom des produits avant recherche données dans Feuille d'Analyse
With Mafeuille
For Annee = 4 To 10 Step 2
Valeur(Annee) = .Cells(5, Annee)
Next Annee
NomFournisseur = .Cells(3, 3)
Set CelluleDepart = .Cells(7, 3)
Set CelluleFin = .Cells(.Rows.Count, 3)
If IsEmpty(CelluleFin.Value) Then
Set CelluleFin = CelluleFin.End(xlUp)
End If
LigneFin = CelluleFin.Row
For Compteur = 7 To LigneFin
ValeurProduit(Compteur) = .Cells(Compteur, 3)
Next Compteur
End With
' *** Récupération des Codes produit
FeuilleAnalyse.Activate
Selection.AutoFilter field:=5
Selection.AutoFilter field:=14
Selection.AutoFilter field:=24
Selection.AutoFilter field:=5, Criteria1:=NomFournisseur
With FeuilleAnalyse
For Compteur = 7 To LigneFin
Set DetectionCode = .Cells.Find(ValeurProduit(Compteur))
Mafeuille.Cells(Compteur, 2).Value = DetectionCode.Offset(, -16).Value
Next Compteur
End With
Mafeuille.Activate
' *** Récupération des Prix Unitaires moyens par Année
FeuilleAnalyse.Activate
With FeuilleAnalyse
Selection.AutoFilter field:=14
Selection.AutoFilter field:=24
For Annee = 4 To 10 Step 2
For Compteur = 7 To LigneFin
If Mafeuille.Cells(Compteur, Annee) <> "" Then
Selection.AutoFilter field:=14, Criteria1:=Valeur(Annee)
Selection.AutoFilter field:=24, Criteria1:=ValeurProduit(Compteur)
Set DetectionNombrePU = .Cells(.Rows.Count, 18)
If IsEmpty(DetectionNombrePU.Value) Then
Set DetectionNombrePU = DetectionNombrePU.End(xlUp)
End If
PUMoyen = Application.Subtotal(1, [R2:R4000])
Mafeuille.Cells(Compteur, Annee + 1).Value = PUMoyen
Else
End If
Next Compteur
Next Annee
End With
Application.ScreenUpdating = True
End Sub
Je vous explique comment elle fonctionne:
En cellule C3, il y a une liste déroulante avec le nom des fournisseurs dont les produits sont à étudier. Lorsque je change de nom, la macro démarre grâce à :
Code:
Private Sub Worksheet_Change(ByVal Target As Range)
If Target.Address(0, 0) = "C3" Then
Call Recuperation_80
Call PU_Code
End If
End Sub
Le reste est détaillé au fur et à mesure du code.
Honnêtement, je ne vois pas comment simplifier tout ca. Un coup de main est bienvenue. Malheureusement, je ne peux pas poster de fichier pour vous montrer car les données sont confidentielles.
Merci pour votre aide,
Marral
EDIT: Je précise que la macro Recuperation_80 s'exécute parfaitement et le traitement est rapide.