XL 2010 VBA - CODE Trés long - optimisation

  • Initiateur de la discussion Initiateur de la discussion max.lander
  • Date de début Date de début

Boostez vos compétences Excel avec notre communauté !

Rejoignez Excel Downloads, le rendez-vous des passionnés où l'entraide fait la force. Apprenez, échangez, progressez – et tout ça gratuitement ! 👉 Inscrivez-vous maintenant !

max.lander

XLDnaute Occasionnel
Bonjour,

j'essaye d'afficher depuis une feuille qui sert de base de donnée un planning
Mais l'exécution est vraiement très lente

Le code compare le numéro de semaine saisi et la base de données avec la procédure Load_Opérateurs.
Si le test est vrai il charge en colonne A l'opérateur (j'utilise un dictionnaire pour filtrer et n'afficher qu'une fois l'opérateur)

VB:
Public Sub Load_Opérateurs()
Set mondico = CreateObject("Scripting.Dictionary") 'Initialisation du dicionnaire mon dico

Sheets("Planer").Range("A67:A103").Value = ""

Set Tableau_WPL = Feuil2.UsedRange
'Ajout des prestatires et des permanents pour qu'ils ne soit pas ajouter au tableau plus bas



x = 66

       For i = 1 To Sheets("Base WPL").Range("A" & Rows.Count).End(xlUp).Row
     
    
            If Tableau_WPL(i, 6) = Sheets("planer").Range("B4").Value Then
   
            Opérateur = Tableau_WPL(i, 1)
   
                 If Not (mondico.Exists(Opérateur)) Then     'Pour eviter les doublons, si la donnée n'existe pas encore dans le dictionnaire on l'ajoute au dictionnaire et au tableau
                                                ' on utilise cette methode de façon detournée pour alimenter le Tableau
                     x = x + 1
                     mondico.Add Opérateur, Opérateur
                     ReDim Tableau(1 To mondico.Count)
                     Tableau(mondico.Count) = Opérateur
                     Sheets("Planer").Cells(x, 1).Value = Opérateur

    
              End If
        
                  End If
                
        Next i
     
      
End Sub



Ensuite se déclenchement un évenement pour colorer une partie du texte (celle entre parenthèse) et ajouter une formule au planning.



VB:
Private Sub Worksheet_Change(ByVal Target As Range)

' Mise en forme cellule des temporaire --> ROUGE

If Not Application.Intersect(Target, Range("A57:A103")) Is Nothing And Target.Count = 1 Then
lg = Target.Row

For Each c In Range("c" & lg & ":I" & lg)
On Error Resume Next
        c.Font.ColorIndex = 1
        c.FormulaArray = _
         "=IFERROR(INDEX(Horaires_WPL,MATCH(1,(Opérateur_WPL=RC1)*(Journées_WPL=R55C),0)),"""")"


       x = InStr(c, "(")
        y = InStr(c, ")")
        c.Value = Left(c, x - 2) & Chr(10) & Right(c, Len(c) - x + 1)
        c.Characters(x, y).Font.ColorIndex = 3
    Next c
    End If

End Sub


Toutes les idées pour améliorer sont les bienvenues.

Merci,
 

Pièces jointes

Salut à tous,

Pierrejean, Gosselien merci pour votre aide celà fonctionne parfaitement !
Le temps d'éxecution n'a plus rien à voir !


Je pense que je vais conserver le code proposé par PierreJean car il englobe la mise en forme.

J'ai une dernière petite demande, en conservant le code de PierreJean, je souhaite exclure de l'affichage 4 noms systématiquement même s'ils existent en base (exemple: Lionel POL, Alexandra LAMY, Cédric M, Yohann GOURGUFF)

Une idée sur la question ?


Merci,
 
- Navigue sans publicité
- Accède à Cléa, notre assistante IA experte Excel... et pas que...
- Profite de fonctionnalités exclusives
Ton soutien permet à Excel Downloads de rester 100% gratuit et de continuer à rassembler les passionnés d'Excel.
Je deviens Supporter XLD

Discussions similaires

Réponses
2
Affichages
202
Réponses
5
Affichages
237
Réponses
4
Affichages
177
  • Question Question
Microsoft 365 worksheet_change
Réponses
29
Affichages
479
Réponses
4
Affichages
461
Réponses
3
Affichages
665
Réponses
10
Affichages
825
Retour