Comment convertir un affichage de chiffre en texte?

Le
Pilouminet
Bonjour,

Je récupère, avec VBA, une suite (apparemment de chiffres) sur une page
web et la colle dans une cellule excel.

Pour récupérer cette suite, j'utilise le code
"ActiveCell.FormulaR1C1 = "=mid(rc[-1],30,12)",
qui affiche la formule "=STXT(A45;30;12)", car je n'ai besoin que des
chiffres, et non du texte qui précède.

J'obtiens bien un affichage de chiffres, mais que je ne peux plus
transformer en nombre, pour en récupérer la valeur.

Quand je veux récupérer la valeur d'une cellule qui affiche
"-1 387,88 €", cela ne marche pas, alors que cela marche très bien pour
"-690,11", par exemple.
Directement dans excel, j'ai essayé de supprimer le "-" devant, pensant
que c'était lui qui génait.
J'obtiens le message :
"Nous avons rencontré une erreur dans cette formule.

Etes vous en train de taper une formule?
Lorsque le premier caractère est un signe égal(=) ou moins(-), Excel
considère qu'il s'agit d'une formule.
etc, etc."

Je n'arrive donc pas à récupérer la valeur de ces chiffres, alors que
cela marchait parfaitement, notamment avec un nombre comme "-696,11".

Ce qui me fait penser que ce n'est pas forcément le signe (-) qui pose
problème.

D'où un appel à l'aide, si quelqu'un connait ce genre de problème.

Un grand merci d'avance à celui ou ceux qui trouveront la solution, et
aux autres aussi, d'ailleurs.
  • Partager ce contenu :
Vos réponses
Trier par : date / pertinence
MichD
Le #26555192
Bonjour,
Dans l'énoncé de ton problème, tu as oublié une chose importante :
Donne un exemple de quelques chaînes de caractères que tu as et le
résultat que tu veux obtenir. Nul besoin de décrire une procédure qui ne
fonctionne pas comme tu le voudrais.
MichD
MichD
Le #26555198
Le 27/09/20 à 10:14, MichD a écrit :
Bonjour,
Dans l'énoncé de ton problème, tu as oublié une chose importante :
Donne un exemple de quelques chaînes de caractères que tu as et le
résultat que tu veux obtenir. Nul besoin de décrire une procédure qui ne
fonctionne pas comme tu le voudrais.
MichD

A ) Tu réponds sur le forum et non par courriel privé. Le principe,
permettre à tout le monde de suivre la discussion et de voir la (les)
réponse.
B ) Ce que je veux comme exemple, le contenu brut des chiffres ou
lettres contenus dans une cellule et le résultat final que tu veux
obtenir dans une cellule à côté. Tu veux traiter seulement une cellule
ou plusieurs cellules? Où sont-elles situées dans la feuille (Adresse de
la plage de cellules) et où tu veux obtenir le résultat suite au traitement?
MichD
Pilouminet
Le #26555208
Le 27/09/2020 à 16:58, MichD a écrit :
Le 27/09/20 à 10:14, MichD a écrit :
Bonjour,
Dans l'énoncé de ton problème, tu as oublié une chose importante :
Donne un exemple de quelques chaînes de caractères que tu as et le
résultat que tu veux obtenir. Nul besoin de décrire une procédure qui
ne fonctionne pas comme tu le voudrais.
MichD

A ) Tu réponds sur le forum et non par courriel privé. Le principe,
permettre à tout le monde de suivre la discussion et de voir la (les)
réponse.
B ) Ce que je veux comme exemple, le contenu brut des chiffres ou
lettres contenus dans une cellule et le résultat final que tu veux
obtenir dans une cellule à côté. Tu veux traiter seulement une cellule
ou plusieurs cellules? Où sont-elles situées dans la feuille (Adresse de
la plage de cellules) et où tu veux obtenir le résultat suite au
traitement?
MichD

