GNT sans publicité, site mobile, fonctionnalitées exclusives...

Colorier des cellules avec une macro et/ou avec Privatesub

Le
captain-kirk
Bonjour à tous


Je suis en train de réaliser un tableau de bord social dans le cadre d'un stage et j'aurai besoin de votre aide concernant le coloriage de cellules à l'aide d'une macro.

J'ai un tableau qui est une base de données des salariés

-La colonne E donne des informations sur le sexe de la personne : Homme ou Femme ( elle s'étend de E6 à E95)
-La colonne H donne des informations sur la catégorie socioprofessionnelle du salarié (Ouvrier, Employé, Agent de maîtrise, Cadre) (H6 à H95)
-La colonne K contient les salaires. Je voudrais mettre une couleur en fonction du sexe de la personne (bleu clair pour les hommes ou rose pour les femmes). (K6 à K95)
-La colonne L contient exactement les mêmes salaires. Mais cette fois-ci, je voudrais mettre une couleur en fonction de la catégorie socioprofessionnelle auquelle appartient le salairé. (L6 à L95)

J'a intégré le code suivant pour colorier les cellules en fonction du sexe de la personne:


Private Sub Worksheet_Change(ByVal Target As Range)
Dim lig As Byte, plage As Range
If Intersect(Target, Range("E6:E95")) Is Nothing Then: Exit Sub

lig = Target.Row
Set plage = Range(Cells(lig, 11), Cells(lig, 11))



Select Case Target
Case Is = "Homme"
plage.Interior.ColorIndex = 41
Case Is = "Femme"
plage.Interior.ColorIndex = 38

Case Else
plage.Interior.ColorIndex = -4142 ' enlève la couleur
End Select

Set plage = Nothing
End Sub


Ce code marche super bien. J'ai donc fait exactement le même mais pour les catégories socioprofessionnelles:


Private Sub Worksheet_Change(ByVal Target As Range)
Dim lig As Byte, plage As Range
If Intersect(Target, Range("H6:H95")) Is Nothing Then: Exit Sub

lig = Target.Row
Set plage = Range(Cells(lig, 12), Cells(lig, 12))



Select Case Target
Case Is = "Ouvrier"
plage.Interior.ColorIndex = 6
Case Is = "Cadre"
plage.Interior.ColorIndex = 3
Case Is = "Employé"
plage.Interior.ColorIndex = 4
Case Is = "Agent de maîtrise"
plage.Interior.ColorIndex = 8

Case Else
plage.Interior.ColorIndex = -4142 ' enlève la couleur
End Select

Set plage = Nothing
End Sub




Normalement ça devrait marcher mais ça coince quand je veux rentrer les données dans la colonne H car l'ordinateur me marque Erreur de compilation : Nom ambigu détecté : Worksheet_Change



Peut-on mettre deux Private Sub dans une même feuille? Peut-on faire des macros au lieu d'utiliser Private sub. Si oui comment? (car j'y connais pratiquement rien)

Merci
Lire les 13 réponses

Vidéos High-Tech et Jeu Vidéo
Téléchargements
Vos réponses Page 1 / 3
Gagnez chaque mois un abonnement Premium avec GNT : Inscrivez-vous !
Trier par : date / pertinence
LSteph
Le #19797671
Allo CapitainKirk,

vous ne pouvez pas téléporter deux Change dans le même CodeModule de
la feuille Enterprise
Veuillez placer vos vaisseaux dans le même Change

LSpoke ;-)

On 21 juil, 10:19, captain-kirk wrote:
Bonjour à tous

Je suis en train de réaliser un tableau de bord social dans le cadre d' un stage
et j'aurai besoin de votre aide concernant le coloriage de cellules à l 'aide
d'une macro.

J'ai un tableau qui est une base de données des salariés

