× Aidez la recherche contre le COVID-19 avec votre ordi ! Rejoignez l'équipe PC Astuces Folding@home
 > Tous les forums > Forum Bureautique
 macro nombres stockés sous forme texteSujet résolu
Ajouter un message à la discussion
Page : [1] 
Page 1 sur 1
WINNIE0931
  Posté le 17/04/2014 @ 10:23 
Aller en bas de la page 
Petit astucien

Bonjour à tous

Sous Excel, , il arrive que des nombres soient stockés au format texte et du coup aucun calcul n'est possible

Pour résoudre ce problème de format "à la main", je procède comme ceci.

Je rentre le chiffre 1 dans une cellule et je copie cette cellule,

je sélectionne la plage dans laquelle se trouvent les nombres au format texte et j'effectue un collage spécial multiplication qui me permet de résoudre le problème.

(si quelqu'un a une autre solution, je suis preneur)

Je souhaiterais automatiser par une macro le traitement des nombres stockés sous forme texte.

Vous trouverez un modèle de classeur xlm dans le lien ci dessous avec le code suivant dans le module du classeur

http://cjoint.com/?DDrkc0pL2QM

Sub nbtxt()

'Au préalable on sélectionne la plage qui correspondra à la variable "maplage"

Dim maplage As Range
Set maplage = Selection

ActiveWorkbook.Names.Add Name:="toto", RefersTo:=maplage ' la plage est nommée "toto"

Range("D1") = 1

Range("D1").Copy

Application.Goto Reference:="toto"

Selection.PasteSpecial Paste:=xlPasteAll, Operation:=xlMultiply, _
SkipBlanks:=False, Transpose:=False

Range("D1").Select
Application.CutCopyMode = False
Selection.ClearContents ' on efface le contenu de D1

Range("A1").Select
End Sub

Je me suis inspiré de l'enregistreur de macro mais cette dernière ne fonctionne pas.

Qu'en pensez vous ?

Merci de vos réponses et bonne journée.

Publicité
ZenJP
 Posté le 17/04/2014 à 11:53 
Aller en bas de la page Revenir au message précédent Revenir en haut de la page
  Maître astucien

WINNIE0931
 Posté le 17/04/2014 à 12:47 
Aller en bas de la page Revenir au message précédent Revenir en haut de la page
Petit astucien

Bonjour ZenJP et merci de ta réponse,

Le fichier que j'ai posté n'est qu'un petit exemple car j'ai de grandes masses de données à considérer, et il m'est difficile d'intervenir cellule par cellule en utilisant les méthodes ci-dessous.

Méthode 1: Utiliser le bouton Erreur

Si les cellules dans lesquelles les nombres sont affichés en tant que texte contiennent un indicateur d'erreur dans le coin supérieur gauche, procédez comme suit :

  1. Cliquez sur la cellule contenant l'indicateur d'erreur.
  2. Cliquez sur le bouton d'erreur en regard de la cellule, puis cliquez sur convertir en nombre dans le menu contextuel.
Méthode 2: Retaper les valeurs dans les cellules

Pour retaper les valeurs dans les cellules, procédez comme suit :

  1. Dans le menu Format , cliquez sur cellules, puis cliquez sur l'onglet nombre pour modifier le format de nombre des cellules.
  2. Retapez les nombres.
Méthode 3: Modifier directement dans la cellule

J'utilise en particulier celle ci-dessous que je décris dans ma demande et c'est justement cette méthode que j'aimerais automatiser par macro (macro enregistrée en partie avec l'enregistreur, mais qui ne fonctionne pas)

Méthode 4: Utiliser la commande Collage spécial

Pour utiliser la commande Collage spécial , procédez comme suit :

  1. Dans une cellule vide, tapez la valeur 1.
  2. Assurez-vous que la cellule où vous avez tapé 1 est mise en forme comme un nombre.
  3. Sélectionnez la cellule dans laquelle vous avez tapé 1, puis cliquez le bouton droit et choisissez Copier.
  4. Sélectionnez les cellules contenant les valeurs que vous souhaitez convertir en nombres.
  5. Cliquez le bouton droit et sélectionnez Collage spécial.
  6. Sous opération, cliquez sur multiplication , puis sur OK.

