hello,
houla 2300 lignes de code pour une procédure cela fait "exploser" le visual basic et c'est pour cela que tu as le message :
erreur de compilation procédure trop longue
tout ceci peut ête simplifié en utilisant des boucles.
Si j'ai bien compris tu veux sur la carte mettre une couleur suivant la personne affectée à un département.
Pour réaliser ceci je te propose :
1 - on crée un dictionnaire avec les noms des personnes qui affecte une couleur à chaque personne (la couleur du fond de la cellule dans l'endroit où l'on trouve la liste des personnes (
I5 à
I8 de la feuille département
2 - on balaie tous les départements (dans la feuille départements ligne 3 à 98) et en fonction du nom de la personne affectée au département on colore dans la feuille
Carte la forme du département avec la couleur affectée à la personne.
Pour utiliser un dictionnaire (dictionary) en VBA il faut ajouter la bibliothèque
Microsoft Scripting Runtime aux références dans l'Editeur Visual Basic (menu
Outils/Références)
Le code n'est plus trop long
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
| Sub MaProcColoriage()
Dim dict As dictionary
Set dict = New dictionary
Dim Forme, Nom As String
' on crée un dictionnaire pour retrouver la couleur à utiliser par personne
For i = 5 To 8
dict.Item(Sheets("Départements").Range("I" & i).Value) = Sheets("Départements").Range("I" & i).Interior.Color
Next
For i = 3 To 98
Nom = Sheets("Départements").Range("D" & i) ' nom affecté au départeement
Forme = Sheets("Départements").Range("E" & i) ' forme correspondant au département
Sheets("Carte").Shapes(Forme).Fill.ForeColor.RGB = dict.Item(Nom) ' couleur affectée au nom
Sheets("Carte").Shapes(Forme).Fill.Visible = msoTrue
Sheets("Carte").Shapes(Forme).Fill.Solid
Next
End Sub |
et voici ce que cela donne :
Pièce jointe 214566
Ami calmant, J.P
Partager