Remplacer Virgule par Point dans une colonne et par macro

Ykarul

XLDnaute Nouveau
Voila, j'ai une extraction dont les montants d'une colonne sont avec des virgule pour les décimales.

Je souhaite simplement intégrer dans ma macro le remplacement, dans cette colonne, des virgules par des points.

J'utilise donc ca :
Code:
   Columns("J:J").Select
    Selection.Replace What:=",", Replacement:=".", LookAt:=xlPart, _
        SearchOrder:=xlByRows, MatchCase:=False, SearchFormat:=False, _
        ReplaceFormat:=False

Cependant avec ce code, les nombre supérieur à 1000 ne sont pas considéré en nombres... (et le seul moyen pour les mettre en nombre est de cliquer sur l'outil d'erreur et de demander le changement, pour chaque cellule).

Quelqu'un aurait-il un meilleur code pour faire ca?
 

sim

XLDnaute Occasionnel
Re : Remplacer Virgule par Point dans une colonne et par macro

Bonjour,

j'ai eu le meme soucy, resolu comme ceci

Code:
With Sheets("Nom de ta feuille")

.Columns("J").Replace ",", "[COLOR="red"].[/COLOR]", LookAt:=xlPart

End With

Il suffit juste de virer les virgule

Ou alors changer le format de nombre de ta cellule

Code:
With Sheets("Nom de ta feuille")

.Columns("J").NumberFormat = "0.00"
End With

Voila dans l'attente de te lire avec tes commentaires

Cordialement

Sim

PS: petit conseil, toujours eviter les "select" dans tes macro, ca alourdie un max!! :)
 
Dernière édition:

Dranreb

XLDnaute Barbatruc
Re : Remplacer Virgule par Point dans une colonne et par macro

Bonjour
Cependant avec ce code, les nombre supérieur à 1000 ne sont pas considéré en nombres...
Pourquoi ?
Si c'est parce que les points existent déja partout comme séparateurs de milliers, les remplacer par rien dans une première pass avec Replace.
À+
 

Pierrot93

XLDnaute Barbatruc
Re : Remplacer Virgule par Point dans une colonne et par macro

Bonjour,

essaye ceci,
Code:
Columns(10).TextToColumns Destination:=Range("A1"), DecimalSeparator:=",", ThousandsSeparator:=""

précise le caractère utilisé dans le fichier source comme séparateur de milliers, au niveau de l'argument "ThousandsSeparator".

bonne soirée
@+
 

Ykarul

XLDnaute Nouveau
Re : Remplacer Virgule par Point dans une colonne et par macro

Aucune de vos solutions ne fonctionnent :s

J'ai remarqué que dans le fichier de base, il y avait des espace à la place des séparateur de milliers. Du coup j'ai mis dans ma macro une suppression de ces espaces avant de changer les virgules en points, et la tout passe bien en nombre. Sauf que ca me créer une nouvelle erreur plus loin dans ma macro au moment de créer les TCD...

Je ne comprend pas pourquoi ca fonctionne si je le fais a la main (juste en selectionnant la colonne, et remplacer virgule par point), et pas quand je le fais avec une macro... Quelle est la différence informatiquement? il doit bien y en avoir une...
 

Pierrot93

XLDnaute Barbatruc
Re : Remplacer Virgule par Point dans une colonne et par macro

Bonjour,

si espace pour séparateur de milliers dans le fichier source :
Code:
Columns(10).TextToColumns Destination:=Range("A1"), DecimalSeparator:=",", ThousandsSeparator:=" "

mais sans un bout de fichier pour tester... pas facile...

bonne journée
@+
 

Robert

XLDnaute Barbatruc
Repose en paix
Re : Remplacer Virgule par Point dans une colonne et par macro

Bonjour le fil, bonjour le forum,

Moi ce que je ne comprends pas c'est que tu ne fasses pas l'effort de mettre un fichier en pièce jointe. On perd un temps fou en palabres et on a rien de concret pour comprendre ce qui cloche...
 

Ykarul

XLDnaute Nouveau
Re : Remplacer Virgule par Point dans une colonne et par macro

C'est un peu difficile de mettre les fichiers comptable d'une grosse société en pièce jointe sur un forum...
De plus ma macro fonctionne comme ceci :

