Macro couleur de formes

Résolu
Bonjour,

Je récupère une macro qui jusqu'à présent fonctionne très bien, simplement en voulant étendre son champ d'utilisation cela ne fonctionne pas. Je m'explique:
A l'origine la macro colorie une freeform (régions de France), fait apparaître des objets (flèches) en fonction de la valeur de chaque mois de l'année.

Aujourd'hui je souhaite utiliser exactement le meme mode fonctionnement mais j'ai rajouté une deuxième carte de France (les freeform sont nommées différemment) qui se colorie en fonction d'autres valeurs.

J'ai donc repris la meme macro et changé les valeurs (j'ai certainement du en oublier vu que cela ne fonctionne pas)

Est ce que quelqu'un pourrait m'aider svp en apportant les modifs à la macro ci dessous ?


Merci d'avance.


'Programmation moisTF (fonctionne)

Private Sub Workbook_SheetChange(ByVal Sh As Object, ByVal Target As Range)
Dim Mois As String
Dim i As Integer
Dim DR As String
Dim TxFreq, TxMoisEnCours, TxMoisPrec As Variant
Set wk = ActiveWorkbook
Set Source = wk.Sheets("2012")
Set param = wk.Sheets("parametrage TdB")
Set TDB = wk.Sheets("Tableau de bord")

Mois = TDB.Range("I8").Value
'régions
For i = 1 To 61

DR = Source.Cells(i, 1)

'Taux

TxFreq = Source.Cells(i + 10, 14)


'mois

For a = 2 To 13
If Source.Cells(i + 1, a) = Mois Then
TxMoisEnCours = Source.Cells(i + 10, a)
TxMoisPrec = Source.Cells(i + 10, a - 1)
End If
Next a
Couleur DR, TxFreq
Fleche DR, TxMoisEnCours, TxMoisPrec, Mois
i = i + 14
Next i

End Sub

'Programmation couleur TF (fonctionne)

Function Couleur(Région, Tx) As Integer
Set wk = ActiveWorkbook
Set Source = wk.Sheets("2012")
Set param = wk.Sheets("parametrage TdB")
Set TDB = wk.Sheets("Tableau de bord")

Select Case Tx
Case Is < param.Cells(3, 2)
Couleur = param.Cells(3, 3)
Case Is > param.Cells(4, 2)
Couleur = param.Cells(5, 3)
Case Else
Couleur = param.Cells(4, 3)
End Select

For b = 41 To 45
If param.Cells(b, 1) = Région Then
x = 2
Do While param.Cells(b, x) <> 0
nom = "Freeform " & param.Cells(b, x)
TDB.Shapes(nom).Fill.ForeColor.SchemeColor = Couleur
x = x + 1
Loop
End If
Next
End Function

'Programmation fleches TF (fonctionne)

Function Fleche(Région, TxEncours, TxPrec, MoisVal)
Set wk = ActiveWorkbook
Set Source = wk.Sheets("2012")
Set param = wk.Sheets("parametrage TdB")
Set TDB = wk.Sheets("Tableau de bord")

If MoisVal <> "JANVIER" Then
test = TxEncours - TxPrec
Select Case test
Case Is < 0
vtest = 1
Case Is > 0
vtest = 2
Case Is = 0
vtest = 3
End Select
Else
vtest = 0
End If

For b = 49 To 53
If param.Cells(b, 1) = Région Then
For y = 1 To 3
nom = param.Cells(48, y + 1) & " " & param.Cells(b, y + 1)
If y = vtest Then
TDB.Shapes(nom).Visible = True
Else
TDB.Shapes(nom).Visible = False
End If
Next y
End If
Next b
End Function


(CE QUI SUIT EST CE QUE JE SOUHAITE RAJOUTER MAIS NE FONCTIONNE PAS)

Private Sub Workbook_SheetChange2(ByVal Sh As Object, ByVal Target As Range)
Dim Mois As String
Dim i As Integer
Dim DR As String
Dim TxGrav, TxMoisEnCours, TxMoisPrec As Variant
Set wk = ActiveWorkbook
Set Source = wk.Sheets("2012")
Set param = wk.Sheets("parametrage TdB")
Set TDB = wk.Sheets("Tableau de bord")

Mois = TDB.Range("I8").Value
'régions
For i = 1 To 61

DR = Source.Cells(i, 1)

'Taux

TxGrav = Source.Cells(i + 11, 14)

'mois

For a = 2 To 13
If Source.Cells(i + 1, a) = Mois Then
TxMoisEnCours = Source.Cells(i + 11, a)
TxMoisPrec = Source.Cells(i + 11, a - 1)
End If
Next a
Couleur DR, TxGrav
Fleche DR, TxMoisEnCours, TxMoisPrec, Mois
i = i + 14
Next i
End Sub

'programmation couleur TG

Function Couleur2(Région, Tx) As Integer
Set wk = ActiveWorkbook
Set Source = wk.Sheets("2012")
Set param = wk.Sheets("parametrage TdB")
Set TDB = wk.Sheets("Tableau de bord")

Select Case Tx
Case Is < param.Cells(8, 2)
Couleur = param.Cells(8, 3)
Case Is > param.Cells(9, 2)
Couleur = param.Cells(10, 3)
Case Else
Couleur = param.Cells(9, 3)
End Select

