Ceci est une page optimisée pour les mobiles. Cliquez sur ce texte pour afficher la vraie page.

XL 2010 Remplacement "." par "," génère d'autres soucis

elgringo123456

XLDnaute Occasionnel
Supporter XLD
Bonjour à tous,

Je me trouve face à un problème impossible à résoudre car je génère d'autres erreurs.
C'est surement du à des incompréhensions de ma part.

Contexte : utilisation d'un PC sous Windows 7 en FR + Office 2010 en Français
Objectif : transformer en chiffre la colonne A en macro VBA => remplacer sur toute la colonne des "." par ","

Lorsque j'effectue sans macro VBA en effectuant un rechercher / remplacer cela fonctionne.
Lorsque j'utilise le code VBA généré plusieurs soucis se posent.

Pour arriver définitivement à transformer les cellules en chiffre, j'utilise la macro "TestTransco" dans le fichier en PJ.
Cette macro effectue un remplacement ("Replace") puis un convertir ("TextToColumns").
J'utilise cette dernière ("TextToColumns") c'est pour être sur de réussir ma transformation en chiffre ("F2" + Entrée sur chaque cellule (édition de la cellule puis entrée)).
Le problème ne se situe pas sur TextToColumns (du moins je pense).

Les lignes à surveiller avant macro :
+ ligne 1929 à 4151 en bleu=> lignes à transformer en chiffre
+ ligne 4152 à 4160 en rouge => lignes transformés le chiffre est multiplié par 1 00 000 si le nombre est supérieure à 1 (alors que je n'ai rien demandé)

Pourriez-vous m'aider s'il vous plait ?
Merci d'avance de vos suggestions,
El Gringo 123456
 

Pièces jointes

  • Classeur1.xlsm
    83.4 KB · Affichages: 36

Dranreb

XLDnaute Barbatruc
Bonsoir.
Moi je ne me casserais pas la tête, je ferais :
VB:
Sub TestTransco()
Dim R As Range, T(), L&
Set R = ActiveSheet.UsedRange.Columns(1)
T = R.Value
For L = 2 To UBound(T, 1)
   If VarType(T(L, 1)) = vbString Then T(L, 1) = CDbl(Replace(T(L, 1), ".", ","))
   Next L
R.Value = T
End Sub
 

Modeste geedee

XLDnaute Barbatruc
Bonsour® je pense surtout qu'il est impossible te trouver une solution lorsque les données ont déjà été manipulées...
Fournit ici le fichier original tel que tu le reçois et avant ouverture par Excel
 
Dernière édition:

mapomme

XLDnaute Barbatruc
Supporter XLD
Bonsoir à tous,

Chez moi un simple .cells=.value semble suffire.
VB:
Sub ToNumber()
   With Intersect(Sheets("DATA").Columns(1), Sheets("DATA").UsedRange)
      .Cells = .Value
      .HorizontalAlignment = xlGeneral
   End With
End Sub
 

Pièces jointes

  • elgringo123456- conversion en nbre- v1.xlsm
    86.2 KB · Affichages: 24

Staple1600

XLDnaute Barbatruc
Bonsoir le fil, le forum

Une question pour @mapomme
Pourquoi tu choisis de passer par Intersect(Sheets("DATA").Columns(1), Sheets("DATA").UsedRange) ?

Selon les cas, on peut avoir des surprises, non?
VB:
Sub Tests()
Sheets.Add: [A1:A10] = Date: [C3:F30] = Time
MsgBox Intersect(Sheets(1).Columns(1), Sheets(1).UsedRange).Address
MsgBox Range(Cells(1, 1), Cells(Rows.Count, 1).End(xlUp)).Address
End Sub

PS: Si je m'a trompé, c'est pas grave. Au moins ce sera été l'occasion de te saluer
 

mapomme

XLDnaute Barbatruc
Supporter XLD
Bonsoir @Staple1600 ,

Une question pour @mapomme
Pourquoi tu choisis de passer par Intersect(Sheets("DATA").Columns(1), Sheets("DATA").UsedRange) ?

Selon les cas, on peut avoir des surprises, non?

Certes, il est vrai . Mais ici, c'était juste pour ne pas embarquer toute la colonne. Néanmoins ta remarque est sensée, pertinente et judicieuse. Je propose donc le code pointilliste suivant :
VB:
Sub ToNumber2()
   With Sheets("DATA")
      With .Cells(1, 1).Resize(.Cells(.Rows.Count, 1).End(xlUp).Row)
         .Cells = .Value
         .HorizontalAlignment = xlGeneral
      End With
   End With
End Sub
 

Staple1600

XLDnaute Barbatruc
Re

OK.

Alors du point, je vais vers la ligne...de front.
Au cas ou la bataille des valeurs concernerait toutes les feuilles du classeur
VB:
Private Sub ToNumber3(F As Worksheet)
If Not WorksheetFunction.CountA(F.Cells) = 0 Then
   With F
      With .[A1].Resize(.Cells(.Rows.Count, 1).End(3).Row)
         .Cells = .Value: .HorizontalAlignment = 1
      End With
   End With
End If
End Sub
Sub ReunionDeCellules()
Dim s As Worksheet
Application.ScreenUpdating = False
For Each s In Worksheets
ToNumber3 s
Next
End Sub

PS: Les décors sont de Roger mapomme et les costumes de Staple Cardwell
 

Staple1600

XLDnaute Barbatruc
Re

Alors ça, les moins de 30 ans ne peuvent connaître. Hélas, nous nous connaissons
"C'est ben vrai ça ! " comme disait Jeanne Marie Le Calvé
Ce à quoi répondait Marie-Pierre
"Et c'est tant mieux parce que je ferais pas ça tous les jours "

Je bois à leur santé avec mon verre de Tang
(en sortant de ma Fuego sur laquelle je venais de coller ma vignette)

 

elgringo123456

XLDnaute Occasionnel
Supporter XLD
Hello tout le monde,
Thanks a lot pour toutes vos réponses.
Je vais tout regarder calmement et exploiter un max toutes les solutions.
Pour donner le fichier source c'est impossible de mon côté car c'est un fichier professionnel qui est déjà un peu retraité.
Vraiment je vous remercie beaucoup de votre aide et lumières.
J'évolue en VBA et ce grace à vous.
Donc Bravo A TOUS
 

Discussions similaires

Les cookies sont requis pour utiliser ce site. Vous devez les accepter pour continuer à utiliser le site. En savoir plus…