-La colonne E donne des informations sur le sexe de la personne : Homme o u
Femme ( elle s'étend de E6 à E95)
-La colonne H donne des informations sur la catégorie socioprofessionne lle du
salarié (Ouvrier, Employé, Agent de maîtrise, Cadre) (H6 à H95)
-La colonne K contient les salaires. Je voudrais mettre une couleur en fo nction
du sexe de la personne (bleu clair pour les hommes ou rose pour les femme s). (K6
à K95)
-La colonne L contient exactement les mêmes salaires. Mais cette fois-c i, je
voudrais mettre une couleur en fonction de la catégorie socioprofession nelle
auquelle appartient le salairé. (L6 à L95)

J'a intégré le code suivant pour colorier les cellules en fonction du sexe de
la personne:

    Private Sub Worksheet_Change(ByVal Target As Range)
Dim lig As Byte, plage As Range
If Intersect(Target, Range("E6:E95")) Is Nothing Then: Exit Sub

lig = Target.Row
Set plage = Range(Cells(lig, 11), Cells(lig, 11))

Select Case Target
    Case Is = "Homme"
        plage.Interior.ColorIndex = 41
     Case Is = "Femme"
        plage.Interior.ColorIndex = 38

    Case Else
        plage.Interior.ColorIndex = -4142 ' enlève la couleur
End Select

Set plage = Nothing
End Sub

Ce code marche super bien. J'ai donc fait exactement le même mais pour les
catégories socioprofessionnelles:

Private Sub Worksheet_Change(ByVal Target As Range)
Dim lig As Byte, plage As Range
If Intersect(Target, Range("H6:H95")) Is Nothing Then: Exit Sub

lig = Target.Row
Set plage = Range(Cells(lig, 12), Cells(lig, 12))

Select Case Target
    Case Is = "Ouvrier"
        plage.Interior.ColorIndex = 6
     Case Is = "Cadre"
        plage.Interior.ColorIndex = 3
         Case Is = "Employé"
        plage.Interior.ColorIndex = 4
     Case Is = "Agent de maîtrise"
        plage.Interior.ColorIndex = 8

    Case Else
        plage.Interior.ColorIndex = -4142 ' enlève la couleur
End Select

Set plage = Nothing
End Sub

Normalement ça devrait marcher mais ça coince quand je veux rentrer l es données
dans la colonne H car l'ordinateur me marque Erreur de compilation : Nom ambigu
détecté : Worksheet_Change

Peut-on mettre deux Private Sub dans une même feuille? Peut-on faire de s macros
au lieu d'utiliser Private sub. Si oui comment? (car j'y connais pratique ment
rien)

Merci


FFO
Le #19797801
Salut à toi

Tu as du mettre 2 fois Private Sub Worksheet_Change(ByVal Target As Range)
pour traiter les 2 cas
Il faut n'en mettre qu'un et inclure tes 2 codes l'un à la suite de l'autre
pour finir avec un End Sub

Ainsi :

Private Sub Worksheet_Change(ByVal Target As Range)
Dim lig As Byte, plage As Range
If Intersect(Target, Range("E6:E95")) Is Nothing Then: GoTo Suite

lig = Target.Row
Set plage = Range(Cells(lig, 11), Cells(lig, 11))



Select Case Target
Case Is = "Homme"
plage.Interior.ColorIndex = 41
Case Is = "Femme"
plage.Interior.ColorIndex = 38

Case Else
plage.Interior.ColorIndex = -4142 ' enlève la couleur
End Select

Set plage = Nothing
Suite:
If Intersect(Target, Range("H6:H95")) Is Nothing Then: Exit Sub

lig = Target.Row
Set plage = Range(Cells(lig, 12), Cells(lig, 12))



Select Case Target
Case Is = "Ouvrier"
plage.Interior.ColorIndex = 6
Case Is = "Cadre"
plage.Interior.ColorIndex = 3
Case Is = "Employé"
plage.Interior.ColorIndex = 4
Case Is = "Agent de maîtrise"
plage.Interior.ColorIndex = 8

Case Else
plage.Interior.ColorIndex = -4142 ' enlève la couleur
End Select

Set plage = Nothing

End Sub

Celà devrait convenir

Dis moi !!!!!!
LSteph
Le #19798151
... c'est bien cela que je disais, merci de lui avoir donné le corrigé
mais toi tu avais déjà ton brevet de téléportation, ...

;o)

--
LSpoke
(mieux vaut apprendre à pecher que donner un poisson)


On 21 juil, 11:10, FFO
Salut à toi

Tu as du mettre 2 fois  Private Sub Worksheet_Change(ByVal Target As Ra nge)
pour traiter les 2 cas
Il faut n'en mettre qu'un et inclure tes 2 codes l'un à la suite de l'a utre
pour finir avec un End Sub

Ainsi :

Private Sub Worksheet_Change(ByVal Target As Range)
Dim lig As Byte, plage As Range
If Intersect(Target, Range("E6:E95")) Is Nothing Then: GoTo Suite

lig = Target.Row
Set plage = Range(Cells(lig, 11), Cells(lig, 11))

Select Case Target
Case Is = "Homme"
plage.Interior.ColorIndex = 41
Case Is = "Femme"
plage.Interior.ColorIndex = 38

Case Else
plage.Interior.ColorIndex = -4142 ' enlève la couleur
End Select

Set plage = Nothing
Suite:
If Intersect(Target, Range("H6:H95")) Is Nothing Then: Exit Sub

lig = Target.Row
Set plage = Range(Cells(lig, 12), Cells(lig, 12))

Select Case Target
Case Is = "Ouvrier"
plage.Interior.ColorIndex = 6
Case Is = "Cadre"
plage.Interior.ColorIndex = 3
Case Is = "Employé"
plage.Interior.ColorIndex = 4
Case Is = "Agent de maîtrise"
plage.Interior.ColorIndex = 8

Case Else
plage.Interior.ColorIndex = -4142 ' enlève la couleur
End Select

Set plage = Nothing

End Sub

Celà devrait convenir

Dis moi !!!!!!


FFO
Le #19798261
Salut LSteph

Que de distinction dont je n'ais pas conscience

Merci de me le rappeler !!!!
captain-kirk Hors ligne
Le #19799331
LSteph a écrit le 21/07/2009 à 11h36 :
... c'est bien cela que je disais, merci de lui avoir donné le
corrigé
mais toi tu avais déjà ton brevet de
téléportation, ...

;o)

--
LSpoke
(mieux vaut apprendre à pecher que donner un poisson)


On 21 juil, 11:10, FFO wrote:
Salut à toi

Tu as du mettre 2 fois  Private Sub Worksheet_Change(ByVal Target As Ra
nge)
pour traiter les 2 cas
Il faut n'en mettre qu'un et inclure tes 2 codes l'un à la suite de l'a
utre
pour finir avec un End Sub

Ainsi :

Private Sub Worksheet_Change(ByVal Target As Range)
Dim lig As Byte, plage As Range
If Intersect(Target, Range("E6:E95")) Is Nothing Then: GoTo Suite

lig = Target.Row
Set plage = Range(Cells(lig, 11), Cells(lig, 11))

Select Case Target
Case Is = "Homme"
plage.Interior.ColorIndex = 41
Case Is = "Femme"
plage.Interior.ColorIndex = 38

Case Else
plage.Interior.ColorIndex = -4142 ' enlève la couleur
End Select

Set plage = Nothing
Suite:
If Intersect(Target, Range("H6:H95")) Is Nothing Then: Exit Sub

lig = Target.Row
Set plage = Range(Cells(lig, 12), Cells(lig, 12))

Select Case Target
Case Is = "Ouvrier"
plage.Interior.ColorIndex = 6
Case Is = "Cadre"
plage.Interior.ColorIndex = 3
Case Is = "Employé"
plage.Interior.ColorIndex = 4
Case Is = "Agent de maîtrise"
plage.Interior.ColorIndex = 8

Case Else
plage.Interior.ColorIndex = -4142 ' enlève la couleur
End Select

Set plage = Nothing

End Sub

Celà devrait convenir

Dis moi !!!!!!





Merci à vous mais je crois que je vais devoir céder ma place de Capitaine parce que ça ne marche pas du tout.


Aucune des cellules ne se met en couleur. Pourtant, les codes couleurs sont bons.

Comment peut-on transposer ça en macro?
Publicité
Suivre les réponses
Poster une réponse
Anonyme