Jean doit remplacer les virgules par des points dans une table de nombres. Il travaille en France, sur un PC français, mais il a besoin de « traduire » ces chiffres pour une application américaine non Excel. Lorsqu’il effectue manuellement une recherche et un remplacement, tout fonctionne bien. Bien sûr, ses nombres sont convertis en chaînes, mais ce n’est pas grave avec Jean. Lorsqu’il essaie de faire la même opération Rechercher et remplacer dans une macro, rien ne se passe; les virgules semblent être ignorées. Jean se demande comment il peut faire cette tâche dans une macro plutôt que d’avoir à le faire manuellement à chaque fois.

Il est relativement facile de modifier temporairement ce qu’Excel utilise comme paramètres régionaux pour pouvoir afficher les informations comme Jean le souhaite. La macro suivante bascule assez facilement entre les paramètres souhaités:

Sub ChangeNumberFormat()

With Application         .UseSystemSeparators = False         If .DecimalSeparator = "." Then             .DecimalSeparator = ","

.ThousandsSeparator = "."

Else            .DecimalSeparator = "."

.ThousandsSeparator = ","

End If     End With End Sub

Cela change la façon dont les informations sont affichées, et vous pouvez ensuite exporter les informations dans le format non Excel souhaité (tel que CSV). Une fois terminé, exécutez à nouveau la macro et vous devriez retrouver vos paramètres régionaux tels qu’ils étaient à l’origine. L’avantage de cette approche est que vous ne changez jamais vraiment ce qui se trouve dans les cellules, juste comment ces informations sont affichées. Cela signifie que vos numéros restent des numéros, capables de continuer à être utilisés en tant que tels.

Si vous avez besoin de quelque chose de plus direct, il est probablement préférable de ne pas utiliser Rechercher et remplacer. À la place, utilisez la macro pour modifier directement le contenu de chaque cellule. Une telle approche peut s’exécuter beaucoup plus rapidement que de s’appuyer sur Rechercher et remplacer, même dans une macro. Voici une application simple de ce concept:

Sub SwitchCommasPeriods()

Dim c As Range     Dim sTemp As String          For Each c In Selection         sTemp = c.Text         sTemp = Replace(sTemp, ",", "|")

sTemp = Replace(sTemp, ".", ",")

sTemp = Replace(sTemp, "|", ".")

c = sTemp     Next c End Sub

Notez quelques éléments dans la macro. Tout d’abord, il examine la propriété Text pour chaque cellule. La raison en est que la propriété Text renvoie la valeur mise en forme de la cellule, en d’autres termes, ce qui est affiché. (Si vous regardez simplement la propriété Value, vous obtiendrez le nombre non formaté, ce qui n’est pas ce que vous voulez utiliser.)

La deuxième chose à noter est que la fonction Remplacer est utilisée pour remplacer d’abord toutes les virgules par une barre verticale, puis tous les points par des virgules et enfin toutes les barres verticales par des points. Cette approche est nécessaire car vous échangez essentiellement des points et des virgules dans le texte.

Pour utiliser la macro, sélectionnez simplement les cellules que vous souhaitez affecter, puis exécutez-la. Seules les cellules sélectionnées sont traitées. Si une cellule contient une formule, la macro remplace cette formule par le résultat traité de la formule. Cela devrait cependant convenir aux besoins de Jean.

_Note: _

Si vous souhaitez savoir comment utiliser les macros décrites sur cette page (ou sur toute autre page des sites ExcelTips), j’ai préparé une page spéciale qui comprend des informations utiles.

lien: / excelribbon-ExcelTipsMacros [Cliquez ici pour ouvrir cette page spéciale dans un nouvel onglet de navigateur].

ExcelTips est votre source pour une formation Microsoft Excel rentable.

Cette astuce (13675) s’applique à Microsoft Excel 2007, 2010, 2013, 2016, 2019 et Excel dans Office 365.