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)
Ensuite se déclenchement un évenement pour colorer une partie du texte (celle entre parenthèse) et ajouter une formule au planning.
Toutes les idées pour améliorer sont les bienvenues.
Merci,
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,