Couleur selon nombre contaminé par lettre
Bonjour forum,
Dans un fichier (excel 2010), j'aimerais colorer des celulles selon des conditions:
Dans la colonne "neige": valeur de 10 à 14,9 : la celule est colorée en jaune
valeur de 15 et plus: la celulle est colorée en rouge.
Dans la colonne "pluie": valeur de 25 à 49,9 : la celulle est colorée en jaune
valeur de 50 et plus: la cellule est colorée en rouge.
Jusqu'à maintenant, tout ceci apparait simple avec une mise en forme conditionnelle. Toutefois, il y a une
difficulté supplémentaire: certaines cellules sont accompagnées d'une lettre (qui signifie le statut de la valeur).
Quelqu'un aurait une idée pour exécuter la mise en forme conditionnelle des celulles même si elles sont parfois
contaminées par une lettre?
Je joins un fichier simplifié (le fichier réel compte plus de 125,000 lignes et près de 400 lignes se rajouteront quotidiennement).
Je vous remercie d'avance
Emil
bonjour,
ça me semble compliqué car outre les lettres il y a des virgules ET des points en guise de séparateur décimal : j'y vois pas simple à moins de passer par une macro ?
A+
Bonjour,
Une première solution à tester sur l'ensemble de ton fichier (lenteur probable
Ctrl+a pour lancer la mise en forme.
Cdlt
Option Explicit
Public Sub Mise_en_Forme()
'Ctrl + a
Dim sH As Worksheet
Dim derLigne As Long
Dim i As Long
Dim a As String
With Application
.ScreenUpdating = False
.Calculation = xlCalculationManual
End With
Set sH = Worksheets("Feuil1")
With sH
derLigne = Range("A" & Rows.Count).End(xlUp).Row
'MsgBox derLigne
End With
For i = 2 To derLigne Step 1
'pluie
If IsNumeric(Cells(i, 3)) And Cells(i, 3) >= 25 And Cells(i, 3) < 50 Then
Cells(i, 3).Interior.Color = 65535 'jaune
End If
'neige
If IsNumeric(Cells(i, 4)) And Cells(i, 4) >= 10 And Cells(i, 4) < 15 Then
Cells(i, 4).Interior.Color = 65535 'jaune
End If
'pluie
If IsNumeric(Cells(i, 3)) And Cells(i, 3) >= 50 Then
Cells(i, 3).Interior.Color = 255 'rouge
End If
'neige
If IsNumeric(Cells(i, 4)) And Cells(i, 4) > 15 Then
Cells(i, 4).Interior.Color = 255 'rouge
End If
'pluie
If Not IsNumeric(Cells(i, 3)) Then
a = SansTexte(Cells(i, 3)) * 1
If a >= 25 And a < 50 Then
Cells(i, 3).Interior.Color = 65535 'jaune
End If
If a > 50 Then
Cells(i, 3).Interior.Color = 255 'rouge
End If
End If
'neige
If Not IsNumeric(Cells(i, 4)) Then
a = SansTexte(Cells(i, 4)) * 1
If a >= 25 And a < 50 Then
Cells(i, 4).Interior.Color = 65535 'jaune
End If
If a > 50 Then
Cells(i, 4).Interior.Color = 255 'rouge
End If
End If
Next i
With Application
.ScreenUpdating = True
.Calculation = xlCalculationAutomatic
End With
End Sub
Private Function SansTexte(c)
Dim obj
Dim chaine
'Supprime texte dans cellule
Application.Volatile
Set obj = CreateObject("vbscript.regexp")
obj.Global = True
obj.Pattern = "[a-z,A-Z,_]+"
'obj.Pattern = "\d+"
chaine = c.Value
chaine = obj.Replace(c, "")
SansTexte = Trim(chaine)
End Function
Bonjour Jean-Éric et Banzai,
j'ai examiné vos deux solutions et je dois avouer qu'il m'a pris un certain temps avant de maitriser vos solutions notamment avec les formules de Banzai où je ne cessais d'avoir des fautes de frappe (et à me demander pourquoi ça ne fonctionnait pas chez moi). Très fort...
Je dois avouer que la solution de Banzai me convient mieux puisqu'elle conserve les lettres dans les cellules.
Voilà, je vous remercie encore
Emil