XL 2016 Colorer une carte a partir d'un tableau

cedric82

XLDnaute Nouveau
Bonjour a tous,

Le langage VBA est un peu compliqué pour moi pourtant j'essaie de trouver des solutions mais parfois il faut savoir demander de l'aide.

Pour mon travail, j'utilise une carte des départements (trouvé sur le net) et un tableau pour la colorer
J utilise une Macro (trouvé sur le Net et modifié selon mes connaissances) que voici :

Sub ColorMap()
Dim oSheet As Excel.Worksheet ' Feuille
Dim lLine As Long ' Numéro de ligne
Dim loShape As Shape ' Forme
Dim lColor As Long ' Couleur
' Feuille contenant la carte
Set oSheet = ThisWorkbook.Sheets("Visites")
' Désactive le remplissage de la carte
oSheet.Shapes("Groupe 192").Fill.Visible = msoFalse
' Pour chaque ligne de Visites
For lLine = oSheet.UsedRange.Row + 1 To oSheet.UsedRange.Row + oSheet.UsedRange.Rows.Count
If oSheet.Cells(lLine, 3) = " " Then lColor = RGB(255, 255, 255)
If oSheet.Cells(lLine, 3) >= 0 And oSheet.Cells(lLine, 3) < 1 Then lColor = RGB(255, 255, 255)
If oSheet.Cells(lLine, 3) >= 1 And oSheet.Cells(lLine, 3) < 50 Then lColor = RGB(204, 204, 255)
If oSheet.Cells(lLine, 3) >= 51 And oSheet.Cells(lLine, 3) < 65 Then lColor = RGB(153, 153, 255)
If oSheet.Cells(lLine, 3) >= 66 And oSheet.Cells(lLine, 3) < 80 Then lColor = RGB(51, 51, 255)
If oSheet.Cells(lLine, 3) >= 81 And oSheet.Cells(lLine, 3) <= 99 Then lColor = RGB(0, 0, 204)
If oSheet.Cells(lLine, 3) = 100 Then lColor = RGB(0, 0, 102)
If oSheet.Cells(lLine, 3) = "B-" Then lColor = RGB(32, 224, 224)

' Parcours les départements de la carte
For Each loShape In oSheet.Shapes("Groupe 192").GroupItems
' Si la forme loShape a pour nom la valeur de la première colonne (l'identifiant FR-XX)
If loShape.Name = oSheet.Cells(lLine, 1) Then
' Réactive le remplissage de la forme
loShape.Fill.Visible = True
' Type de remplissage = couleur unie
loShape.Fill.Solid
' Pas de transparence
loShape.Fill.Transparency = 0#
' Couleur de remplissage
loShape.Fill.ForeColor.RGB = lColor
' La forme a été trouvée => on sort de la boucle
Exit For
End If
Next
Next
End Sub



Aujourd'hui je voudrais pouvoir faire 2 choses,
-mettre cette carte sur une autre feuille de mon classeur tout en la gardant interactive bien sur afin de créer des pages prêtes a imprimé rapidement ( j'ai essayé longuement et je ne comprends pas pourquoi je n'y arrive pas).
-Faire une Macro que j'affecterais a un bouton qui copierait d'un tableau identique d'une autre page uniquement les lignes comportant dans la colonne Visite une donnée précise (mon test c'était "B-") en recopiant b- et en copiant 0 dans les autres afin de colorer uniquement les départements contenants cette donnée. J'espère avoir été assez clair.

Vous allez peut être me trouvé bête mais je n'ai jamais eu de cours sur Excel et j'essaie d'apprendre petit a petit.





D'avance merci pour votre aide
Capture.PNG
 
Dernière édition:
Solution
Re,

Une p'tite dernière.

Quand on clique sur un département, on affiche son numéro, son nom et sa valeur de la feuille "Visites".
Pour refermer la boite d'information, cliquer sur le bouton OK ou bien sur la touche Esc.
On n'affiche les informations que pour les départements répondant au filtre actif.

sylvanu