For b = 58 To 62
If param.Cells(b, 1) = Région Then
x = 2
Do While param.Cells(b, x) <> 0
nom = "Freeform " & param.Cells(b, x)
TDB.Shapes(nom).Fill.ForeColor.SchemeColor = Couleur
x = x + 1
Loop
End If
Next
End Function





A voir également:

35 réponses

Guillaume
 
Bonsoir,

Merci j'ai pu adapter votre travail à ma base principale, tout fonctionne !!!!

Je profite de votre savoir-faire pour vous poser une nouvelle question.

Voila j'ai une autre base qui regroupe un certain nombre de dates (date "réalisation action" et date "fin de validité").
Je cherche a faire 2 choses:
1. Lorsque j'inscrit la date de réalisation: que la date de fin de validité s'affiche automatiquement en fonction d'une fréquence définie
2. Mettre en place une MFC selon l'écart entre la date de fin de validité et la date d'aujourd'hui. (exemple: fréquence de 3ans entre les 2 dates donc VERT si écart>1an; JAUNE si < date AUJOURDHUI et <1an ; ROUGE > date AUJOURDHUI.

Bien sur pour la 2nd question j'ai essayé une MFC avec formule, cela fonctionne sauf que lorsque je copie/colle des cellules extérieures ma MFC est effacée.

Dans l'espoir que vous pourrez m'aider comme précédemment, un grand merci d'avance.
0

 
Bonjour,
Avec un exemple / extrait du fichier se sera plus simple de vous proposer une solution.
Et de quelle manière : je copie/colle des cellules extérieures ma MFC ?

Salutations.
Le Pingou
0
Guillaume
 
Oui bien sur,

http://cjoint.com/?3EyjOTafnYP

Cordialement
0

 
Bonjour,
Merci.
Il me manque la réponse à ceci : Et de quelle manière : je copie/colle des cellules extérieures ma MFC ?
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question

 
Bonjour,
Petite question, la date et sa validité sont attribuées à une personne, alors pourquoi ne pas travailler directement sur la colonne [Date dernière formation] de la feuille [Feuil2] en utilisant un formulaire (UseForm] pour renseigner la date ?

Salutations.
Le Pingou
0

 
Bonjour,
Dans votre exemple en feuille 1 le délai est de + 2 ans alors je pense que ceci n'est pas correct :
. (Exemple: fréquence de 3ans entre les 2 dates donc VERT si écart>1an; JAUNE si < date AUJOURDHUI et <1an ; ROUGE > date AUJOURDHUI.
Merci de le reformuler !
0
Guillaume
 
en fait cela depend de la formation {2, 3 ou 5 ans} donc pas vraiment d'importance pour l'exemple. je les adapterai sur ma base selon les cas
0

 
Bon jour,
Merci.
J'attends toujours les réponses aux messages 25 et 26 ... !
0
Guillaume
 
Bonsoir, merci pour la relance, par contre j'ai fait une réponse à 20.06.

Je ne sais qu'elles sont les messages 25 et 26.

Je vais répondre à tous les points:
1. Il me manque la réponse à ceci : Et de quelle manière : je copie/colle des cellules extérieures ma MFC ?
. Copier manuellement (clic droit) les dates de la feuille 1 et coller manuellement (clic droit)en feuille 2.
2. a date et sa validité sont attribuées à une personne, alors pourquoi ne pas travailler directement sur la colonne [Date dernière formation] de la feuille [Feuil2] en utilisant un formulaire (UseForm] pour renseigner la date ?
. Dans notre organisation interne nous avons 2 dossier différent pour de multiples raisons, la feuille 1 est une base et la feuille 2 en est une autre.

Merci et n'hésitez pas à me relancer si vous avez la moindre question.
0

 
Bonjour,
Votre exemple et prenez soin d'appliquer le conseil de gbinforme.
https://www.cjoint.com/?3EyxPDpkFoh
0

 
Bonjour,
Dans le but d'éviter un oubli lors du copier/coller, j'ai rajouté une option via une procédure.
Votre fichier avec l'ajour : https://www.cjoint.com/?3Ezphlytn0j
0
guillaume
 
Je viens de regarder votre travail
C'est exactement ce qu'il me fallait, encore un grand merci le pingou
0
Guillaume
 
Bonjour,

Vous m'avez bien aidé pour mon tableau de bord;

Une erreur apparaît lorsque je clic sur les flèches de défilement des commentaires.

Je n'arrive pas à la corriger, pourriez vous s'il vous plait m'indiquer la démarche à suivre afin que je puisse corriger sur le tableau de bord original.

Merci d'avance.

le fichier se trouve à l'adresse ci dessous*

http://cjoint.com/?3Ftsaye6vMB

Cordialement
0

 
Bonjour,
Je regarderai en fin de journée.
0

 
Bonjour,
Modifier la procédure de la [Toupie] comme suit :
Private Sub SpinButton1_Change()
Application.EnableEvents = False
If SpinButton1.Value < (Sheets("Tableau de bord").Cells(32, 16) - 5) Then
Sheets("Tableau de bord").Cells(32, 14) = SpinButton1.Value
Else
SpinButton1.Value = SpinButton1.Value - 1
End If
Application.EnableEvents = True
End Sub
0