Macro couleur de formes

Résolu
Gui -  
Le Pingou Messages postés 12275 Date d'inscription   Statut Contributeur Dernière intervention   -
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

35 réponses

  • 1
  • 2
Résumé de la discussion

Extension de la macro existante pour colorier deux freeforms représentant des cartes de France selon les valeurs mensuelles, en ajoutant une deuxième carte nommée différemment et en conservant le même mode. Des réponses initiales ont demandé un exemple ou fichier pour diagnostiquer et des conseils pour réorganiser le code afin de rendre le déclenchement plus ciblé. La solution propose de centraliser la logique dans le module Tableau de bord, de transformer les fonctions en Sub et de les placer dans un module dédié, nommé lepingou, OLD conservant l'ancien code. En complément, un fichier adapté avait été partagé comme exemple, et l'approche montre que l'essentiel concerne le ciblage des zones et la gestion des noms des shapes pour la seconde carte.

Généré automatiquement par IA
sur la base des meilleures réponses
  1. Le Pingou Messages postés 12275 Date d'inscription   Statut Contributeur Dernière intervention   1 477
     
    Bonjour,
    Sans le fichier qui si rattache c'est pratiquement impossible de trouver ou il y a une faute dans la procédure. Pouvez-vous mettre le fichier sur https://www.cjoint.com/ et poster le lien ?
    0
  2. Guillaume
     
    Merci d'avance.

    http://cjoint.com/?3EvndVyVip7

    Cordialement
    0
  3. Le Pingou Messages postés 12275 Date d'inscription   Statut Contributeur Dernière intervention   1 477
     
    Bonjour,
    Merci pour le fichier.
    Je n'ai encore pas trouvé comment le faire fonctionner ... les deux boutons sur la feuille [Tableau de bord] ne provoquent qu'une erreur ... !
    En cherchant dans le code je ne trouve pas non plus les macros que vous avez montrées dans votre premier message... !
    Que dois-je faire... !

    En marge, est-ce que vous êtes "Guillaume" ou "Gui" ??
    0
  4. Guillaume
     
    rebonjour,

    Oui pardon pour le pseudo, il s'agit bien de la même personne.

    Les copies des codes sont dans la page Thisworkbook de VBA.

    Concernant les 2 boutons qui génèrent une erreur c'est normal, vous n'avez ici qu'un extrait de la base et j'ai seulement oublié de supprimer cette zone.
    Le seul bouton qui m'intéresse est le choix multiple de mois pour animer les cartes selon le mois sélectionné.

    Je vous renvoie le lien avec la base corrigée.

    Merci d'avance pour votre aide.
    0
  5. Vous n’avez pas trouvé la réponse que vous recherchez ?

    Posez votre question
  6. Guillaume
     
    http://cjoint.com/data3/3Evr0aMtTIH.htm
    0
  7. gbinforme Messages postés 14930 Date d'inscription   Statut Contributeur Dernière intervention   4 744
     
    bonjour Gui llaume, Le Pingou,

    Private Sub Workbook_SheetChange(ByVal Sh As Object, ByVal Target As Range) 


    Ceci est une macro événementielle dans Thisworkbook.

    Si tu rajoutes celle-ci :

    Private Sub Workbook_SheetChange2(ByVal Sh As Object, ByVal Target As Range) 

    elle n'a aucune chance de se lancer car elle n'est pas connue d'excel en tant qu'événementielle.

    Si tu veux la faire fonctionner il faut l'inclure dans la première et faire en sorte que le processus fonctionne correctement.
    0
    1. Le Pingou Messages postés 12275 Date d'inscription   Statut Contributeur Dernière intervention   1 477
       
      Bonjour gbinforme,
      Merci pour l'information, je l'avais déjà constaté ...
      Salutations
      Le Pingou
      0
  8. Le Pingou Messages postés 12275 Date d'inscription   Statut Contributeur Dernière intervention   1 477
     
    Bonjour,
    Merci pour le supplément d'information.
    La réponse va suivre, patience.
    Salutations
    Le Pingou
    0
  9. Le Pingou Messages postés 12275 Date d'inscription   Statut Contributeur Dernière intervention   1 477
     
    Bonjour,
    Contrôler pour voir si c'est comme vous le désirez : https://www.cjoint.com/?3EvvDvb6iCH
    Note : je n'ai pas trouvé de code pour renseigner les [TextBox1] à [TextBox10] !!
    Je ferai la correction définitive dès votre réponse.
    0
  10. Guillaume
     
    Bonjour,

    Un grand merci dans l'idée c'est ce que je recherche. Par contre pensez vous qu'il est possible d'organiser les couleurs des régions comme les fleches ? Cad la couleur en fonction du mois sélectionné.

    j'ai d'ailleurs préparé les noms des flèches pour le tableau de droite pour vous faciliter la tache. Veuillez trouver ci dessous le nouveau tableau

    http://cjoint.com/?3Ewj5TYR0f3

    encore merci et bon courage
    0
  11. Le Pingou Messages postés 12275 Date d'inscription   Statut Contributeur Dernière intervention   1 477
     
    Bonjour,
    Merci pour l'information.
    Votre fichier est presque terminé, je vais comparer avec ces nouvelles informations (Par contre pensez-vous qu'il est possible d'organiser les couleurs des régions comme les flèches ? Cad la couleur en fonction du mois sélectionné) ... !
    J'ai par contre 2 questions :
    La procédure [Private Sub Workbook_SheetChange(...)] n'a pas de contrôle sur l'origine du déclenchement (soit le changement de mois dans la feuille [Tableau de bord]) d'où chaque fois que vous modifier une cellule de n'importe quelles feuilles la procédure est exécutée inutilement ... !
    Pourquoi ne pas utiliser la procédure [Private Sub Worksheet_Change(ByVal Target As Range)] placé directement dans le module de la feuille concernée [Tableau de bord] ... !
    0
  12. Le Pingou Messages postés 12275 Date d'inscription   Statut Contributeur Dernière intervention   1 477
     
    Bonjour,
    Pouvez-vous contrôler le nouveau lien car cela ne fonctionne pas ?
    Merci.
    0
  13. Le Pingou Messages postés 12275 Date d'inscription   Statut Contributeur Dernière intervention   1 477
     
    Bonjour,
    Dans l'attente de votre réponse aux 2 messages précédents, je vous laisse la découverte : https://www.cjoint.com/?3EwloXAg47t
    0
  14. Guillaume
     
    Bonjour,

    Je viens de voir votre super travail, du coup vous n'avez plus besoin de mon lien.

    Vous avez raison nous pourrions limiter le déclenchement de la macro à la feuille concernée.

    Cordialement
    0
  15. Le Pingou Messages postés 12275 Date d'inscription   Statut Contributeur Dernière intervention   1 477
     
    Bonjour,
    Merci, je vous prépare une version dans ce sens.
    Si possible en fin de journée.
    0
  16. Le Pingou Messages postés 12275 Date d'inscription   Statut Contributeur Dernière intervention   1 477
     
    Bonjour,
    Concernant l'attribution de la couleur, vous utilisez le taux de fréquence de la colonne 14 [N], est-ce correct ... ou faut-il prendre le taux cumulé du mois concerné ... ?
    Merci de votre réponse.
    0
  17. Guillaume
     
    Bonsoir, effectivement je cherche a prendre le taux de fréquence cumulé du mois concerné
    0
  18. Le Pingou Messages postés 12275 Date d'inscription   Statut Contributeur Dernière intervention   1 477
     
    Bonjour,
    Merci pour les réponses.
    Je vous laisse essayer et contrôler l'exactitude des valeurs.
    Votre fichier adapté : https://www.cjoint.com/?3Ewwbo7rMiX
    Note : la procédure principale est dans le module de la feuille [Tableau de bord], les 3 `'Function `' (qui en fait n'en sont pas...) sont transformées en procédure [Sub()] et placées dans le module [lepingou]
    Le module [ThisWorkbook] est vide et les anciennes procédures sont dans le module [OLD].
    0
  19. Guillaume
     
    Bonjour,

    C'est exactement ce que j'attendais merci beaucoup pour votre aide.
    Je termine le tableau de bord et reviens vers vous si jamais j'ai un problème.

    Encore merci et une excellente journée à vous.

    Cordialement
    0
  20. Le Pingou Messages postés 12275 Date d'inscription   Statut Contributeur Dernière intervention   1 477
     
    Bonjour,
    Merci pour l'information.
    Note : la cellule pour le choix du mois est nommée [chxmois], ce nom est utilisé comme contrôle dans la procédure principale .... Pensez-y pour votre fichier de travail.
    0
  • 1
  • 2