Format des cellule Fonction replace
Bonjour à tous,
Je suis face à un problème dont je ne trouve aucune solution sur aucun forum...
J'ai des exports de données, dont certaines valeurs sortent avec le caractère "j" (pour jours) mais qui m’empêche de les travailler correctement (colonne 1 et 4 du screen)
Je souhaite pouvoir utiliser une macro, qui me corrige automatiquement ce problème.
J'essaye donc de créer une macro pour réaliser cette opération de replace. Comme je suis pas un expert, j'utilise l'enregistrement automatique. Cependant, lors de la manipulation sur ma feuille (lors de l’enregistrement donc), lorsque je fais remplacer "j" par "", aucun soucis, l'ensemble de mes valeurs "j" sont supprimée et Excel reconnait directement les nombres et je peux réaliser des opérations (somme par exemple).
Mais lorsque je fais passer la macro, il supprime les valeur j mais le format de cellule passe en texte (en "dur", avec un petit triangle vert) et même le changement de format ne marche pas.
Exemple:
J'ai essayé d'utiliser la propriété "ReplaceFormat" en true avec un replace.format nombre, mais je ne dois pas l'utiliser correctement...
Avez vous une solution pour corriger ce problème?
Merci d'avance
Bonjour,
Voici une proposition où les valeurs à convertir en nombre sont dans la plage A1:A20:
Sub test()
tableau = Range("A1:A20")
For lig = 1 To UBound(tableau, 1)
tableau(lig, 1) = Val(Replace(tableau(lig, 1), "j", ""))
Next lig
Range("A1:A20").Value = tableau
End SubReplace enlève les "j", et Val convertit en nombre ce qu'il reste et le stocke dans le tableau VBA, le résultat est ensuite exporté sur la plage.
C'est possible de faire ça avec une plage de taille variable également.
Bonjour
Solution moins élégante:
Manuelle
Saisir 1 dans une cellule, la copier puis Faire un copier collage spécial valeur ==> multiplication
Bout de macro
Range("I3").FormulaR1C1 = "1"' saisir 1 dans une cellule
Selection.Copy
Range("F4:F10").Select ' ta zone
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlMultiply, _
SkipBlanks:=False, Transpose:=False
A toutes fins utiles
FINDRH
Bonjour,
Merci pour vos réponses,
J'ai un soucis dans vos propositions, dans la colonne, j'ai également des données en pourcentage, qui eu sont bien à garder en % et non en nombre.
Je veux donc juste corriger les "j".
La fonction replace ne permet pas de garder le format classique? car quand je le fait en mode manuel, j'obtiens ce que je veux (suppression du j, et gestion automatique du nombre): CF exemple avec quelques valeurs en colonne 1 modifiée sans macro juste avec Ctrl+H.
J'ai essayé autrement, avec l'enregistreur de macro également...
j'obtiens:
Range("A1:A2").Replace What:="j", Replacement:="", LookAt:=xlPart, _
SearchOrder:=xlByRows, MatchCase:=False, SearchFormat:=False, _
ReplaceFormat:=Falsequi marche de mon côté, ça convertit bien en nombre les valeurs même en lançant la macro...
C'est bien un code comme ça qui a été utilisé?
Exactement ce type de code:
Range("I48:I64").Select
Selection.Replace What:="j", Replacement:="", LookAt:=xlPart, _
SearchOrder:=xlByRows, MatchCase:=False, SearchFormat:=False, _
ReplaceFormat:=False, FormulaVersion:=xlReplaceFormula2J'ai essayé en repassant le range dans la formule mais même résultat. La partie sélectionnée qui a été faite via l'enregistreur de macro, et les autres qui sont des tests avec la macro, mais toujours le même résultat, même si je force :
Range("i48:i64").NumberFormat = "0.00"Si cela marche chez toi, cela provient peux être de paramètre Excel, soit du à la version, soit vba... Mais aucune idée de ou cela peut provenir!
Bonjour,
Et si tu mettais un exemple de ton fichier, qui reprend ce "dysfonctionnement"?
On gagnerait en temps et en "supputations"...
Bonne fin d'apm
Bien sur, voici un extrait du fichier:
Je cherche donc à supprimer les "j" dans les colonne I et L, et à trouver des valeurs en format standard (et non en texte)
Range("I:I,L:L").Select
Selection.Replace What:="j", Replacement:="", LookAt:=xlPart, _
SearchOrder:=xlByRows, MatchCase:=False, SearchFormat:=False, _
ReplaceFormat:=False, FormulaVersion:=xlReplaceFormula2Bonjour lgz-onikuza et
Une petite présentation ICI serait la bienvenue
Si vous ne l'avez pas encore fait, je vous invite à lire :
- La charte du forum
- Quelques fonctionnalités du forum à connaître
Regardez aussi les petites icônes mises à votre disposition dans la barre de menu qui :
- vous permettent de poster un code (</>)
- ou de clôturer un fil lorsque vous avez terminé (V)
Merci pour votre participation
Cordialement
Bonsoir,
Je vois qu'il y a 18,30 j et à côté 10.16
En plus du j, il y a d'un côté, un séparateur décimal avec ,
et de l'autre .
Je pense qu'il faut remplacer le "," par "." sinon ça ne va pas compter ça comme du texte...
Ce qui donnerait:
Columns("I:J").Replace What:="j", Replacement:="", LookAt:=xlPart, _
SearchOrder:=xlByRows, MatchCase:=False, SearchFormat:=False, _
ReplaceFormat:=False
Columns("I:J").Replace What:=",", Replacement:=".", LookAt:=xlPart, _
SearchOrder:=xlByRows, MatchCase:=False, SearchFormat:=False, _
ReplaceFormat:=FalseRemarque, j'ai l'impression que de votre côté le séparateur décimal est "," donc pas sûr que ça fonctionne mon histoire...
Sinon voir pour rajouter
Columns("I:I").TextToColumns Destination:=Range("I1"), DataType:=xlDelimited, _
TextQualifier:=xlDoubleQuote, ConsecutiveDelimiter:=False, Tab:=False, _
Semicolon:=False, Comma:=False, Space:=False, Other:=False, FieldInfo _
:=Array(1, 1), TrailingMinusNumbers:=True
Columns("J:J").TextToColumns Destination:=Range("J1"), DataType:=xlDelimited, _
TextQualifier:=xlDoubleQuote, ConsecutiveDelimiter:=False, Tab:=False, _
Semicolon:=False, Comma:=False, Space:=False, Other:=False, FieldInfo _
:=Array(1, 1), TrailingMinusNumbers:=TrueJe bidouille parce que de mon côté je ne rencontre vraiment pas ce problème...
Bonjour @Ausecour,
Et bien ta proposition de remplacer les "," par un "." fonctionne :-)
Columns("I:J").Replace What:=",", Replacement:=".", LookAt:=xlPart, _
SearchOrder:=xlByRows, MatchCase:=False, SearchFormat:=False, _
ReplaceFormat:=FalseJe pensais pas que le fait de passer par une macro forcer Excel à garder le système décimal américain...
Merci beaucoup :-)
Bonne journée