Urgent: Remplace points par virgules-VBAExcel

kaaille -  
 kaaille -
Bonjour !
J'ecume tous les sites de prog pour savoir comment intégrer dans une macro le remplacement des points par des virgules.. J'ai vu que tompols avait le même problème, et qu'il a réussi à le résoudre tout seul, mais j'ai essayé sans succès... Quelqu'un pourrait m'aider?? J'ai bien une facon, mais avec le nombre de données que j'ai, c'est 10 fois trop long :

Function RemplacePntVir(NomOnglet)

Sheets(NomOnglet).Select
Range("G1:I1").Select
Range(Selection, Selection.End(xlDown)).Select

FinLigne = Selection.Rows.Count
Range("G1").Select
For j = 2 To FinLigne
g = Range("G" & j).Cells
g = Replace(g, ".", ",")
Range("G" & j).Cells = g
Next j

End Function


J'AI BESOIN D'AIDE SVP !!!!!!!

Merci d'avance

5 réponses

Kobaya Messages postés 282 Date d'inscription   Statut Membre Dernière intervention   214
 
salut,

as-tu penser aux paramètres généraux de Windows?

0
kaaile
 
Salut,
Non, je n'ai pas essayé, mais je ne vois pas trop ce que tu me conseilles de faire.. Pourrais-tu me donner plus de détails ?
Merci en tout cas de ta réponse !
Perrine
0
random Messages postés 1612 Date d'inscription   Statut Membre Dernière intervention   155
 
Cells.Select

Selection.Replace What:=",", Replacement:=".", LookAt:=xlPart, _
SearchOrder:=xlByRows, MatchCase:=Fals
0
kaaille
 
Random,
j'avais déjà essayé ce code, mais malheureusement il ne convient pas du tout. Quand je lance la macro sur les données suivantes :

-0.551600
2.013400
15.525700
-0.941400

il me donne

-0,551600
2 013 400
15 525 700
-0,941400

C'est bon pour les données inférieures à 1, mais pas pour le reste.. :S

Si tu as une autre idée.. Merci qd même !!
Lol !
Kaaille
0
tompols Messages postés 1273 Date d'inscription   Statut Contributeur Dernière intervention   435
 
Salut,

Quel est exactement ton pb ? Est-ce simplement le temps d'éxécution ???

A+
0
kaaille
 
Salut Tompols,
En effet, c'est le temps d'exécution qui me pose un problème, car j'ai beaucoup de données.
Si je le fais a la main (edition, remplacer...) je ne mets que qq secondes à tout faire défiler, mais je dois le faire pour 15 fichiers différents.
Si je le fais par la macro que j'ai publié, pour chaque fichier (moins de 100 données), je mets environ 3 min. Multiplier par 15, ca fait trop de temps à attendre.. (ds les 3/4h...ce qui est démesurer)..
C'est pour ca que je cherche un moyen plus efficace, sinon ca se fera à la main, mais ce n'est pas passionant poru les utilisateurs....
A bientot,
Kaaille
0
tompols Messages postés 1273 Date d'inscription   Statut Contributeur Dernière intervention   435
 
Salut,

Tu peux essayer comme ça :
Sub RemplacePntVir()

Application.ScreenUpdating = False
Columns("H:H").Select
Selection.Insert Shift:=xlToRight
For j = 2 To 65536
Range("H" & j).FormulaR1C1 = "=SUBSTITUTE(RC[-1],""."","","")"
Next j
Columns("H:H").Select
Selection.Copy
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
    :=False, Transpose:=False
Columns("G:G").Select
Selection.Delete Shift:=xlToLeft
Application.ScreenUpdating = True
End Sub

C'est du bricolage mais ça à l'air de tourner en a peu près 2 min pour une colonne entiere -65536 cellules - (insertion de colonne, puis utilisation de la foncction substitue, puis copier/coller valeurs et suppression de la colonne supplémentaire).
Est-ce que ça peut te suffire ?

A+

Tom
0
kaaille
 
Salut Tom !
J'ai adopter ton prog, mais pour des petis fichiers (140 données). Qd je le lance sur 1000 données, ca n'avance plus.. Ce sont les limites de VBA, ce n'est pas grave..
Merci encore, mais je continue tout de même à chercher (pour optimiser les 1000 données) ! Je ne m'avoue pas vaincue !
Bonne aprem !
Kaaille
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
tompols Messages postés 1273 Date d'inscription   Statut Contributeur Dernière intervention   435
 
