Ceci est une page optimisée pour les mobiles. Cliquez sur ce texte pour afficher la vraie page.

Microsoft 365 vba convertir nombre au format texte pour calcul et mise en fome conditionnelle

Piaf79

XLDnaute Junior
Bonsoir à tous,
Je récupère dans un fichier Excel des données de l x h au format texte comme cf. colonne D de l'exemple joint.
Je souhaite diviser le chiffre de gauche par le chiffre de droite et mettre en rouge les cellules de la colonne D dont le résultat serait différent de 0,80
J'ai essayé via des formules comme STXT puis CNUM mais je n'arrive pas au résultat escompté...
Quelqu'un aurait il une idée ?
Piaf79
 

Pièces jointes

  • Exemple.xlsx
    9.5 KB · Affichages: 18

Staple1600

XLDnaute Barbatruc
Re

Bon bah, modifié pour avoir les mêmes couleurs qu'avec la macro de gbinforme
VB:
Sub test_OK_Quattro()
Dim c As Range, tmp$, f As Worksheet:       Set f = ActiveSheet
Application.ScreenUpdating = False
For Each c In Range(f.[D2], f.Cells(Rows.Count, "D").End(3))
If Not c.HasFormula Then
tmp = NETTOYER_B(c.Text)
c.Offset(, 1) = Round((Split(tmp, "x")(0) * 1) / (Split(tmp, "x")(1) * 1), 2)
c.Offset(, 1).NumberFormat = "#,##0.00"
Select Case Round(c.Offset(, 1).Value, 2)
Case Is <> 0.8
c.Offset(, 1).Font.Color = vbRed
End Select
End If
Next
End Sub
Private Function NETTOYER_B(txt As String) As String
Dim i%
For i = 1 To Len(txt)
If AscW(Mid(txt, i, 1)) < 127 Then NETTOYER_B = NETTOYER_B & Mid(txt, i, 1)
Next i
End Function
 

Staple1600

XLDnaute Barbatruc
Re

Et la version sans colonne intermédiaire
VB:
Sub test_OK_Cinquo()
Dim c As Range, tmp$, check, f As Worksheet:       Set f = ActiveSheet
Application.ScreenUpdating = False
For Each c In Range(f.[D2], f.Cells(Rows.Count, "D").End(3))
If Not c.HasFormula Then
tmp = NETTOYER_B(c.Text)
check = Round((Split(tmp, "x")(0) * 1) / (Split(tmp, "x")(1) * 1), 2)
Select Case check
Case Is <> 0.8
c.Font.Color = vbRed
End Select
End If
Next
End Sub

Private Function NETTOYER_B(txt As String) As String
Dim i%
For i = 1 To Len(txt)
If AscW(Mid(txt, i, 1)) < 127 Then NETTOYER_B = NETTOYER_B & Mid(txt, i, 1)
Next i
End Function
 

Discussions similaires

Les cookies sont requis pour utiliser ce site. Vous devez les accepter pour continuer à utiliser le site. En savoir plus…