J'ai mon fichier excel ou tout se fait et deux fichier excel d'extraction de bases de données.
On doit d'abord copier manuellement les deux bases, puis je lance ma macro.

Voila la macro :

Code:
Sub Macro2()
'
' Macro2 Macro
' Macro enregistrée le 31/05/2011 par *****
'

'
    Sheets("Base coda").Select
  [COLOR="red"]Columns("J:J").Select
    Selection.Replace What:=",", Replacement:=".", LookAt:=xlPart, _
        SearchOrder:=xlByRows, MatchCase:=False, SearchFormat:=False, _
        ReplaceFormat:=False[/COLOR]        
Range("K1").Select
    Selection.ClearContents
    ActiveCell.FormulaR1C1 = "Pièce"
    Range("K2").Select
    ActiveCell.FormulaR1C1 = "=RIGHT(RC[3],8)"
    Range("K2").Select
    Selection.AutoFill Destination:=Range("K2:K10000")
    Range("K2:K1980").Select
    Columns("K:K").Select
    Selection.Copy
    Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
        :=False, Transpose:=False
    Sheets("STT diva").Select
    Range("A1").Select
    Application.CutCopyMode = False
    ActiveWorkbook.PivotCaches.Add(SourceType:=xlDatabase, SourceData:= _
        "'Base diva'!R1C1:R10000C9").CreatePivotTable TableDestination:= _
        "'[ECARTS 2.0.xls]STT diva'!R3C1", TableName:="Tableau croisé dynamique2", _
        DefaultVersion:=xlPivotTableVersion10
    ActiveWorkbook.ShowPivotTableFieldList = True
    Sheets("STT coda").Select
    Range("A1").Select
    ActiveWorkbook.PivotCaches.Add(SourceType:=xlDatabase, SourceData:= _
        "'Base coda'!R1C6:R10000C28").CreatePivotTable TableDestination:= _
        "'[ECARTS 2.0.xls]STT coda'!R3C1", TableName:="Tableau croisé dynamique3", _
        DefaultVersion:=xlPivotTableVersion10
    With ActiveSheet.PivotTables("Tableau croisé dynamique3").PivotFields("Pièce")
        .Orientation = xlRowField
        .Position = 1
    End With
    [COLOR="yellow"]ActiveSheet.PivotTables("Tableau croisé dynamique3").AddDataField ActiveSheet. _
        PivotTables("Tableau croisé dynamique3").PivotFields("Mt EUR"), _
        "Nombre de Mt EUR", xlCount[/COLOR]    
