Différences entre macro enregistrée et un enchainement manuel d'actions

P

Patrick.

Guest
Bonsoir, j'aimerais connaîitre la différence entre un enchainement manuel d'actions et un enchainement par macro (via enregistreur de macros)
Rappel de ma précédente demande : je reçois un fichier avec des valeurs de type 12345.12 et je veux les transformer en 12345,12 "remplacement du point par une virgule"puis les additionner.
Manuellement, je fais "Edition", "Remplacer", "Rechercher" .
"Remplacer par" , et enfin "Remplacer tout"
Les points sont remplacés par des virgules et les valeurs se déplacent du côté gauche de la cellule au côté droit
En bas de la colonne, je fais la somme et cela fonctionne.
Maintenant, je fais un enregistrement d'une macro, je fais les mêmes opérations.
J'obtiens la macro suivante :

Selection.Replace What:=".", Remplacement:=",", LookAt:=xlPart, SearchOrder:=xlByRows, MatchCase:=False

Je fais tourner la macro. Les points sont remplacés par des virgules mais les nombres restent à gauche (bizarre) et je ne peux pas faire la somme en bas de la colonne.

D'ou vient la différence entre un déroulement manuel et un déroulement par macro enregistrée. Que ne fait pas l'enregistreur et comment y remédier.
Je vous remercie de me répondre car cela me gène énormément de ne pas comprendre.
Bonne soirée et merci pour vo réponses
Patrick.
 
P

Patrick.

Guest
Bonsoir Wooshi et merci pour la réponse mais j'ai déjà converti en format nombre (si c'est cela que tu veux me dire)
Dans une autre macro, j'ai employé "CDec" puis Selection.numberFormat = "#0.00"
Cela fonctionne très bien mais je fais cela avec des boucles et c'est très long car mes données ont plusieurs colonnes et 2000 lignes environ.
Avec la méthode manuelle, la transformation est presque instantanée et j'aimerais arriver au même résultat par macro et surtout comprendre pourquoi il y a une différence entre le manuel et la macro enregistrée par l'enregistreur de macro.
Merci de me répondre
Patrick
 
M

myDearFriend

Guest
Bonsoir Patrick, Wooshi, le Forum.


Ci-dessous une procédure qui devrait résoudre ton problème. Tout d'abord, j'utilise le "Replace" de façon classique pour convertir les points en virgule, puis j'assure la conversion des valeurs alpha en valeurs numériques en transférant le contenu de la feuille dans un tableau variant et en "réinjectant" ce tableau dans la feuille. Ce transfert "aller-retour" semble suffir pour rétablir la reconnaissance d'un format numérique :

Sub ConversionValeurs()
Dim TabTemp As Variant
Dim Mem1 As Variant
   With ActiveSheet
      'Remplace des points par des virgules
      .UsedRange.Replace ".", ","
      'On s'assure que la cellule A1 est non vide
      Mem1 = .Range("A1")
      If Mem1 = "" Then .Range("A1") = "x"
      'Conversion des valeurs alpha en valeurs numériques
      'On transfère les valeurs dans un tableau variant
      TabTemp = .UsedRange.Value
      'On réinjecte les valeurs dans la feuille
      .Range(.Cells(1, 1), .Cells(UBound(TabTemp, 1), UBound(TabTemp, 2))).Value = TabTemp
      'On vide la cellule A1 si vide au départ
      If Mem1 = "" Then .Range("A1") = Mem1
   End With
End Sub


Cordialement.

Didier_mDF
myDearFriend-3.gif
 
P

Patrick.

Guest
Bonjour MdF et Wooshi
Merci pour ta macro.
J'ai fait un essai rapide ce matin avant d'aller bosser et cela me semble super.

Concernant mon besoin personnel, j'ai des colonnes avec des format Date ou autres que je ne veux surtout pas modifier. Faut-il sélectionner les colonnes que je désire modifier à la place de la feuille active ?

Et une dernière question et toujours la même, pourquoi cette différence entre les modifications faites manuellement et celles faites par la macro simpliste que j'ai enregistrée ?
Bonne journée à tous
Patrick.
 
W

wooshi

Guest
Hello,

Convertir tes données ne signifie pas un simple format :) Données convertir / standard.
Excel a la facheuse habitude à retenir une cellule en format texte et si tu as deja une donnée dedans, en modifiant le format rien n'y fera. Il faut vider la cellule remettre le bon format puis remettre tes données. Essaye d'abord en convertissant tes données ca devrait marcher sinon la macro a dispo au dessus revient a la même chose tu les reinjecte dans une feuille en format numérique.

Cdt,
 
P

Patrick.

Guest
Bonsoir Wooshi, mdF et tous les autres,
Je te remercie pour ton explication mais qu'entends-tu par " Essaye d'abord en convertissant tes données".
D'après ton explication, j'avais compris qu'il était nécessaire de vider la cellule pour la remettre au bon format puis d'y remettre les données. Je suis bien obligé de passer par cette étape (macro de mdF) ou il y a encore + court.
Au point de vue rapidité, il n'y a pas photo entre ma macro à boucles et la macro que m'a proposée mdF.

Dernier ennui dans mon tableau, c'est un pb bien connu.
Dans ce même fichier, je reçois des dates de format :
01-FEB-2005 ou 01-fév-2005
et j'aimerais convertir ces 2 formats en : 01/02/2005 et ceci pour les 12 mois possible.
Actuellement, avec ma macro (très lente) à boucles , je convertis mes dates par le célèbre "Replace" puis j'utilise "CDate" pour mettre au format.
Mais c'est très long et je perds la rapidité de la macro de mdF car je faisais tourner toutes mes conversions (date et nombre) avec la même boucle.
Il me faudrait supprimer cette boucle de conversion.
C'est un pb que j'ai retrouvé dans les anciens messages du forum mais que je n'ai pas vu traiter comme je le souhaiterais (vitesse)
Merci de me donner des idées ou des solutions
Bonne soirée
Patrick
 

Discussions similaires

Statistiques des forums

Discussions
312 202
Messages
2 086 180
Membres
103 152
dernier inscrit
Karibu