Salut kaaille,

Chez moi ça tourne pas trop mal : env. 2 min pour 65536 données.
Tu peux le modifier pour qu'il ne travaille que sur les cellules non-vides :
Sub RemplacePntVir()

Application.ScreenUpdating = False
Columns("H:H").Select
Selection.Insert Shift:=xlToRight
For j = 2 To 65536
If Not IsEmpty(Range("G" & j)) Then Range("H" & j).FormulaR1C1 = "=SUBSTITUTE(RC[-1],""."","","")"
Next j
Columns("H:H").Select
Selection.Copy
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
    :=False, Transpose:=False
Columns("G:G").Select
Selection.Delete Shift:=xlToLeft
Application.ScreenUpdating = True
End Sub


A+

Tom
0
kaaille
 
Heloo !
Malheureusement, je n'ai pas de cellules non vides, mais je note l'idée pour un prochain prog, j'en aurai certainement besoin !
J'ai changé un peu ton prog, il tourne plus vite comme ca.. Je devais changer les données de 3 colonnes. C'est meme plus rapide que de passer par une fonction, j'ai essaye, et c un meilleure.
Le fait de ne pas insérer une colonne entre G et H, mais de mettre les données plus loin accelere aussi le prog.

bon ce n'est pas optimale, mais c deja pas mal !!

Sub RemplacePntVir2()

'Application.ScreenUpdating = False
colonneG = "G"
colonneAA = "AA"

Range(colonneG & "2").Select
Range(Selection, Selection.End(xlDown)).Select
Finligne = Selection.Rows.Count

For j = 2 To Finligne
Range(colonneAA & j).FormulaR1C1 = "=SUBSTITUTE(RC[-20],""."","","")"
Next j

colonneH = "H"
colonneAB = "AB"
For j = 2 To Finligne
Range(colonneAB & j).FormulaR1C1 = "=SUBSTITUTE(RC[-20],""."","","")"
Next j

colonneI = "I"
colonneAC = "AC"
For j = 2 To Finligne
Range(colonneAC & j).FormulaR1C1 = "=SUBSTITUTE(RC[-20],""."","","")"
Next j

Range(colonneAA & "2:" & colonneAC & Finligne).Select
Selection.Copy

Range(colonneG & "2 :" & colonneI & Finligne).Select
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
:=False, Transpose:=False

Columns(colonneAA & ":" & colonneAC).Select
Application.CutCopyMode = False
Selection.ClearContents

End Sub

Merci beaucoup !!

Kaaille
0
kaaille
 
Heloo !
Malheureusement, je n'ai pas de cellules non vides, mais je note l'idée pour un prochain prog, j'en aurai certainement besoin !
J'ai changé un peu ton prog, il tourne plus vite comme ca.. Je devais changer les données de 3 colonnes. C'est meme plus rapide que de passer par une fonction, j'ai essaye, et c un meilleure.
Le fait de ne pas insérer une colonne entre G et H, mais de mettre les données plus loin accelere aussi le prog.

bon ce n'est pas optimale, mais c deja pas mal !!

Sub RemplacePntVir2()

'Application.ScreenUpdating = False
colonneG = "G"
colonneAA = "AA"

Range(colonneG & "2").Select
Range(Selection, Selection.End(xlDown)).Select
Finligne = Selection.Rows.Count

For j = 2 To Finligne
Range(colonneAA & j).FormulaR1C1 = "=SUBSTITUTE(RC[-20],""."","","")"
Next j

colonneH = "H"
colonneAB = "AB"
For j = 2 To Finligne
Range(colonneAB & j).FormulaR1C1 = "=SUBSTITUTE(RC[-20],""."","","")"
Next j

colonneI = "I"
colonneAC = "AC"
For j = 2 To Finligne
Range(colonneAC & j).FormulaR1C1 = "=SUBSTITUTE(RC[-20],""."","","")"
Next j

Range(colonneAA & "2:" & colonneAC & Finligne).Select
Selection.Copy

Range(colonneG & "2 :" & colonneI & Finligne).Select
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
:=False, Transpose:=False

Columns(colonneAA & ":" & colonneAC).Select
Application.CutCopyMode = False
Selection.ClearContents

End Sub

Merci beaucoup !!

Kaaille
0