XLDnaute Barbatruc
Supporter XLD
Bonsoir Cedric,
Un essai en PJ pour le premier point. ( avant d'attaquer le second, il vaut mieux vérifier qu'au moins celui ci répond à votre besoin )
Il fallait rajouter la référence à la page Carte pour différencier la liste de la feuille Carte .
A tester.
( j'ai rajouté une couleur Jaune pour B+ mais uniquement pour faire des tests )
 

Pièces jointes

  • Copie de Carte France Couleur interactive 1 (003).xlsm
    400.5 KB · Affichages: 9

mapomme

XLDnaute Barbatruc
Supporter XLD
Bonjour à tous,

Une version qui colore la carte sur la feuille "Carte".
J'ai supprimé la "double boucle" dans le code puisqu'on lit directement le nom de la forme dans le tableau (pas besoin de la rechercher - on a sa référence d'après son nom).

Pour le second point, il faudrait savoir comment vous définissez les lignes à conserver. Une possibilité serait de filtrer le tableau source et de ne colorier que les lignes visibles après filtrage.
 

Pièces jointes

  • cedric82- colorier carte- v1.xlsm
    190.6 KB · Affichages: 10
Dernière édition:

cedric82

XLDnaute Nouveau
Bonjour a tous,


Merci beaucoup pour vos réponses rapides les 2 versions me vont très bien c'est vraiment parfait.


Pour le deuxième point:


J'utilise cette carte de 2 façons
la version que je vous ai transmis pour colorer en fonction de résultats entre 0 et 100
et une version où j'ai ajouté dans le code les ligne "A", "B", "C" et "D" pour colorer en fonction des lettres.

Sur cette dernière l'idée est d'avoir sur la page de la carte 4 boutons ( "A", "B", "C" et "D") pour colorer en fonction du tableau. J'ai donc essayé de créer une macro If Then qui copie mon tableau où figure les données vers celui qui colore la carte dans le style (si b3 de la feuille 2 = "A" alors b3 de la feuille 1 =" A" sinon b3 de la feuille 1 = 0) ce qui a fonctionné mais cela fonctionne juste pour une ligne même en ajoutant un If par ligne ...... Bref j'ai tout supprimer et je me fait du copier coller de 4 tableaux 😂😂😂 pour chaque lettre.

Si vous avez une solution merci d'avance
 

cedric82

XLDnaute Nouveau
Re,

Une version qui ne colore que les lignes visibles de la feuilles Visites.

On colore la carte :
  • quand on active la feuille "Carte"
  • quand on ouvre le classeur
En fait le but est de pouvoir diffuser ce classeur a des collègues en leurs laissant accès juste a la page de la carte avec les boutons d'où mon idée de créer un bouton qui copie les B en B et les autres en 0 par exemple
 

sylvanu

XLDnaute Barbatruc
Supporter XLD
Bonjour Cedric, Mapomme,
Un essai en PJ en repartant de la version de Mapomme, avec 4 macros du type :
VB:
Sub Bplus()
    Application.ScreenUpdating = False
    Sheets("Visites").Range("$A$1:$C$101").AutoFilter Field:=3, Criteria1:="B+"
    ColorMap
End Sub
La feuille Visites est masquée, accessible avec Afficher.
 

Pièces jointes

  • cedric82- colorier carte- v3.xlsm
    214 KB · Affichages: 15

cedric82

XLDnaute Nouveau
Bonjour Cedric, Mapomme,
Un essai en PJ en repartant de la version de Mapomme, avec 4 macros du type :
VB:
Sub Bplus()
    Application.ScreenUpdating = False
    Sheets("Visites").Range("$A$1:$C$101").AutoFilter Field:=3, Criteria1:="B+"
    ColorMap
End Sub
La feuille Visites est masquée, accessible avec Afficher.
Bonjour Sylvanu, Mapomme,


Merci beaucoup pour votre aide, c'est exactement le résultat attendu. Je n ai plus qu'a choisir mes couleurs et faire de la mise en page bref un grand merci pour votre rapidité.



Bonne journée et a très vite
 

cedric82

XLDnaute Nouveau
Non c'est pour moi, je change les couleurs de chaque choix dans la carte depuis colormap l'utilisateur final doit avoir accès uniquement a la page carte et verrouiller la page visites ca je sais faire.

Je vais aussi me faire 2 classeurs pour différencier mes 2 utilisations.

Je pense pouvoir m'en sortir et si j'ai d'autres questions sur ce problème je n'hésiterais pas a revenir ici . Mais vraiment merci.
 

mapomme

XLDnaute Barbatruc
Supporter XLD
Re,

L'avant dernière version de @sylvanu (que je salue ;)) avec une petite modif.
On adapte la couleur de la police (numéro des départements) en fonction de la couleur de fond pour bien les distinguer. La couleur de police est soit blanche soit noire.
 

Pièces jointes

  • cedric82- colorier carte- v4.xlsm
    194 KB · Affichages: 4
Dernière édition:

mapomme

XLDnaute Barbatruc
Supporter XLD
Re,

Une p'tite dernière.

Quand on clique sur un département, on affiche son numéro, son nom et sa valeur de la feuille "Visites".
Pour refermer la boite d'information, cliquer sur le bouton OK ou bien sur la touche Esc.
On n'affiche les informations que pour les départements répondant au filtre actif.
 

Pièces jointes

  • cedric82- colorier carte- v4b.xlsm
    200.1 KB · Affichages: 20

Discussions similaires

Réponses
0
Affichages
352

Statistiques des forums

Discussions
315 093
Messages
2 116 125
Membres
112 666
dernier inscrit
Coco0505