Tout d'abord, il faut savoir que la combinaison de touches <Alt> + 32 donne bien réellement le caractère espace et n'est donc pas différencié de l'appuie sur la touche espace.
Si on analyse les nombres donnés dans le premier post de ce topic, on s'aperçoit que le caractère de séparation réellement utilisé (et qui apparait à l'écran comme un espace) a en ré&alité pour code "160" (et non "32" qui est le code de l'espace).
Je comprend un peu mieux ton problème et je l'ai déjà rencontré.
En effet, lorsque j'ai voulu faire un simple copier/coller des gains du LOTO depuis le site fdjeux.com vers une feuille EXCEL, comme toi j'ai récupéré du texte et non des nombres.
Voici une solution qui, je l'espère, fonctionnera chez toi.
Le principe consiste à appeler la procédure de transformation du texte en nombre à chaque fois qu'on effectue une modification dans la feuille de calcul.
On passe comme paramètre, à cette procédure, la zone des cellules modifiées. Le contenu de chacune de ces cellules sera alors analysé et transformé.
Dans chaque feuille où on veut effectuer la transformation, il faut entrer le code suivant :
- Code:
-
Private Sub Worksheet_Change(ByVal Target As Range)
If MaJ_EnCours = False Then Call MiseEnForme(Target)
End Sub
Passons à la procédure de transformation.
Il faut la saisir dans un module, et elle a pour code :
- Code:
-
Sub MiseEnForme(ByVal Target As Excel.Range)
Dim ColTempo, LigTempo As Double
Dim Original, Resultat As String
Dim Pointeur, Tempo As Long
On Error Resume Next
If MaJ_EnCours = False Then
MaJ_EnCours = True
For ColTempo = 1 To Target.Columns.Count
For LigTempo = 1 To Target.Rows.Count
Original = Cells(Target.Row + LigTempo - 1, Target.Column + ColTempo - 1)
Resultat = ""
Pointeur = 0
While Pointeur < Len(Original)
Pointeur = Pointeur + 1
Tempo = Asc(Mid(Original, Pointeur, 1))
If Tempo > 31 And Tempo < 127 Then Resultat = Resultat & Chr(Tempo)
Wend
Cells(Target.Row + LigTempo - 1, Target.Column + ColTempo - 1) = CDbl(Resultat)
Cells(Target.Row + LigTempo - 1, Target.Column + ColTempo - 1).NumberFormat = "$#,##0.00_);[Red]($#,##0.00)" ' CECI NE SERT QU'A UNE MISE EN FORME DES NOMBRES AU FORMAT MONETAIRE.
Next LigTempo
Next ColTempo
MaJ_EnCours = False
End If
End Sub
Afin de ne pas tourner en rond à l'infini, il faut utiliser une variable qui nous dit si la cellule qui vient d'être modifiée l'a été par la procédure (au quel cas, il ne faut pas modifier de nouveau cette cellule) ou non (au quel cas, il faut modifier cette cellule).
Pour cela, il faut saisir, dans le module, juste avant la procédure, le code suivant :
- Code:
-
Public MaJ_EnCours As Boolean