remplacer en VBA en respectant la casse
#1
Débutant XLPages

Inscription: 11/03/2010

Messages: 18

Système d'exploitation:
PC
Version Excel utilisée:
2003-2007-2010
Posté le : 08-09-2010 18h07
Bonjour
Je suis en Excel 2003. (séparateur de décimales = ,)


Je souhaite dans une colonne de données remplacer les , par des .

Lorsque je fais la manip via Ctrl+h et en cochant la case 'Respecter la casse' ça marche.

Lorsque j'enregistre le code via l'enregistreur de macro, que je le simplifie et que je l'exécute sur le même type de données... ça ne marche pas...??... cf. fichier ci-joint

pouvez-vous me faire dire où le bas blesse ?

Par avance merci.


Pièce jointe:
xls pbMacro.xls   [ Taille: 69.50 Ko - Téléchargements: 531 ]
Hors Ligne
Rapport   Haut 

Re: remplacer en VBA en respectant la casse
#2
Webmestre

Inscription: 18/05/2006
De Saône-et-Loire (71)

Messages: 1539

Système d'exploitation:
PC
Version Excel utilisée:
97, 2000, 2002, 2003, 2007, 2010, 2013, 2016 et 365
Posté le : 08-09-2010 21h34
Bonsoir yaka, le Forum,

Là, tu tombes sur LE piège « classique » VBA et fort pénible pour tout le monde...

La première chose à prendre en compte, c'est que si en France le séparateur décimale est la virgule, chez les anglo-saxons, ça reste le point.
La deuxième chose à assimiler, c'est que VBA c'est le côté sombre de la force : dans l'environnement VBA, tout est en anglais.

Pour s'en convaincre, il suffit de saisir dans l'éditeur VBA :
Range("A1").Value = 13.4 'avec un "point"
... tu obtiens « 13,4 » (avec une "virgule") dans la cellule de feuille de calcul.

Sur nos versions Excel en français, il y a donc une multitude de conversions automatiques de format réalisées par le système pour traiter, puis ré-afficher les données numériques.

J'ai testé dans tous les sens, il me semble impossible d'y arriver en utilisant globalement la méthode Replace comme tu l'as fait.

En lieu et place, j'ai utilisé Replace() dans une boucle, mais en tant que fonction cette fois (voir l'aide VBA sur le mot clé Replace pour la distinction entre méthode Excel et fonction VBA). J'ai aussi usé de la propriété FormulaLocal des cellules et, pour rendre l'ensemble pas trop lent, j'ai optimisé pour ne cibler que les seules cellules concernées (celles contenant un nombre uniquement).

Je te propose donc cette procédure à la place de la tienne :
Sub ChangerVirguleEnPoint()
'myDearFriend!  -  www.mdf-xlpages.com
Dim Plage As Range, R As Range
Dim T As String
    Application.ScreenUpdating = False
    'Trouver la colonne contenant le mot "Données" en ligne 3
    Set Plage = Rows(3).Find("Données").EntireColumn
    'Ne cibler que les cellules contenant une valeur numérique
    Set Plage = Plage.SpecialCells(xlCellTypeConstants, 1)
    'Traitement de chaque cellule
    For Each R In Plage
        R.FormulaLocal = Replace(R.Value, ",", ".")
    Next R
    Application.ScreenUpdating = True
End Sub

J'espère que ça pourra te convenir...

Cordialement,




Didier_mDF
Image redimensionnée
Le Webmaster

La réponse vous satisfait ? Merci de revenir solder le sujet en [résolu], voir ce lien
Hors Ligne
Rapport   Haut 

Re: remplacer en VBA en respectant la casse
#3
Accro XLPages

Inscription: 23/05/2008
De La Varenne Saint-Hilaire

Messages: 356

Système d'exploitation:
PC
Version Excel utilisée:
2010
Posté le : 08-09-2010 21h38
Bonsoir yaka,

Pas vu de résille, mais au cas où, avec l'enregistreur en gros j'obtiens ça:

Columns("E:E").Replace What:=",", Replacement:=".", LookAt:=xlPart, _
        SearchOrder:=xlByRows, MatchCase:=True

Vois si ça marche de ton coté ?

Bonne soirée,

Mth

Edit:  Bonjour myDearFriend
Heureusement que tu es passé sur le fil, j'étais bien loin !!
@ + :)
Hors Ligne
Rapport   Haut 

Re: remplacer en VBA en respectant la casse
#4
Débutant XLPages

Inscription: 11/03/2010

Messages: 18

Système d'exploitation:
PC
Version Excel utilisée:
2003-2007-2010
Posté le : 08-09-2010 21h49
Bonsoir

et en un mot... parfait !

utiliser la fonction Replace... je n'y avais pas pensé.

MERCI.

+++


Hors Ligne
Rapport   Haut 


Vous pouvez voir les sujets.
Vous ne pouvez pas débuter de nouveaux sujets.
Vous ne pouvez pas répondre aux contributions.
Vous ne pouvez pas éditer vos contributions.
Vous ne pouvez pas effacez vos contributions.
Vous ne pouvez pas ajouter de nouveaux sondages.
Vous ne pouvez pas voter en sondage.
Vous ne pouvez pas attacher des fichiers à vos contributions.
Vous ne pouvez pas poster sans approbation.

[Recherche avancée]


Qui consulte actuellement ce sujet ?   1 Utilisateur(s) anonymes