code remplace points par virgule

SSP34

XLDnaute Junior
Bonjour les XLnautes,

J'espère que vous avez été gâtés pour Noël.

Pour ma part je n'ai toujours pas été touché par la grâce XL ...
Je cherche un bon samaritain qui veuille bien m'aider.

Voilà donc où je coince :

* Je dois récupérer des nombres au format texte lorsque je fais la copie.
Ensuite je remplace les "points" par des "virgules" et les calculs dépendants fontionnent très bien.

* J'ai utilisé l'enregistreur de macros pour inclure cette étape dans mon code (composé d'autres routines etc) mais ça ne marche pas!

Voici ce qu'a donné l'enregistreur :

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

Ci-joint un exemple avec les résultats successifs.

Par avance merci.

Pablo
 

Pièces jointes

  • Mon exemple.xls
    19 KB · Affichages: 77
  • Mon exemple.xls
    19 KB · Affichages: 82
  • Mon exemple.xls
    19 KB · Affichages: 82

Tibo

XLDnaute Barbatruc
Re : code remplace points par virgule

Salut SSP,

Manuellement, cela pourrait se traiter ainsi :

- mettre 1 dans une cellule extérieure
- Faire un copier sur ce 1
- sur la zone en question, faire un Collage Spécial - Multiplication.

Tout ceci, bien entendu, après avoir procédé au remplacement du point par la virgule.

Essaye ça avec l'enregistreur, ça devrait régler ton problème

Bonne fin d'après-midi (et d'année)

@+
 

Bernard-Louis

XLDnaute Occasionnel
Re : code remplace points par virgule

Bonsoir a toutes et tous.
J'ai rame pas mal avec ce prob de . a remplacer par une ,
Ne te fatigue pas avec une macro en automatique il y a des cellules oubliees.
Le bout de macro ci dessous fonctionne impeccablement bien car il fait cellule par cellule et là ca fonctionne. C'est un moniteur lors d'un stage Excel qui l'a faite a cause de tous les problemes precedents.
Je ne peux pas plus t'aide car le VBA et moi on est pas copain.

'Le code ci-dessous empeche de voir le defilement des cellules quand la macro travaille
Application.ScreenUpdating = False

'FOR EACH = pour chaque cellule de la plage, Cells (N°de ligne, N°de colonne)
'Activ cell.column = la colonne ou se trouve le curseur (pour une colonne fixe)

'For Each Cellule In Range(Cells(1, ActiveCell.Column), _
Cells(65536, ActiveCell.Column).End(xlUp))

'prise en compte de toutes les cellules de la feuille (en partant de A1)
For Each Cellule In Range("a1").CurrentRegion


'selection de la cellule en cours
'exemple cellule contient 123.45
Cellule.Select

If IsError(Cellule) Then
Application.StatusBar = "erreur en cellule : " & Cellule.Address
MsgBox "erreur en cellule : " & Cellule.Address
End
Else
Application.StatusBar = Cellule.Address & " : " & Cellule
End If

'Attente de 1 seconde entre chaque cellule(formule dessous)
'Application.Wait Now + TimeValue("00:00:01")

'calcul du point dans la cellule en cours
'ici en position 4
Position_Décimale = InStr(1, Cellule, ".")

If Position_Décimale > 0 Then
'on ne prends en compte que les cellules qui contiennent 1 point

If IsNumeric(Left(Cellule, Position_Décimale - 1)) Or _
Position_Décimale = 1 Then
'prends en compte
'1.que les cellules dont la partie qui precede le point, est numerique
'exemple : 123.45
'2.les cellules qui ont un point en 1ere position exemple .45

'position decimale -1 : ici 3
'Left(Cellule, Position_Décimale - 1): correspond a la partie entiere : ici 123
'Len(Cellule) : correspond au nombre de caractere de la cellule, ici 6
'Len(Cellule) - Position_Décimale)correspond au nombre de caractere
'de la partie decimale, ici 2 (= 6-4)
'Right(Cellule, Len(Cellule) - Position_Décimale)correspond a la partie decimale, ici 45
'CDec = conversion en valeur decimale

Selection = CDec(Left(Cellule, Position_Décimale - 1) & "," & _
Right(Cellule, Len(Cellule) - Position_Décimale))
'le resultat final = partie entiere suivi d'une virgule suivi de la partie decimale
' ici 123,45
End If
End If

Next Cellule

'restauration de la barre d'etat
Application.StatusBar = False

'selection de la premiere cellule en cours
Range("a1").Select

'message de fin de traitement qui donne le nbre de cellules, de colonnes et de lignes traitées
MsgBox Range("a1").CurrentRegion.Cells.Count & " Cellules ont été traitées" & vbCrLf & _
Range("a65536").End(xlUp).Row & " Lignes" & vbCrLf & _
Range("iv1").End(xlToLeft).Column & " Colonnes" & vbCrLf & _
"Pour la feuille " & ActiveSheet.Name

End Sub
 

SergiO

XLDnaute Accro
Re : code remplace points par virgule

Bonjour à tous,

Code:
     Selection.Replace What:=".", Replacement:=",", LookAt:=xlPart, _
        SearchOrder:=xlByRows, MatchCase:=False
Le code utilisé implique que tu sélectionnes les cellules à remplacer avant de lancer le code. Le fais-tu?

@+
 
Dernière édition:

SSP34

XLDnaute Junior
Re : code remplace points par virgule

Bonsoir à tous,

Un grand merci pour votre aide.

Pierre-Jean je vais ajouter quelques lignes pour bloquer l'affichage et le calcul afin d'accélérer le processus. En effet mon tableau initial fait fait environ 140 lignes et c'est particulièrement long à traiter.

Suivant les conseils de Bernard-Louis :

Application.ScreenUpdating = False puis true à la fin
et blocage des calculs

With Application
.Calculation = xlManual
.MaxChange = 0.001
End With
ActiveWorkbook.PrecisionAsDisplayed = False

+ à la fin activation des calculs :

With Application
.Calculation = xlAutomatic
.MaxChange = 0.001
End With
ActiveWorkbook.PrecisionAsDisplayed = False

Qu'en penses-tu?

Pablo.
 

pierrejean

XLDnaute Barbatruc
Re : code remplace points par virgule

re

je ne pense pas que 140 lignes posent un probleme de rapidité a moins d'etre encore sur un ordinateur du siecle dernier

mais tu peux proceder de la sorte si tu le crains
dans ce cas les

.MaxChange = 0.001

sont tout de même de trop
 

SSP34

XLDnaute Junior
Re : code remplace points par virgule

Merci Pierre-Jean,

Cela marche impeccable.

Le matériel :

P III / NT4

Durée d'exécution du code initial = environ 13 secondes ...
Avec code final = immédiat.

Bonsoir à tous et encore merci.

Pablo.
 

Discussions similaires

Statistiques des forums

Discussions
312 504
Messages
2 089 090
Membres
104 027
dernier inscrit
Luc ECODIS