En tout cas, un grand merci pour ta disponibilité.

Bonne journée.



Modifié par WINNIE0931 le 17/04/2014 12:49
rj390111
 Posté le 17/04/2014 à 12:55 
Aller en bas de la page Revenir au message précédent Revenir en haut de la page
Petit astucien

Bonjour,

Pourquoi faire une macro pour multiplier par 1 faite cette multiplication dans la formule qui doit faire le calcul.

Si A1 contient une valeur au format texte et que vous devez faire A1*B1 en C1

Mettez en C1 = A*1*B1

De toute façon dans Excel 2007 si vous faite A1*B1 B1 étant un nombre le calcul se fait normalement.

ZenJP
 Posté le 17/04/2014 à 13:08 
Aller en bas de la page Revenir au message précédent Revenir en haut de la page
  Maître astucien

Mais si tu as ces chiffres comme zone texte (vu que la saisie se fait en mode standard), c'est que ces chiffres proviennent d'ailleurs.. ?

Tu devrais t'attaquer à la source du problème

WINNIE0931
 Posté le 17/04/2014 à 14:08 
Aller en bas de la page Revenir au message précédent Revenir en haut de la page
Petit astucien

re bonjour Zen JP

Hélas, les extractions proviennent d'une application qui exporte des données en HTML et sur laquelle je n'ai pas la main ; (tu verrais le format des données...)

je dois ensuite récupérer ces données au format txt et les travailler ensuite ....

Merci et bonne journée.

WINNIE0931
 Posté le 17/04/2014 à 14:14 
Aller en bas de la page Revenir au message précédent Revenir en haut de la page
Petit astucien

Bonjour rj390111.

Merci de votre réponse

Il ne s'agit pas d'un calcul à effectuer dans une tierce cellule mais d'une "conversion" de format de cellule (texte vers nombre).

La vraie question est en fait pourquoi la macro ne marche pas.

Je pense qu'il y a un souci de toute façon car j'ai récupéré un bout de code généré à partir de l'enregistreur de macros et c'est loin d'être une science exacte !!!!

Merci en tout cas de votre contribution.

Cordialement,

ZenJP
 Posté le 17/04/2014 à 14:39 
Aller en bas de la page Revenir au message précédent Revenir en haut de la page
  Maître astucien

Ne peux-tu pas ouvrir excel, puis importer les données à partir du fichier source et dans ce cas tu peux agir sur le format des colonnes correspondant aux zones des enregistrements constituant ton fichier source.

ferrand
 Posté le 17/04/2014 à 15:11 
Aller en bas de la page Revenir au message précédent Revenir en haut de la page
  Astucien

Salut,

Je n'ai pas le temps de lire les diverses contributions à ton sujet, je risque donc de répondre à côté de ce qui est attendu à ce stade de la discussion...

Je réponds à ta question initiale relative à l'utilisation d'une macro. En voici une qui fonctionne, il faut la lancer en étant sur la feuille dont les nombres-texte sont à convertir.

Sub Txt_Nb()
Dim c As Range, af As Worksheet, nf As Worksheet
Set af = ActiveSheet
Worksheets.Add after:=af
Set nf = ActiveSheet
With af
For Each c In .UsedRange
If IsNumeric(c.Value) Then
nf.Cells(c.Row, c.Column).Value = CDec(c.Value)
Else
nf.Cells(c.Row, c.Column).Value = c.Value
End If
Next c
End With
End Sub

NB- Pour éviter des problèmes d'appellations dans ton fichier réel, je n'utilise aucun nom de feuille, la feuille active initialement est celle à convertir, la conversion se fait sur une nouvelle feuille (que tu pourras renommer ensuite).