Excuse moi pour la réponse hors groupe, je n'ai pas l'habitude et je me
suis peut-être mal engagé (comme j'étais dans le groupe, j'ai cru qu'en
faisant "répondre", je répondais dans la file de la discussion).
Donc, je récupère un morceau de page web dans laquelle il y a ceci:
Engagements en liquidation
Total des +/- values latentes-1 387,88 €Total des +/- values
compensées0,00 €Prochaine liquidation27/10/2020
Lorsque je colle ce morceau dans une feuille excel, la ligne "Total des
+/- values latentes-1 387,88 €Total des +/- values compensées0,00 €" se
retrouve comme ci-dessous:
"Total des +/- values latentes-1 387,88" dans une cellule, et
"Total des +/- values compensées0,00 €" dans la cellule dessous.
Cette portion n'est jamais au même endroit de la feuille excel.
Je recherche donc une cellule qui commence par "Total des +/- values
latentes", et je la sélectionne (c'est la seule qui contienne ce morceau
de texte).
Puis j'essaie d'en extraire la partie numérique (-1 387,88 €) pour en
récupérer la valeur (d'où le stxt(....,30,12) ).
Ma macro a toujours fonctionné pour des nombre y compris négatifs, par
exemple "-184,36", "-754.34", etc...., et ceci depuis plusieurs mois.
Elle ne fonctionne plus lorsque le nombre est négatif et inférieur a - 1
000.
J'ai essayé de supprimer l'espace entre le chiffre du millier et celui
des dizaines de milliers, d’ôter le "-" pour voir si c'était lui qui
perturbait, mais rien n'y fait.
J'espère avoir été plus clair.
En tout cas, merci de ta patience, et encore toutes mes excuses pour la
réponse partie en courrier privé. Je veux évidemment que d'autres
puissent se servir de la solution s'il y en a une. J'ai d'ailleurs
chercher un cas similaire dans les messages, mais je n'ai rien trouvé
qui y ressemble.
MichD
Le #26555207
Contenu dans de la cellule : "-1 387,88 €"
Pour une réponse simple :
Les espaces contenus dans ce chiffre ne sont pas l'effet d'un format
personnalisé de cellule nombre du type : # ### ##0,00 $ mais un espace
que tu as ajouté ou qui émane de l'extraction d'une chaîne de caractère.
Par conséquent, ceci est une chaîne de caractères TEXTE "-1 387,88 €"
avec un signe négatif. Excel ne comprend pas et ne peut pas convertir ce
chiffre "-1 387,88 €" en nombre. Pour que cela fonctionne bien,
A ) en vba, tu extrais tous les chiffres incluant le symbole négatif
mais sans aucun espace et si tu veux obtenir ce format dans une cellule,
tu écris :
RAnge("A1").Numberformat = "# ### ##0,00 $"
Range("A1").Value = -1387.88
Attention : En VBA, le séparateur est le point et non la virgule. En
VBA, anglais américain oblige.
Et la cellule va t'afficher : -1 387,88 €
MichD
MichD
Le #26555210
À partir de ton exemple, utilise ce type de procédure :
'-------------------------------------------
Sub test()
Dim X As String, N As String, A As Long
Dim S As String
'Place la valeur de la cellule dans la variable X
X = Range("A1")
'Une boucle sur chaque caractère de la chaîne de caractères
For A = 1 To Len(X)
'utilise le code ASCII de chacun des caractères
Select Case Asc(Mid(X, A, 1))
'le code ASCII pour les symboles "-" ou "+"
Case 43, 45
'Si le caractère suivant est un chiffre afin
'd'éviter de retenir un de ces caractères sans qu'ils
'soient à des fins numériques
If IsNumeric(Mid(X, A + 1, 1)) Then
'on place dans la variable S la valeur du symbole
S = Mid(X, A, 1)
End If
'pour tous les chiffres de 0 à 9
Case 48 To 57
N = N & Mid(X, A, 1)
'pour le symbole décimal dans la chaîne (virgule)
Case 44
'un test pour savoir si le chiffre précédent et
'suivant est un chiffre
If IsNumeric(Mid(X, A - 1, 1)) And _
IsNumeric(Mid(X, A + 1, 1)) Then
'On remplace la virgule par le point
N = N & "."
End If
End Select
Next
'On formate la cellule recevant le résultat
Range("G1").NumberFormat = "# ### ##0,00 €"
'on copie la valeur dans la cellule choisie
Range("G1").Value = (S & N)
End Sub
'-------------------------------------------
MichD
Pilouminet
Le #26555216
Le 27/09/2020 à 19:26, MichD a écrit :
À partir de ton exemple, utilise ce type de procédure :
'-------------------------------------------
Sub test()
Dim X As String, N As String, A As Long
Dim S As String
'Place la valeur de la cellule dans la variable X
X = Range("A1")
'Une boucle sur chaque caractère de la chaîne de caractères
For A = 1 To Len(X)
    'utilise le code ASCII de chacun des caractères
    Select Case Asc(Mid(X, A, 1))
        'le code ASCII pour les symboles "-" ou "+"
         Case 43, 45
            'Si le caractère suivant est un chiffre afin
            'd'éviter de retenir un de ces caractères sans qu'ils
            'soient à des fins numériques
            If IsNumeric(Mid(X, A + 1, 1)) Then
                'on place dans la variable S la valeur du symbole
                S = Mid(X, A, 1)
            End If
        'pour tous les chiffres de 0 à 9
        Case 48 To 57
            N = N & Mid(X, A, 1)
        'pour le symbole décimal dans la chaîne (virgule)
        Case 44
            'un test pour savoir si le chiffre précédent et
            'suivant est un chiffre
            If IsNumeric(Mid(X, A - 1, 1)) And _
                IsNumeric(Mid(X, A + 1, 1)) Then
                'On remplace la virgule par le point
                N = N & "."
            End If
    End Select
