Modification d'une donnée sous forme de phrase contenue dans une cellule

Bonjour,

Je débute en VBA et je souhaiterais faire un traitement sur un ensemble de fichiers.txt grâce à une Macro Excel.

L'idée est de modifier la donnée dans UNE cellule d'une feuille Excel. la donnée est sous forme de phrase. exple : <<Toto possède deux voitures de 400.000 € chacune>>. Et la modification que je veux apporter est sur 400.000 , soit du 31e au 37e caractère (en comptant les espaces comme caractères).

Je voudrais pouvoir demander à l'utilisateur de rentrer manuellement le prix qu'il veut afficher au même format (tenant sur 7 caractères avec un point) c'est à dire par exemple : 5000.00. Voir exemple en Pièce Jointe.

Est ce que cela est possible ? Si oui, toute propositions d'idée serait la bienvenue

En espérant que ma demande soit claire, je vous remercie d'avance.

7exemple.xlsx (8.10 Ko)

Bonjour Crzemetasensei,

Pour pouvoir traiter un ensemble de fichiers .txt il faut que le texte à remplacer ait une cohérence avec la partie remplaçante.

Dans ton exemple, on peut considérer que 400.000 € a été mal inscrit et que c'était plutôt 4000.00 € en considérant que les voitures n'étaient pas des épaves. Ce qui à contrario indiquerait alors un prix de 400.00 €. Soit un 0 final de trop. Au lieu d'un point mal placé.

Donc il y a trop d'imprécisions pour un changement automatisé s'effectuant sur un prix qui va dépendre de la qualité d'un bien.

Difficile dans ce cas de créer par VBA un programme avec des paramètres trop vagues.

Bonjour,

sans t'embêter avec une macro, avec notepad++ tu peux faire un Remplacer sur tous les fichier txt d'un répertoire.

eric

Bonjour,

Je vous remercie pour vos réponses.

En fait, je dois réaliser cette tache (que je dois réaliser en VBA) sur des fichiers profssionnels. Donc j'ai essayé d'adapté mon exemple à ce que je dois faire.

En fait j'ai le code fait. Juste que la valeur des prix du véhicules après traitement, je n'ai pas le format désiré: j'obtient par exemple pour une valeur de 200.000 renseignée par l'utilisateur : 200. (Voir fichier1aftertreatment)

Je rappelle le format que je veux est par exemple 200.000 ou 2000.00 (tenant sur 7 caractères et avec un point : ce sont des éléments importants).

Function ConcatSerie_2(cel As Range, Optional CarSiVide As String = "") As String

' Fonction servant à lire les cellules vides comme des caractères ESPACE

Dim Res2 As String

Dim CL%, j%

a = cel.Row

b = cel.Column

CL = Cells(a, 200).End(xlToLeft).Column 'décalage vers la gauche

For j = 1 To CL

If Cells(a, j) = "" Then Res2 = Res2 & CarSiVide Else Res2 = Res2 & Cells(a, j)

Next j

ConcatSerie_2 = Res2

'MsgBox (Res2)

End Function

Sub Macro2()

'

' Macro2 Macro

Dim Prix_une_voiture As String

'

Path = "D:\Users\username\Desktop\dossier de test\" ''définit la chemin d'accès CA aux fichiers à ouvrir

MyFile = Dir(Path & "*.txt") 'définit le premier fichier source Excel contenu dans le dossier ayant CA comme chemin d'accès

Nom = InputBox("Nom du propriétaire des voitures ?")

Prix_une_voiture = "200.000" ' Prix de la voiture à renseigner

Do While MyFile <> "" 'exécute tant qu'il existe des fichiers source

Workbooks.Open Path & MyFile 'ouvre le fichier source MyFile

'stocker NomFeuille

localise = Cells.Find(Nom, , xlValues).Address ' Récuperation de l'adresse du nom du propriétaire

y = Range(localise).Column ' Pour stocker le num la colonne

x = Range(localise).Row ' Pour stocker le num de la ligne

CL = Cells(x, 200).End(xlToLeft).Column 'décalage vers la gauche

Range(localise).Select

' Définition des Séparateurs de colonnes

Selection.TextToColumns Destination:=Range(localise), DataType:=xlFixedWidth, _

FieldInfo:=Array(Array(0, 1), Array(4, 1), Array(5, 1), Array(12, 1), Array(13, 1), _

Array(17, 1), Array(18, 1), Array(26, 1), Array(27, 1), Array(29, 1), Array(30, 1), Array( _

37, 1), Array(38, 1), Array(39, 1), Array(40, 1)), TrailingMinusNumbers:=True

Range(localise).Select ' pour fixer la ligne de modification

ActiveCell.EntireRow.Cells(, 11) = Prix_une_voiture ' Affectation du nouveau prix de la voiture

Range(localise) = ConcatSerie_2(Sheets(NomFeuille).Cells(x, y), " ") ' Modification du prix du proriétaire

' Effacement des colonnes

For j = 2 To 15

Sheets(NomFeuille).Cells(x, j).ClearContents

Next j

ActiveWorkbook.Close SaveChanges:=True 'ferme le fichier source txt et enregistre

MyFile = Dir() 'définit le prochain fichier source excel du dossier ayant CA comme chemin d'accès

Loop

End Sub

En vrai le problème qui se pose est que je n'arrive pas à garder le format XXX.000 comme je le souhaite.

Je ne sais pas si la demande est encore floue :/

A dispo

Merci

Je ne comprend pas pourquoi tu découpes pour reconstituer.

Il s'agit d'un simple remplacement de chaine :

    Dim ch As String, ancien As String, nouveau As String
    ch = "Toto possède deux voitures de 200.000 € chacune"
    ancien = "200.000"
    nouveau = "400.000"
    ch = Replace(ch, ancien, nouveau)
    MsgBox ch

eric

Je découpe pour isoler la cellule contenant le prix de la voiture pour et connaitre les coordonnées de la cellule où est stockée la donnée que je souhaite modifier

Je te remercie pour ce programme, il fait exactement ce que je veux en effet. Il fonctionne tellment bien qu'il me fait plus que je lui demande...

Je m'explique : En fait je veux modifier une seule valeur.

Lors que j'ai par exemple :

ch = "Toto possède deux voitures de 200.000 € et 200.000 €"

ancien = "200.000"

nouveau = "400.000"

Après traitement,

ch = Replace(ch, ancien, nouveau)

Il me sort : Toto possède deux voitures de 400.000 € et 400.000 €"

Moi je voudrais juste : "Toto possède deux voitures de 400.000 € et 200.000 €"

Une autre solution à proposer svp ?

(Je vous prie de ne pas prêter attention aux exemples qui ne sont pas très sensés lol… ce qui importe c'est vraiment la fonctionnalité du code)

Merci

dans ce cas :

ch = Replace(ch, ancien, nouveau, , 1)

Comme quoi il vaut mieux mettre des exemples sensés sinon dans 3 jours on y est encore...

eric

Meric beaucoup ! Ca marche comme je veux

A+

Attention quand même que si tu le lances 2 fois il modifiera le 2nd nombre.

Il faudrait peut-être sécuriser en ajoutant un bout de la chaine devant le nombre recherché si ça peut être le cas.

Rechercher des sujets similaires à "modification donnee forme phrase contenue"