Macro pour convertir les points en virgules

Bonsoir,

Au travail je suis régulièrement amené à traiter des données issu d'automate. Le probleme c'est qu'une fois mes données extraites en fichier excel les valeurs que j'obtient sont de ce genre "200.000" ou 15.567 habituellement je sélectionne ma feuille j'utilise l'outil recherche et remplace pour transformer les . en , ce qui me donne 200 et 15,567 ce qui est parfait mais un peu pénible à la longue.

Je voulais créer une macro pour gagner un peu de temps, j'ai donc utilisé l'outil de création, réalisé les étapes décrite au dessus mais lorsque j'utilise la macro j'obtiens 200 000 et 15,567 ce qui fausse une bonne partie des calculs qui suivent. J'ai farfouillé sur des forums ou j'ai trouvé des gens avec le même problème j'ai trouvé la macro ci-dessous.

Sub remplace()

Range("A1") = Replace(Range("A1"), ".", ",") * 1

End Sub

qui fonctionne bien mais que pour A1, j'ai réussi à la modifier pour qu'elle fonctionne pour la cellule sélectionné (car elle ne fonctionne que sur la 1er cellule quand j'en sélectionne plusieurs) mais mes données s'étendent généralement de A1 à N300 alors je perdrais du temps avec cette méthode. De plus certaines cellules contiennent du texte sans "." ce qui renvoi une erreur. Mes compétences actuel en VBA se termine ici.

C'est pourquoi je cherche un super héro du VBA pour m'aider à adapter la macro ci-dessus pour qu'elle s'applique à toutes les cellules de ma plage (A1:N300) et qui ne bloque pas si il n'y à pas de "." j'avais pensé à une boucle mais je ne comprend pas tout^^

Merci

Roberto

Bonsoir,

une proposition :

Sub LRD_Test()
    tablo = Range("A1:N300").Value
    On Error Resume Next
    For i = 1 To UBound(tablo)
        For j = 1 To UBound(tablo, 2)
            tablo(i, j) = Replace(tablo(i, j), ".", ",") * 1
        Next j
    Next i
    Range("A1").Resize(UBound(tablo), UBound(tablo, 2)) = tablo
End Sub

Le principe : on met en mémoire toutes les données de votre plage A1:N300, puis on "scanne" ce tableau dans les deux dimension et chaque valeurs est transformée.
Ajout de la gestion d'erreur pour les cellules vides ou ne contenant pas de point.
Une fois toutes les données du tableau scannées, on insert le résultat à partir de la cellule A1 en redimensionnant avec le nombre de ligne et de colonne du tableau.

@ bientôt

LouReeD

Bonjour,

Ca fonctionne parfaitement, un grand merci!!

Tu peux me "traduire" ce que tu demande ligne par ligne? que je comprenne un peu + le fonctionnement pour ma culture perso? :p

Bonsoir,

' nom de la procédure
Sub LRD_Test()
    ' on assigne à la variable tablo les valeurs de la plage voulue
    tablo = Range("A1:N300").Value
    ' ce tableau prend la forme de la plage désignée donc autant de ligne et autant de colonne que la plage et les index des deux dimensions commence à 1 car "première" colonne et "première ligne"

    ' on demande à VBA de continuer d'exécuter le code même s'il trouve des erreurs, à utiliser en connaissance de cause sinon on peut se retrouver avec des soucis...
    On Error Resume Next
    ' on va boucler sur le nombre d'index de la première taille du tableau tablo qui ici venant d'une plage de cellule correspond aux lignes, Ubound donne l'index le plus haut de la dimension, l'info "première" dimension peut être omise
    For i = 1 To UBound(tablo)
        ' ici on va boucler sur les index de la deuxième dimension du tableau tablo, on voit que le "2" est obligatoire
        For j = 1 To UBound(tablo, 2)
            ' la valeur du tableau tablo aux coordonnées I,J prend la valeur du tableau tablo aux coordonnées I,J à laquelle on remplace le point par une virgule et on multiplie par 1 pour le "rendre" numérique
            tablo(i, j) = Replace(tablo(i, j), ".", ",") * 1
        ' colonne suivante
        Next j
    ' ligne suivante
    Next i
    ' à partir de la plage comprenant qu'une cellule A1, on redimensionne cette plage avec le nombre de ligne du tableau tablo et le nombre de colonne, et on affecte à cette plage redimensionnée le tableau tablo.
    Range("A1").Resize(UBound(tablo), UBound(tablo, 2)) = tablo
' fin de la procédure
End Sub
' certain aurait mis On Error Goto 0 pour réactiver les points d'arrêt de VBA en cas d'erreur, mais le End Sub en fait tout autant et comme après le resize il n'y a plus de code, ce n'est pas utile

@ bientôt

LouReeD

Parfait merci beaucoup pour ton aide et tes explications

Bonjour,

merci pour ce retour et vos remerciements !

@ bientôt

LouReeD

Rechercher des sujets similaires à "macro convertir points virgules"