Colorier cellule avec inputbox
Bonjour à tous,
J'ai un code me permettant de colorier des cellules en fonction de ce que je mets dans mon inputbox. Je m'explique.
En fait j'ai une colonne qui contient des noms (nom-1 dans la première cellule jusqu'à nom-n dans la n-ième cellule).
Mon code permet de colorier des plages de cellules correspondant à mon code.
Par exemple, si je mets dans mon inputbox "/5,7/15", les cellules de nom-1 jusqu'à nom-5 et de nom-7 à la dernière s'affichent en orange. Par contre la cellule nom-6 s'affiche en bleu.
En fait dès que j'ai une virgule, la cellule ou la plage correspondante s'affiche en bleu.
Autre exemple je mets dans mon inputbox "/1,3/5,8/15" :
nom-1 s'affiche en orange
nom-2 en bleu
nom-3 à nom-5 en orange
nom-6 et nom-7 en bleu
nom-8 à nom-15 en orange
Ce que fais le code c'est qu'il met tout en bleu au départ et les plages correspondantes en orange par la suite.
Cependant, ce j'aimerais faire, c'est plutôt l'inverse. En gros, que toute la plage se colorie en orange avant et que ça soit
que la plage se situant dans la virgule qui se mette en bleu avec la boucle. Cependant je vois le problème mais je ne sais pas trop
comment m'y prendre pour le coder...
Sub test()
Dim x$, c1 As Range, c2 As Range, nums As Variant, serie As Variant
x = InputBox("entrez un/deux numeros")
If x <> vbNullString Then ' si on annule pas et que la chaine tapée correspond a un chiffre + "/" + un chiffre
With Sheets(1).Range("A1:A" & Cells(Rows.Count, 1).End(xlUp).Row)
'on met tout en bleu au depart
.Parent.Range(.Cells(1, 1), .Cells(.Cells.Count)).Interior.Color = RGB(0, 150, 255)
serie = Split(x, ",")
For s = 0 To UBound(serie)
If Not serie(s) Like "*/*" Then serie(s) = serie(s) & "/" & serie(s)
If IsNumeric(Replace(serie(s), "/", "")) And serie(s) Like "*#/#*" Then
nums = Split(serie(s), "/")
'on cherche le 1°chiffre nom-+ nums(0)
Set c1 = .Find("nom-" & nums(0), lookat:=xlWhole)
'on cherche le 2d chiffre nom-+ nums(1)
Set c2 = .Find("nom-" & nums(1), lookat:=xlWhole)
critere = Not c1 Is Nothing And Not c2 Is Nothing
'si c1 n'est pas rien
If critere Then .Parent.Range(c1, c2).Interior.Color = RGB(255, 200, 50) Else mess = mess & "la plage contenant ""nom-" & nums(0) & """ & ""nom-" & nums(1) & """ n'existe pas !!" & vbCrLf
Else
mess = " la serie " & serie(s) & " n'est pas valide" & vbCrLf
End If
Next
If mess <> "" Then MsgBox mess
End With
Else
MsgBox "vous avez annulé"
End If
End Subbonjour
les couleurs qui ne dépendent pas d'un choix humain se mettent par MFC, pas par code, ni par le menu Accueil "couleur" ni par clic droit "format de cellule"
de manière générale, ne pas utiliser les userforms, qui sont source de problèmes et de perte de temps (en phase de mise au point, et ensuite. Tu verras )
mais ce n'est que mon avis.
amitiés
Bonjour,
Merci pour ta réponse et désolé pour ma réponse tardive.
Du coup je garde mon code. Par contre j'aimerai l'utiliser pour effectuer autre chose mais à mon avis la MFC sera
plus judicieux.
Merci pour tes conseils