VBA problème de format de cellule après import
Dernière réponse : dans Programmation
Je fais encore un appel à l'aide pour un souci.. et j'espère bien que ça sera le dernier...
Dans une macro j'effectue un import de données, le problème c'est que ces données arrivent dans les cellules en format texte (il s'agit d'un tableau), et comme je dois effectuer des calculs dessus je dois reconvertir en format nombre. Mais je n'y arrive pas.
J'ai consulté l'aide d'excel, et il y a une manip que l'on peut faire à la main, mais je n'arrive pas à la faire en VBA (avec l'enregistreur de macro ça ne marche pas).
Cette manip:
écrire 1 dans une cellule
copier cette cellule
sélectionner la plage de cellules à convertir
faire un collage spécial et dans "opérations" cocher "multiplication"
supprimer la cellule contenant le 1
J'ai aussi pensé à essayer de convertir directement le format en VBA avec:
mais ça ne marche pas non plus...
Quelqu'un at-il déjà eu ce pb, et y-a t'il une astuce pour le résoudre?
Dans une macro j'effectue un import de données, le problème c'est que ces données arrivent dans les cellules en format texte (il s'agit d'un tableau), et comme je dois effectuer des calculs dessus je dois reconvertir en format nombre. Mais je n'y arrive pas.
J'ai consulté l'aide d'excel, et il y a une manip que l'on peut faire à la main, mais je n'arrive pas à la faire en VBA (avec l'enregistreur de macro ça ne marche pas).
Cette manip:
écrire 1 dans une cellule
copier cette cellule
sélectionner la plage de cellules à convertir
faire un collage spécial et dans "opérations" cocher "multiplication"
supprimer la cellule contenant le 1
J'ai aussi pensé à essayer de convertir directement le format en VBA avec:
selection.numberformat="0.00"
mais ça ne marche pas non plus...
Quelqu'un at-il déjà eu ce pb, et y-a t'il une astuce pour le résoudre?
Autres pages sur : vba probleme format cellule import
Lassé par la pub ? Créez un compte
Lorsque Range("Xn") renvoie -> General , je comprend que ça ne marche pas...
Mais même lorsque Range("Xn") renvoie -> 0.00, mon calcule ne marche pas: il renvoie toujours 0 au lieu de faire la somme.
le code de mon calcul est une simple somme de ce type:
Mais même lorsque Range("Xn") renvoie -> 0.00, mon calcule ne marche pas: il renvoie toujours 0 au lieu de faire la somme.
le code de mon calcul est une simple somme de ce type:
verif = WorksheetFunction.Sum(Range("C6:C7"))
bonsoir,
Si ça ne marche pas c'est probablement que dans ta cellule il y des espaces invisibles
Essaie de tester dans la barre de formule le nombre de caractère de ces nombres: il y a gros à parier qu'il y a des espaces parasites avant ou après le nombre.
Dans le meilleur des cas il suffit de sélectionner toute la colonne et de passer par le menu Edition / Remplacer
le caractère " " (espace) par : (rien du tout).
Mais concernant des données importées de fichier csv ou d'automates divers très souvent c'est insuffisant : En plus du caractère espace il y a très souvent un caractère qui ressemble à un espace mais qui est en fait le caractère ascii (160) (espace insécable)
Il faudrait scanner ta chaine de caractère avec mid et asc pour vérifier. Si c'est le Chr(160) il faut écrire une macro spécifique pour supprimer ces caractères.
A+
Si ça ne marche pas c'est probablement que dans ta cellule il y des espaces invisibles
Essaie de tester dans la barre de formule le nombre de caractère de ces nombres: il y a gros à parier qu'il y a des espaces parasites avant ou après le nombre.
Dans le meilleur des cas il suffit de sélectionner toute la colonne et de passer par le menu Edition / Remplacer
le caractère " " (espace) par : (rien du tout).
Mais concernant des données importées de fichier csv ou d'automates divers très souvent c'est insuffisant : En plus du caractère espace il y a très souvent un caractère qui ressemble à un espace mais qui est en fait le caractère ascii (160) (espace insécable)
Il faudrait scanner ta chaine de caractère avec mid et asc pour vérifier. Si c'est le Chr(160) il faut écrire une macro spécifique pour supprimer ces caractères.
A+
J'ai fait une macro qui remplace les espaces par rien, et qui détecte les caractères invisibles et les remplace par rien. (j'ai remarqué qu'il y avait bien un espace à la place du séparateur de milliers).
Mais ma somme ne marche toujours pas...
j'ai essayé de faire la somme de deux cellules "à la main" avec excel et ça marche.. mais quand j'essaye ma macro ça marche pas... le problème ne vient à prioris pas de mon code pour faire la somme car il marche sur des cellules "normales".
Mais ma somme ne marche toujours pas...
j'ai essayé de faire la somme de deux cellules "à la main" avec excel et ça marche.. mais quand j'essaye ma macro ça marche pas... le problème ne vient à prioris pas de mon code pour faire la somme car il marche sur des cellules "normales".
bonjour,
met voir un petit bout de ces données dans cjoint
(et un bout significatif du code qui ne marche pas (la somme...)
A+
met voir un petit bout de ces données dans cjoint
(et un bout significatif du code qui ne marche pas (la somme...)
A+
Les << et >> s'étaient pour détecter des espaces
De toutes façons, IsNumeric a renvoyé Vrai donc, espace ou pas, la cellule contient bien un nombre pour Excel.
Je pige pas où est ton problème. J'en viens à penser à une erreur de frappe ou quelque chose comme ça. Pour éviter ce genre de déconvenue, utilise Option Explicit.
Sinon essaie de refaire le tour de la question. Je ne sais pas comment t'aider autrement.
De toutes façons, IsNumeric a renvoyé Vrai donc, espace ou pas, la cellule contient bien un nombre pour Excel.
Je pige pas où est ton problème. J'en viens à penser à une erreur de frappe ou quelque chose comme ça. Pour éviter ce genre de déconvenue, utilise Option Explicit.
Sinon essaie de refaire le tour de la question. Je ne sais pas comment t'aider autrement.
Pas d'explications logiques.
Mais une soluce quand même :
Pour me faire plaisir, essaie de comprendre tout ce que fait ce bout de code et pourquoi. Merci de bien regarder ton manuel surtout en ce qui concerne les fonctions For Each et CDbl.
Tu vois, on l'a eu !
Mais une soluce quand même :
Sub NombresStockesEnTexteVersNombres()
Dim cellule As Range
For Each cellule In Range("C6:C13")
cellule.Value = CDbl(cellule.Value)
Next
End Sub
Pour me faire plaisir, essaie de comprendre tout ce que fait ce bout de code et pourquoi. Merci de bien regarder ton manuel surtout en ce qui concerne les fonctions For Each et CDbl.
Tu vois, on l'a eu !
Comme tu le dis toi-même tu n'as pas d'explication logique.
C'est bien que ton truc marche, et ça ne me vexe en aucune façon, mais j'aime la logique et j'aime bien comprendre c'est tout.
isnumeric renvoie vrai si une expression de chaine peut-être interprétée comme numérique, ça ne dit rien sur la raison qui fait qu'Excel ne le reconnait pas comme numérique.
Pour information isnuméric renvoie vrai même si le nombre comporte des espaces insécables ou le mot "vrai" ou "faux" ou des virgules (alors que le pc est configuré avec un point numérique)...
A+
C'est bien que ton truc marche, et ça ne me vexe en aucune façon, mais j'aime la logique et j'aime bien comprendre c'est tout.
isnumeric renvoie vrai si une expression de chaine peut-être interprétée comme numérique, ça ne dit rien sur la raison qui fait qu'Excel ne le reconnait pas comme numérique.
Pour information isnuméric renvoie vrai même si le nombre comporte des espaces insécables ou le mot "vrai" ou "faux" ou des virgules (alors que le pc est configuré avec un point numérique)...
A+
Lassé par la pub ? Créez un compte
- Contenus similaires :
Tags :
- ForumVba format cellule nombre
- ForumVba format cellule texte
- ForumModifier format cellule vba
- ForumFormat cellule excel vba
- ForumVba excel problème format date
- ForumExcel probleme de format cellule
- ForumCellule vba
- ForumVba somme cellule
- ForumModifier une cellule vba
- ForumVba cellule d'un autre classeur
- Voir plus