Sheets("STT diva").Select
    With ActiveSheet.PivotTables("Tableau croisé dynamique2").PivotFields( _
        "N° pièce")
        .Orientation = xlRowField
        .Position = 1
    End With
    ActiveSheet.PivotTables("Tableau croisé dynamique2").AddDataField ActiveSheet. _
        PivotTables("Tableau croisé dynamique2").PivotFields( _
        "Montant HT de la ligne de pièce"), "Nombre de Montant HT de la ligne de pièce" _
        , xlCount
    Range("B8").Select
    ActiveSheet.PivotTables("Tableau croisé dynamique2").PivotFields( _
        "Nombre de Montant HT de la ligne de pièce").Function = xlSum
    Sheets("STT coda").Select
    Range("B12").Select
    ActiveSheet.PivotTables("Tableau croisé dynamique3").PivotFields( _
        "Nombre de Mt EUR").Function = xlSum
        
        Cells.Select
    Selection.Copy
    Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
        :=False, Transpose:=False
    Sheets("STT diva").Select
    Cells.Select
    Application.CutCopyMode = False
    Selection.Copy
    Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
        :=False, Transpose:=False
    Rows("1:3").Select
    Application.CutCopyMode = False
    Selection.Delete Shift:=xlUp
    Sheets("STT coda").Select
    Rows("1:3").Select
    Selection.Delete Shift:=xlUp
    Range("A10").Select
    Sheets("Base diva").Select
    Columns("B:B").Select
    Selection.Cut
    Columns("A:A").Select
    Selection.Insert Shift:=xlToRight
    Sheets("Base coda").Select
    Selection.Cut
    Columns("A:A").Select
    Selection.Insert Shift:=xlToRight
    Sheets("STT diva").Select
    Columns("A:A").Select
    Selection.NumberFormat = "@"
    Selection.ColumnWidth = 13.71
    Columns("A:B").Select
    Selection.Copy
    Sheets("Diva-Coda").Select
    Columns("A:B").Select
    ActiveSheet.Paste
    Sheets("STT coda").Select
    Columns("A:B").Select
    Application.CutCopyMode = False
    Selection.Copy
    Sheets("Coda-Diva").Select
    Columns("A:B").Select
    ActiveSheet.Paste
    Sheets("Coda-Diva").Select
    Range("C2").Select
    Application.CutCopyMode = False
    Selection.AutoFill Destination:=Range("C2:C10000")
    Range("C2:C961").Select
    Range("D2").Select
    Selection.AutoFill Destination:=Range("D2:D10000")
    Range("D2:D961").Select
    Range("E2").Select
    ActiveCell.FormulaR1C1 = "=VLOOKUP(RC1,'Base coda'!R2C1:R20000C27,10,FALSE)"
    Range("E2").Select
    Selection.AutoFill Destination:=Range("E2:E10000")
    Range("E2:E961").Select
    Range("F2").Select
    ActiveCell.FormulaR1C1 = "=VLOOKUP(RC1,'Base coda'!R2C1:R20000C27,2,FALSE)"
    Range("F2").Select
    Selection.AutoFill Destination:=Range("F2:F10000")
    Range("F2:F961").Select
    Range("D10").Select
    Sheets("STT diva").Select
    Selection.Copy
    Sheets("Diva-Coda").Select
    Range("C2").Select
    Application.CutCopyMode = False
    Selection.AutoFill Destination:=Range("C2:C10000")
    Range("C2:C934").Select
    Range("D2").Select
    Selection.AutoFill Destination:=Range("D2:D10000")
    Range("D2:D934").Select
    Range("E2").Select
    Selection.AutoFill Destination:=Range("E2:E10000")
    Range("E2:E934").Select
    Range("E2").Select
    ActiveCell.FormulaR1C1 = "=VLOOKUP(RC1,'Base diva'!R2C1:R20000C10,4,FALSE)"
    Range("E2").Select
    Selection.AutoFill Destination:=Range("E2:E10000")
    Range("E2:E934").Select
    Range("F2").Select
    ActiveCell.FormulaR1C1 = "=VLOOKUP(RC1,'Base diva'!R2C1:R20000C10,2,FALSE)"
    Range("F2").Select
    Selection.AutoFill Destination:=Range("F2:F10000")
    Range("F2:F934").Select
    Range("H13").Select
    Columns("B:D").Select
    Selection.NumberFormat = "#,##0.0"
    Sheets("Coda-Diva").Select
    Columns("B:D").Select
    Selection.NumberFormat = "#,##0.0"
    Range("B1").Select
    ActiveCell.FormulaR1C1 = "Mt Coda"
    Range("B2").Select
    Sheets("Diva-Coda").Select
    Range("B1").Select
    ActiveCell.FormulaR1C1 = "Mt Diva"
    Range("B2").Select
    Selection.AutoFilter Field:=3, Criteria1:="=0.0", Operator:=xlAnd
    Range("A2:F1500").Select
    Selection.SpecialCells(xlCellTypeVisible).Select
    Selection.Copy
    Sheets("RESULTAT").Select
    Range("K3").Select
    ActiveSheet.Paste
    Sheets("RESULTAT").Select
    ActiveWindow.SmallScroll Down:=-9
    ActiveSheet.Paste
    Sheets("Coda-Diva").Select
    Application.CutCopyMode = False
    Selection.Copy
    Sheets("RESULTAT").Select
    ActiveSheet.Paste
    ActiveSheet.Paste
    Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
        :=False, Transpose:=False
    Sheets("Diva-Coda").Select
    Selection.AutoFilter Field:=3, Criteria1:="=0.0", Operator:=xlAnd
    Range("A25:C25").Select
    Sheets("Diva-Coda").Select
    Range("A1:F1000").Select
    Selection.SpecialCells(xlCellTypeVisible).Select
    Application.CutCopyMode = False
    Selection.Copy
    Sheets("RESULTAT").Select
       Range("D2").Select
    ActiveSheet.Paste
    Sheets("Coda-Diva").Select
    Selection.AutoFilter Field:=3, Criteria1:="<>0.0", Operator:=xlAnd
    Selection.AutoFilter Field:=4, Criteria1:=">0.1", Operator:=xlOr, _
        Criteria2:="<-0.1"
    Range("A1:E10001").Select
    Selection.SpecialCells(xlCellTypeVisible).Select
    Application.CutCopyMode = False
    Selection.Copy
    Sheets("RESULTAT").Select
    Range("H24").Select
   
    Range("R3").Select
    Sheets("Diva-Coda").Select
    Application.CutCopyMode = False
    Selection.Copy
    Sheets("Coda-Diva").Select
    Range("A1:F10001").Select
    Selection.SpecialCells(xlCellTypeVisible).Select
    Application.CutCopyMode = False
    Selection.Copy
    Sheets("RESULTAT").Select
    Range("R2:W2").Select
    ActiveSheet.Paste
    Range("Y1:Y9").Select
    Range("Y9").Activate
    Application.CutCopyMode = False
    Selection.Borders(xlDiagonalDown).LineStyle = xlNone
    Selection.Borders(xlDiagonalUp).LineStyle = xlNone
    Selection.Borders(xlEdgeLeft).LineStyle = xlNone
    Selection.Borders(xlEdgeTop).LineStyle = xlNone
    Selection.Borders(xlEdgeBottom).LineStyle = xlNone
    Selection.Borders(xlEdgeRight).LineStyle = xlNone
    Selection.Borders(xlInsideVertical).LineStyle = xlNone
    Selection.Borders(xlInsideHorizontal).LineStyle = xlNone
    Selection.Interior.ColorIndex = xlNone
    Selection.ClearContents
    Range("R1:W2").Select
    Selection.Font.Bold = False
    Selection.Font.Bold = True
    Selection.Interior.ColorIndex = 15
    Columns("R:W").Select
    Range("R2").Activate
    Selection.Borders(xlDiagonalDown).LineStyle = xlNone
    Selection.Borders(xlDiagonalUp).LineStyle = xlNone
    With Selection.Borders(xlEdgeLeft)
        .LineStyle = xlContinuous
        .Weight = xlThin
        .ColorIndex = xlAutomatic
    End With
    With Selection.Borders(xlEdgeTop)
        .LineStyle = xlContinuous
        .Weight = xlThin
        .ColorIndex = xlAutomatic
    End With
    With Selection.Borders(xlEdgeBottom)
        .LineStyle = xlContinuous
        .Weight = xlThin
        .ColorIndex = xlAutomatic
    End With
    With Selection.Borders(xlEdgeRight)
        .LineStyle = xlContinuous
        .Weight = xlThin
        .ColorIndex = xlAutomatic
    End With
    With Selection.Borders(xlInsideVertical)
        .LineStyle = xlContinuous
        .Weight = xlThin
        .ColorIndex = xlAutomatic
    End With
    With Selection.Borders(xlInsideHorizontal)
        .LineStyle = xlContinuous
        .Weight = xlThin
        .ColorIndex = xlAutomatic
    End With

    Range("K1:P2").Select
    Selection.Interior.ColorIndex = 15
    Selection.Font.Bold = False
    Selection.Font.Bold = True
    Columns("K:P").Select
    Range("K2").Activate
    Selection.Borders(xlDiagonalDown).LineStyle = xlNone
    Selection.Borders(xlDiagonalUp).LineStyle = xlNone
    With Selection.Borders(xlEdgeLeft)
        .LineStyle = xlContinuous
        .Weight = xlThin
        .ColorIndex = xlAutomatic
    End With
    With Selection.Borders(xlEdgeTop)
        .LineStyle = xlContinuous
        .Weight = xlThin
        .ColorIndex = xlAutomatic
    End With
    With Selection.Borders(xlEdgeBottom)
        .LineStyle = xlContinuous
        .Weight = xlThin
        .ColorIndex = xlAutomatic
    End With
    With Selection.Borders(xlEdgeRight)
        .LineStyle = xlContinuous
        .Weight = xlThin
        .ColorIndex = xlAutomatic
    End With
    With Selection.Borders(xlInsideVertical)
        .LineStyle = xlContinuous
        .Weight = xlThin
        .ColorIndex = xlAutomatic
    End With
    With Selection.Borders(xlInsideHorizontal)
        .LineStyle = xlContinuous
        .Weight = xlThin
        .ColorIndex = xlAutomatic
    End With

    Range("D1:I2").Select
    Selection.Interior.ColorIndex = 15
    Selection.Font.Bold = False
    Selection.Font.Bold = True
    Columns("D:I").Select
    Range("D2").Activate
    Selection.Borders(xlDiagonalDown).LineStyle = xlNone
    Selection.Borders(xlDiagonalUp).LineStyle = xlNone
    With Selection.Borders(xlEdgeLeft)
        .LineStyle = xlContinuous
        .Weight = xlThin
        .ColorIndex = xlAutomatic
    End With
    With Selection.Borders(xlEdgeTop)
        .LineStyle = xlContinuous
        .Weight = xlThin
        .ColorIndex = xlAutomatic
    End With
    With Selection.Borders(xlEdgeBottom)
        .LineStyle = xlContinuous
        .Weight = xlThin
        .ColorIndex = xlAutomatic
    End With
    With Selection.Borders(xlEdgeRight)
        .LineStyle = xlContinuous
        .Weight = xlThin
        .ColorIndex = xlAutomatic
    End With
    With Selection.Borders(xlInsideVertical)
        .LineStyle = xlContinuous
        .Weight = xlThin
        .ColorIndex = xlAutomatic
    End With
    With Selection.Borders(xlInsideHorizontal)
        .LineStyle = xlContinuous
        .Weight = xlThin
        .ColorIndex = xlAutomatic
    End With
    ActiveWindow.ScrollColumn = 2
    ActiveWindow.ScrollColumn = 1
