Se connecter avec
S'enregistrer | Connectez-vous

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:
  1. 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?
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:
  1. verif = WorksheetFunction.Sum(Range("C6:C7"))
Expert Programmation

Merci d'exécuter ceci :

  1. MsgBox IsNumeric(Range("C6").Value) & Chr(10) & _
  2. "<<" & Range("C6").Value & ">>" & Chr(10) & _
  3. Range("C6").NumberFormat & Chr(10) & _
  4. Range("C6").NumberFormatLocal


De faire un copier-coller et de posterr le résultat.

Tu vas voir on va l'avoir !

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 c'est un espace insécable on peut aussi le supprimer par Edition / Remplacer en le remplaçant par ...rien
Bien sur auparavant, il faut d'abord Copier ce caractère invisible en le sélectionnant dans la chaine pour pouvoir le coller dans la boite de dialogue remplacer.

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".
Expert Programmation

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. :( 
Expert Programmation

Pas d'explications logiques.

Mais une soluce quand même :

  1. Sub NombresStockesEnTexteVersNombres()
  2. Dim cellule As Range
  3. For Each cellule In Range("C6:C13")
  4. cellule.Value = CDbl(cellule.Value)
  5. Next
  6. 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 ! :D 

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+
Lassé par la pub ? Créez un compte