Next
'On formate la cellule recevant le résultat
Range("G1").NumberFormat = "# ### ##0,00 €"
'on copie la valeur dans la cellule choisie
Range("G1").Value = (S & N)
End Sub
'-------------------------------------------
MichD

Merci de ton aide.
Cela me parait un peu compliqué, n'étant pas spécialiste, mais je vais
étudier ta solution.
Je ne manquerai pas de tenir au courant.
Encore merci pour tout
MichD
Le #26555219
Comment ces cellules ne sont pas regroupées, il y a une manière plus
facile de procéder.
A ) Ouvre l'éditeur de code (Fenêtre VBA)
B ) À partir de la barre des menus / Insertion / Module
C ) Dans ce module copie la fonction suivante.
D ) Dans la feuille de calcul, pour extraire les chiffres d'une cellule,
tu écris dans la cellule où tu veux le résultat cette formule
=Extraire_Chiffre(A1) A1 = Cellule contenant la chaîne de caractères
Cela devrait te faciliter la tâche.
'---------------------------------------------------
Function Extraire_Chiffre(Rg As Range)
Dim X As String, N As String, A As Long
Dim S As String
'Place la valeur de la cellule dans la variable X
X = Rg
'Une boucle sur chaque caractère de la chaîne de caractères
For A = 1 To Len(X)
'utilise le code ASCII de chacun des caractères
Select Case Asc(Mid(X, A, 1))
'le code ASCII pour les symboles "-" ou "+"
Case 43, 45
'Si le caractère suivant est un chiffre afin
'd'éviter de retenir un de ces caractères sans qu'ils
'soient à des fins numériques
If IsNumeric(Mid(X, A + 1, 1)) Then
'on place dans la variable S la valeur du symbole
S = Mid(X, A, 1)
End If
'pour tous les chiffres de 0 à 9
Case 48 To 57
N = N & Mid(X, A, 1)
'pour le symbole décimal dans la chaîne (virgule)
Case 44
'un test pour savoir si le chiffre précédent et
'suivant est un chiffre
If IsNumeric(Mid(X, A - 1, 1)) And _
IsNumeric(Mid(X, A + 1, 1)) Then
N = N & ","
End If
End Select
Next
Extraire_Chiffre = CDbl(S & N)
End Function
'---------------------------------------------------
MichD
MichD
Le #26555218
Dans une fonction personnalisée, on ne peut pas modifier le format d'une
cellule. Le résultat s'affichera de cette manière : -1387,88 sans formatage.
MichD
Poster une réponse
Anonyme