End Sub

Si je fais manuellement la partie en rouge, la macro fonctionne.

Si je lance comme ca, tous les nombres >1000 que je modifie avec le truc en rouge restent en mode texte

Si je change la partie en rouge par :
Code:
  Columns("J:J").Select
    Selection.Replace What:=" ", Replacement:="", LookAt:=xlPart, _
     SearchOrder:=xlByRows, MatchCase:=False, SearchFormat:=False, _
        ReplaceFormat:=False
    Selection.Replace What:=",", Replacement:=".", LookAt:=xlPart, _
        SearchOrder:=xlByRows, MatchCase:=False, SearchFormat:=False, _
        ReplaceFormat:=False

alors tout passe bien en nombre colonne J, mais j'ai une erreur que je ne comprend pas (ce que j'ai mis en jaune), ou il me dit impossible de lire la propriété Pivot table.


Si quelqu'un pense qu'il peut corriger ca avec les fichiers, je veux bien lui envoyer en message privé à la rigueur...
 

Robert

XLDnaute Barbatruc
Repose en paix
Re : Remplacer Virgule par Point dans une colonne et par macro

Bonjour le fil, bonjour le forum,

C'est un peu difficile de mettre les fichiers comptable d'une grosse société en pièce jointe sur un forum...

C'est pas si difficile que ça de recréer un fichier exemple avec le même environnement (nom des onglets, macros, etc...) et une poignée de données non confidentielles.
Mais il est vrai que ça demande un effort...
 

ralph45

XLDnaute Impliqué
Re : Remplacer Virgule par Point dans une colonne et par macro

Bonjour le fil et à toi nicopec,

En lisant ton message original, quelque chose m'a attiré l'attention : tu parles d'une extraction. J'ai déjà rencontré ce problème avec des dates ou des nombres provenant de divers systèmes informatiques...

Avec l'enregistreur de macros, sélectionne ta colonne, puis "Données", "Convertir" et choisis le mode "Standard" parmi les autres choix (Texte, JMA, etc.)

A plus !
 

Sheldor

XLDnaute Occasionnel
Supporter XLD
Re : Remplacer Virgule par Point dans une colonne et par macro

bonjour ralph45,
je n'ai qu'un message sur ce fil dont je ne suis pas à l'origine mais comme je suis tombé dessus ce matin je mettais un bout de solution (inspiré de que j'ai lu) pour les prochains qui chercheront comme moi, en ce qui me concerne j'avais besoin de faire la transformation sur une sélection.
pas compris pour la manip avec "convertir"
bon we
 

Discussions similaires

Réponses
1
Affichages
127

Statistiques des forums

Discussions
312 215
Messages
2 086 331
Membres
103 188
dernier inscrit
evebar