Je n'ai pas non plus le temps de regarder pourquoi ta macro ne fonctionne pas... Je suis quelque peu "allergique" aux macros enregistrées mais je vois que tu y as fait des efforts de modification et il est toujours utile de savoir ce qui ne marche pas... (j'y reviendrai quand j'aurai un moment).

A+



Modifié par ferrand le 17/04/2014 15:13
Publicité
WINNIE0931
 Posté le 17/04/2014 à 15:13 
Aller en bas de la page Revenir au message précédent Revenir en haut de la page
Petit astucien

Merci ZenJP

Voici un exemple des données que je récupère

10,829,896.71 1,756,639.50-

il faut lire comme ceci :

10,829,896.71 correspond à 10829896,71 (la ' correspond au séparateur de milliers et le . correspond à la virgule pour les chiffres après la virgule)

1,756,639.50- correspond à - 17756639,50 (Nombre négatif)


Pour commencer le traitement, il faut d'abord par macro (ou recherche remplace ctrl H) dans l'ordre :

1) Supprimer les virgules (Rechercher "," et remplacer par "")

2) Remplacer le point par une virgule (Rechercher" ." et remplacer par ",")

3) traiter les nombres négatifs (je le fais par une macro) c'est à dire mettre le moins (qui se situe en fin de cellule) en début de cellule


Je fais ce traitement par macro et je n'ai pas de souci.

Le tout se retrouve au format txt d’où le pb.

Ca ne prend pas beaucoup de temps pour réaliser ensuite le collage spécial multiplication à la main mais je trouve dommage de ne pas l'inclure dans la macro.

A bientôt et merci ...

WINNIE0931
 Posté le 17/04/2014 à 15:17 
Aller en bas de la page Revenir au message précédent Revenir en haut de la page
Petit astucien

Salut Ferrand,

Ravi de pouvoir comme toujours bénéficier de tes conseils.

(je suis tes conseils au niveau VBA et je pense progresser mais le chemin est long et enregistreur me dépanne par moment sauf que !!!! )

Je teste cela rapidement.

A bientôt et merci.

rj390111
 Posté le 17/04/2014 à 15:20 
Aller en bas de la page Revenir au message précédent Revenir en haut de la page
Petit astucien

Bonjour,

Une autre proposition en retard par rapport à ferrand

Sub Txt_en_Nbr()
'On copie la plage de la feuille Enoncé dans la feuille Résultat
Dim premLigne As Integer, derLigne As Integer
Dim cel As Range
Dim maplage As Range
'Copie de la plage
Sheets("Enoncé").Activate
premLigne = 2
derLigne = Range("A" & Rows.Count).End(xlUp).Row

'On commence en A2 car en ligne 1
Range("A2:B" & derLigne).Select
Set maplage = Selection
ActiveWorkbook.Names.Add Name:="Toto", RefersTo:=maplage ' la plage est nommée "toto"
'On multiplie chaque cellule de maplage par 1
For Each cel In maplage
cel = cel * 1
Next cel

End Sub

WINNIE0931
 Posté le 17/04/2014 à 16:30 
Aller en bas de la page Revenir au message précédent Revenir en haut de la page
Petit astucien

rj390111, merci !

Cela fonctionne parfaitement !

Je marque ma demande comme résolue.

A l'attention de Ferrand, à l'occasion, si tu trouves un moment pour te pencher sur la macro relative au collage spécial multiplication .....

Merci à tous de votre contribution.

Bonne journée.

ferrand
 Posté le 17/04/2014 à 18:32 
Aller en bas de la page Revenir au message précédent Revenir en haut de la page
  Astucien

Retour comme annoncé,

Désolé pour ta macro enregistrée, elle ne fonctionne pas, c'est un fait ! Je n'ai pas d'explication. Je l'ai épuré de diverses façons, rien à faire. J'ai réenregistré une macro élémentaire (une seule cellule) : rien à faire . On devrait donc en conclure que le collage spécial n'a pas le même effet en macro qu'en manuel ?

