Séparer chiffres et lettres par macro

350dr

XLDnaute Junior
Bonjour le forum.
je sais que le sujet a déjà été abordé, mais je n'arrive pas à adapter de solution à mon cas.
Je souhaiterai dans une colonne de résultat supprimer les unités de mesures pour ne garder que les chiffres afin d'effectuer des calculs.
Je souhaite le faire par macro VBA car je voudrais, avec le même bouton, enchainé plusieurs action.
J'ai trouvé sur ce même forum un code de Fanfan38 qui me conviendrait mais j'ai besoin de votre aide pour l'adapter.
Merci
 

Pièces jointes

  • Test.xls
    880 KB · Affichages: 98
  • Test.xls
    880 KB · Affichages: 104
  • Test.xls
    880 KB · Affichages: 96

phlaurent55

Nous a quittés en 2020
Repose en paix
Re : Séparer chiffres et lettres par macro

Bonjour 350dr

ton fichier en retour

à+
Philippe
 

Pièces jointes

  • 111.xls
    888 KB · Affichages: 142
  • 111.xls
    888 KB · Affichages: 148
  • 111.xls
    888 KB · Affichages: 156
Dernière édition:

350dr

XLDnaute Junior
Re : Séparer chiffres et lettres par macro

Ouaahouuu, que dire.... à part que c'est nickel, pile poile...
Tu est le dieu d'excel.
Pour bien comprendre la modif, en fait c'est le point derrière seconde qui posait problème?
Pourrais tu également m'expliquer le "Or Mid(Range("d" & i).Value, j, 1)" que tu as ajouter.
Juste histoire de comprendre (et de progresser).
Un grand merci à toi Phlaurent55
 

phlaurent55

Nous a quittés en 2020
Repose en paix
Re : Séparer chiffres et lettres par macro

Re,

explications:

If IsNumeric(Mid(Range("d" & i).Value, j, 1)) Then
ne prends que les chiffres de 0 à 9

If IsNumeric(Mid(Range("d" & i).Value, j, 1)) Or Mid(Range("d" & i).Value, j, 1) = "." Then
cette instruction prends en compte les chiffres et le(s) point décimal

If Right(chiffre, 1) = "." Then chiffre = Mid(chiffre, 1, Len(chiffre) - 1
et en fin de procédure on élimine le point décimal si il se trouve en dernière position

à+
Philippe
 

job75

XLDnaute Barbatruc
Re : Séparer chiffres et lettres par macro

Bonjour 350dr, salut Philippe :)

Une solution qui utilise un tableau VBA et la fonction Val :

Code:
Sub SEPARE()
Dim r As Range, t, i&
Set r = Range("D1:D2" & [D65536].End(xlUp).Row) 'au moins 2 cellules
t = r 'tableau, plus rapide
For i = 2 To UBound(t)
  t(i, 1) = IIf(Val(r(i).Text), Val(r(i).Text), "")
Next
With [E1].Resize(UBound(t))
  .Value = t
  '.SpecialCells(xlCellTypeBlanks).Delete xlUp 'supprime les cellules vides
End With
End Sub
J'ai mis une ligne en commentaire si l'on veut supprimer les cellules vides.

Fichier joint.

A+
 

Pièces jointes

  • Sépare(1).zip
    176.5 KB · Affichages: 82

job75

XLDnaute Barbatruc
Re : Séparer chiffres et lettres par macro

Re,

Ceci doit être un peu plus rapide :

Code:
Sub SEPARE()
Dim r As Range, t(), i&
Set r = Range("D1:D2" & [D65536].End(xlUp).Row) 'au moins 2 cellules
ReDim t(1 To r.Count, 1 To 1) 'tableau, plus rapide
t(1, 1) = r(1)
For i = 2 To UBound(t)
  If Val(r(i).Text) Then t(i, 1) = Val(r(i).Text)
Next
With [E1].Resize(UBound(t))
  .Value = t
  '.SpecialCells(xlCellTypeBlanks).Delete xlUp 'supprime les cellules vides
End With
End Sub
Fichier (2).

Edit : ajouté t(1, 1) = r(1)

A+
 

Pièces jointes

  • Sépare(2).zip
    176.6 KB · Affichages: 88
Dernière édition:

job75

XLDnaute Barbatruc
Re : Séparer chiffres et lettres par macro

Re,

Je n'avais pas vu qu'il y a des valeurs nulles avec 0.00 xxx.

Les macros précédentes ne les affichent pas.

Alors utiliser :

Code:
Sub SEPARE()
Dim r As Range, t(), i&
Set r = Range("D1:D2" & [D65536].End(xlUp).Row) 'au moins 2 cellules
ReDim t(1 To r.Count, 1 To 1) 'tableau, plus rapide
t(1, 1) = r(1)
For i = 2 To UBound(t)
  If Trim(r(i)) Like "#*" Then t(i, 1) = Val(r(i).Text)
Next
With [E1].Resize(UBound(t))
  .Value = t
  '.SpecialCells(xlCellTypeBlanks).Delete xlUp 'supprime les cellules vides
End With
End Sub
Fichier (3).

A+
 

Pièces jointes

  • Sépare(3).zip
    176.7 KB · Affichages: 83

350dr

XLDnaute Junior
Re : Séparer chiffres et lettres par macro

PHLaurent je te remercie pour tes explications. Je comprends mais j'ai encore du taf pour m'en sortir tout seul.
Job75: et oui, 0,00 est une valeur comme les autres pour mon calcule de stat (moyenne, écart-type, coef de variation.)
Je n'ai pas encore eu le temps d'étudier ta solution mais je vais me pencher dessus prochainement.
Pour ce qui est de la suppression des lignes vides, j'ai trouvé la solution ici même en faisant un tri selon plusieurs critères (toujours avec une macro) ce qui me permet d'extraire les valeurs de la même unité et qui me supprime du coup les lignes vides.
Mais je garde ta proposition car elle pourra me resservir pour un autre programme.
Un grand merci à vous pour vos réponses.
Ce forum est une vraie mine d'or, merci à vous de prendre du temps pour aider les novices comme moi !!!
Cdlt
 

Discussions similaires

Statistiques des forums

Discussions
312 428
Messages
2 088 333
Membres
103 815
dernier inscrit
SANOU ANSELME