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

  • Initiateur de la discussion Initiateur de la discussion Piaf79
  • Date de début Date de début

Boostez vos compétences Excel avec notre communauté !

Rejoignez Excel Downloads, le rendez-vous des passionnés où l'entraide fait la force. Apprenez, échangez, progressez – et tout ça gratuitement ! 👉 Inscrivez-vous maintenant !

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

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
 
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
 
- Navigue sans publicité
- Accède à Cléa, notre assistante IA experte Excel... et pas que...
- Profite de fonctionnalités exclusives
Ton soutien permet à Excel Downloads de rester 100% gratuit et de continuer à rassembler les passionnés d'Excel.
Je deviens Supporter XLD

Discussions similaires

Retour