je laisse la question ouverte.

Donc, si tu veux opérer en multipliant par 1, directement sur la plage à convertir en la sélectionnant préalablement, voilà la macro (expurgée du code inutile) à utiliser :

Sub nbtxt()
'Au préalable on sélectionne la plage qui correspondra à la variable "maplage"
Dim c As Range
For Each c In Selection
c.Value = c.Value * 1
Next c
Range("A1").Select
End Sub

A noter que si le contenu n'est pas numérique, tu auras une erreur.

Si tu souhaites prendre quelque précaution, obtenir le résultat sur une nouvelle feuille, sans avoir à te préoccuper de sélectionner puisqu'il suffit de démarrer sur la feuille à convertir, je conseille ma macro précédente (dans laquelle tu peux remplacer CDec(c.Value) par c.Value * 1 si tu préfères, c'est tout à fait équivalent dans ce cas).

WINNIE0931
 Posté le 18/04/2014 à 07:52 
Aller en bas de la page Revenir au message précédent Revenir en haut de la page
Petit astucien

Merci Ferrand !

A bientôt pour de nouvelles aventures !

Bon week-end !

Page : [1] 
Page 1 sur 1

Vous devez être connecté pour poster des messages. Cliquez ici pour vous identifier.

Vous n'avez pas de compte ? Créez-en un gratuitement !


Les bons plans du moment PC Astuces

Tous les Bons Plans
4,41 €Assortiment de mèches hélicoïdales à bois Bosch (3/4/5/6/7/8/10 mm) à 4,41 €
Valable jusqu'au 02 Novembre

Amazon fait une promotion sur l'assortiment de mèches hélicoïdales à bois Bosch - Ø 3/4/5/6/7/8/10 mm qui passe à 4,41 € au lieu de 8,39 €. La livraison est gratuite en point relais.


> Voir l'offre
7,99 €Lot de 4 Piles Duracell Rechargeables type AA 2500mAh à 7,99 €
Valable jusqu'au 30 Octobre

Amazon fait une promotion sur le lot de 4 Piles Duracell Rechargeables type AA 2500mAh à 7,99 €. Ces piles sont garanties 5 ans, elles sont pré-chargées, prètes à l'emploi, peuvent être rechargées jusqu'à 400 fois avec n'importe quel chargeur NiMH comme celui d'Amazon par exemple. Notez que le modèle AAA (900 mAh) est également en promotion à 7,99 € le lot de 4 piles rechargeables.


> Voir l'offre
54,90 €Routeur TP-Link Archer C7 Gigabit et Wifi double band AC à 54,90 €
Valable jusqu'au 29 Octobre

Amazon fait une vente flash sur le routeur TP-Link Archer C7 qui passe à 54,90 € livré gratuitement. On le trouve ailleurs à partir de 90 €.  Ce routeur dispose de 5 ports Ethernet Gigabit, du WiFi 802.11 AC sur 2 bandes (délivre des débits combinés allant jusqu’à 1.75Gbps) et dispose de 2 ports USB  pour partager une imprimante ou des fichiers sur plusieurs appareils du réseau local ou via le serveur FTP quand vous êtes en déplacement. Une excellente affaire pour compléter les fonctionnalités d'une box ADSL.


> Voir l'offre

Sujets relatifs
Question document texte sous Win XP...
Word : comment établir dans un texte ses propres marges de & et sous-& ?
Impossible d'ajouter texte à coté d'une image sous Works
Garder la forme d'un texte répété dans une autre feuille
traitement de texte sous mac
macro sous excel 2007
Amélioration d'une macro sous excel 97 ou 2003
Execution Sous excell 2007 macro pas a pas
COPIER COLLER je perds la mise en forme du texte
Macro sous word 2010
Plus de sujets relatifs à macro nombres stockés sous forme texte
 > Tous les forums > Forum Bureautique