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
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
Dernière édition: