Macro avec message d'erreur

A

Annbri

Guest
Bonsoir à tous et à toutes

J'utilise une macro trouvée sur ce forum à cette adresse:
<http://www.excel-downloads.com/html/French/forum/read.php?f=1&i=129944&t=129876>
pour dépasser la limite des 3 couleurs autorisées par la mise en forme conditionnelle. Je l'ai modifiée en fonction de mes besoins:

Private Sub Worksheet_SelectionChange(ByVal Target As Excel.Range)
Select Case UCase(Target) 'UCASE = convertion de la frappe en majuscule'
Case "M9"
With Selection.Interior
.ColorIndex = 36
.Pattern = xlSolid
End With
Case "M26"
With Selection.Interior
.ColorIndex = 35
.Pattern = xlSolid
End With
Case "S1A"
With Selection.Interior
.ColorIndex = 34
.Pattern = xlSolid
End With
Case "M34"
With Selection.Interior
.ColorIndex = 40
.Pattern = xlSolid
End With
Case "N8"
With Selection.Interior
.ColorIndex = 39
.Pattern = xlSolid
End With
Case "M34W"
With Selection.Interior
.ColorIndex = 37
.Pattern = xlSolid
End With
Case "RHA"
With Selection.Interior
.ColorIndex = 38
.Pattern = xlSolid
End With
Case "RTT"
With Selection.Interior
.ColorIndex = 50
.Pattern = xlSolid
End With
Case "D"
With Selection.Interior
.ColorIndex = 43
.Pattern = xlSolid
End With
Case "CA"
With Selection.Interior
.ColorIndex = 28
.Pattern = xlSolid
End With
End Select

End Sub

Pour la mise en couleur des cellules en fonction de leur contenu tout fonctionne très bien mais dès que je sélectionne plus d'une cellule à la fois un message d'erreur est renvoyé:
"Erreur d'exécution '13'
Incompatibilité de type"

Où est l'erreur?
Le fichier joint vous permettra de mieux comprendre.
Merci d'avance à celui, celle ou ceux qui auront la gentillesse de venir à mon aide.

A bientôt
Annbri
 

Pièces jointes

  • macro.zip
    13 KB · Affichages: 19
  • macro.zip
    13 KB · Affichages: 22
  • macro.zip
    13 KB · Affichages: 22
Y

Yeahou

Guest
Bonjour Annbri, le forum

Sur une multi sélection, target te renvoie un tableau de valeur qui ne peut être traité directement par ucase. Il faut traiter les cellule de la plage en boucle.

Cordialement, A+

Private Sub Worksheet_SelectionChange(ByVal Target As Excel.Range)
Dim Cel_In_Range As Range
For Each Cel_In_Range In Target.Cells
Select Case UCase(Cel_In_Range) 'UCASE = convertion de la frappe en majuscule'
Case "M9"
Cel_In_Range.Interior.ColorIndex = 36
Case "M26"
Cel_In_Range.Interior.ColorIndex = 35
Case "S1A"
Cel_In_Range.Interior.ColorIndex = 34
Case "M34"
Cel_In_Range.Interior.ColorIndex = 40
Case "N8"
Cel_In_Range.Interior.ColorIndex = 39
Case "M34W"
Cel_In_Range.Interior.ColorIndex = 37
Case "RHA"
Cel_In_Range.Interior.ColorIndex = 38
Case "RTT"
Cel_In_Range.Interior.ColorIndex = 50
Case "D"
Cel_In_Range.Interior.ColorIndex = 43
Case "CA"
Cel_In_Range.Interior.ColorIndex = 28
End Select
Next Cel_In_Range
End Sub
 
Y

Yeahou

Guest
Re bonjour

La même, j'ai ajouté un case else pour gérer les cellules ayant changé de valeurs. Le case else remet à zéro la couleur de fond d'une cellule dont la valeur ne fait pas ou ne fait plus partie des valeurs traitées.

Cordialement, A+

Private Sub Worksheet_SelectionChange(ByVal Target As Excel.Range)
Dim Cel_In_Range As Range
For Each Cel_In_Range In Target.Cells
Select Case UCase(Cel_In_Range) 'UCASE = convertion de la frappe en majuscule'
Case "M9"
Cel_In_Range.Interior.ColorIndex = 36
Case "M26"
Cel_In_Range.Interior.ColorIndex = 35
Case "S1A"
Cel_In_Range.Interior.ColorIndex = 34
Case "M34"
Cel_In_Range.Interior.ColorIndex = 40
Case "N8"
Cel_In_Range.Interior.ColorIndex = 39
Case "M34W"
Cel_In_Range.Interior.ColorIndex = 37
Case "RHA"
Cel_In_Range.Interior.ColorIndex = 38
Case "RTT"
Cel_In_Range.Interior.ColorIndex = 50
Case "D"
Cel_In_Range.Interior.ColorIndex = 43
Case "CA"
Cel_In_Range.Interior.ColorIndex = 28
Case Else
Cel_In_Range.Interior.ColorIndex = xlNone
End Select
Next Cel_In_Range
End Sub
 

Discussions similaires

Statistiques des forums

Discussions
312 489
Messages
2 088 852
Membres
103 974
dernier inscrit
chmikha