[Résolu] [Calc] Rechercher & Remplacer un seul caractère différent dans une cellule

Discussions et questions sur tout ce qui concerne la programmation tous langages et tous modules confondus.

Modérateur : Vilains modOOs

Règles du forum
:alerte: Balisage obligatoire dans cette section !
Aidez-nous à vous aider au mieux en balisant correctement votre question : reportez-vous sur les règles de cette section avant de poster !
SolPro
Membre OOrganisé
Membre OOrganisé
Messages : 84
Inscription : 31 juil. 2022 12:38

[Résolu] [Calc] Rechercher & Remplacer un seul caractère différent dans une cellule

Message par SolPro »

[Edit] Ajout de la balise Calc

Bonsoir à tous

J'ai besoin de votre regard éclairé.

Tous les jours, les personnes qui travaillent avec moi réalisent une tâche que j'ai décidé d'automatiser.
Je suis donc parvenu à automatiser la création d'une table dynamique

Je continue l'automatisation.
Soit une feuille appelée "Encaissements par Prélèvement", colonne F "Code budget".

Certaines valeurs doivent être modifiées avant le lancement de la macro "Plvt--> construction de la table dynamique".

J'ai donc après maintes recherches trouvé un début de solution et j'ai donc une macro qui me remplace un code 03607 par 03600 par exemple
Cependant pour une vingtaine d'autres codes, c'est uniquement un seul et unique caractère que je veux changer et je dois absolument me trouver sur la feuille "Encaissements par Prélèvement" et pas sur une autre feuille (car il y en 3 au départ, toutes complétées puis 4 avec le TCD)

Par exemple, 036HO deviendra 03600 et 036A0 deviendra 03600.
En fait, la valeur en position 4 doit devenir 0 (zéro).
Je pourrai le faire pour la vingtaine de valeur mais n'est-il pas possible pour limiter la longueur du code de dire "remplacer "036?0" par "03600" avec ? prenant n'importe quelle valeur ?

Je vous joins le fichier dans lequel se trouve 2 codes (construction tcd qui est "ok" et 'remplacementBC" qui est "moins "ok)
D'avance, merci
solpro_macro_remplacer.ods
------
Ajout du code en question

Code : Tout sélectionner

sub RemplacerBC
rem ----------------------------------------------------------------------
rem define variables
dim document   as object
dim dispatcher as object
rem ----------------------------------------------------------------------
rem get access to the document
document   = ThisComponent.CurrentController.Frame
dispatcher = createUnoService("com.sun.star.frame.DispatchHelper")

rem ----------------------------------------------------------------------
dim args1(17) as new com.sun.star.beans.PropertyValue
args1(0).Name = "SearchItem.StyleFamily"
args1(0).Value = 2
args1(1).Name = "SearchItem.CellType"
args1(1).Value = 0
args1(2).Name = "SearchItem.RowDirection"
args1(2).Value = true
args1(3).Name = "SearchItem.AllTables"
args1(3).Value = false
args1(4).Name = "SearchItem.Backward"
args1(4).Value = false
args1(5).Name = "SearchItem.Pattern"
args1(5).Value = false
args1(6).Name = "SearchItem.Content"
args1(6).Value = false
args1(7).Name = "SearchItem.AsianOptions"
args1(7).Value = false
args1(8).Name = "SearchItem.AlgorithmType"
args1(8).Value = 1
args1(9).Name = "SearchItem.SearchFlags"
args1(9).Value = 65536
args1(10).Name = "SearchItem.SearchString"
args1(10).Value = "03607"
args1(11).Name = "SearchItem.ReplaceString"
args1(11).Value = "03600"
args1(12).Name = "SearchItem.Locale"
args1(12).Value = 255
args1(13).Name = "SearchItem.ChangedChars"
args1(13).Value = 2
args1(14).Name = "SearchItem.DeletedChars"
args1(14).Value = 2
args1(15).Name = "SearchItem.InsertedChars"
args1(15).Value = 2
args1(16).Name = "SearchItem.TransliterateFlags"
args1(16).Value = 1280
args1(17).Name = "SearchItem.Command"
args1(17).Value = 3

dispatcher.executeDispatch(document, ".uno:ExecuteSearch", "", 0, args1())

rem ----------------------------------------------------------------------
dim args2(17) as new com.sun.star.beans.PropertyValue
args2(0).Name = "SearchItem.StyleFamily"
args2(0).Value = 2
args2(1).Name = "SearchItem.CellType"
args2(1).Value = 0
args2(2).Name = "SearchItem.RowDirection"
args2(2).Value = true
args2(3).Name = "SearchItem.AllTables"
args2(3).Value = false
args2(4).Name = "SearchItem.Backward"
args2(4).Value = false
args2(5).Name = "SearchItem.Pattern"
args2(5).Value = false
args2(6).Name = "SearchItem.Content"
args2(6).Value = false
args2(7).Name = "SearchItem.AsianOptions"
args2(7).Value = false
args2(8).Name = "SearchItem.AlgorithmType"
args2(8).Value = 1
args2(9).Name = "SearchItem.SearchFlags"
args2(9).Value = 65536
args2(10).Name = "SearchItem.SearchString"
args2(10).Value = "09300"
args2(11).Name = "SearchItem.ReplaceString"
args2(11).Value = "03600"
args2(12).Name = "SearchItem.Locale"
args2(12).Value = 255
args2(13).Name = "SearchItem.ChangedChars"
args2(13).Value = 2
args2(14).Name = "SearchItem.DeletedChars"
args2(14).Value = 2
args2(15).Name = "SearchItem.InsertedChars"
args2(15).Value = 2
args2(16).Name = "SearchItem.TransliterateFlags"
args2(16).Value = 1280
args2(17).Name = "SearchItem.Command"
args2(17).Value = 3

dispatcher.executeDispatch(document, ".uno:ExecuteSearch", "", 0, args2())

dim args3(17) as new com.sun.star.beans.PropertyValue
args3(0).Name = "SearchItem.StyleFamily"
args3(0).Value = 2
args3(1).Name = "SearchItem.CellType"
args3(1).Value = 0
args3(2).Name = "SearchItem.RowDirection"
args3(2).Value = true
args3(3).Name = "SearchItem.AllTables"
args3(3).Value = false
args3(4).Name = "SearchItem.Backward"
args3(4).Value = false
args3(5).Name = "SearchItem.Pattern"
args3(5).Value = false
args3(6).Name = "SearchItem.Content"
args3(6).Value = false
args3(7).Name = "SearchItem.AsianOptions"
args3(7).Value = false
args3(8).Name = "SearchItem.AlgorithmType"
args3(8).Value = 1
args3(9).Name = "SearchItem.SearchFlags"
args3(9).Value = 65536
args3(10).Name = "SearchItem.SearchString"
args3(10).Value = "10100"
args3(11).Name = "SearchItem.ReplaceString"
args3(11).Value = "03600"
args3(12).Name = "SearchItem.Locale"
args3(12).Value = 255
args3(13).Name = "SearchItem.ChangedChars"
args3(13).Value = 2
args3(14).Name = "SearchItem.DeletedChars"
args3(14).Value = 2
args3(15).Name = "SearchItem.InsertedChars"
args3(15).Value = 2
args3(16).Name = "SearchItem.TransliterateFlags"
args3(16).Value = 1280
args3(17).Name = "SearchItem.Command"
args3(17).Value = 3

dispatcher.executeDispatch(document, ".uno:ExecuteSearch", "", 0, args3())


end sub
Vous ne pouvez pas consulter les pièces jointes insérées à ce message.
Dernière modification par micmac le 02 juil. 2024 17:01, modifié 3 fois.
Raison : [Résolu] remplace [Resolu]
LibreOffice 25.2.3.2 (x64) et Windows 10 Pro (personnel)
LibreOffice 25.2.3.2 (x86-64) et Windows 11 Pro (professionnel, obligatoire)
Avatar de l’utilisateur
Noonours
PassiOOnné
PassiOOnné
Messages : 541
Inscription : 11 mai 2013 00:11
Localisation : Aix en Provence

Re: [Calc] Rechercher & Remplacer un seul caractère différent dans une cellule

Message par Noonours »

Bonjour le forum, SolPro
SolPro a écrit :"remplacer "036?0" par "03600" avec ? prenant n'importe quelle valeur ?
Le résultat peut être réalisé hors macro par la fonction =REMPLACER()
Dans la colonne G, adjacente, essaye:

Code : Tout sélectionner

=REMPLACER(F2;4;1;0)
à étirer vers le bas.
Si tu souhaites continuer par macro, la fonction Basic replace te permettra de faire ce que tu souhaites.

Cordialement,
Noonours procrastinateur perfectionniste: "Je fais rien, mais demain je l'ferai mieux"

Pour obtenir la réponse la plus précise possible, VEUILLEZ JOINDRE UN FICHIER

LibO 26.2.6.3 (recommandée) et OpenOffice 4.1.16 sous Windows 10
SolPro
Membre OOrganisé
Membre OOrganisé
Messages : 84
Inscription : 31 juil. 2022 12:38

Re: [Calc] Rechercher & Remplacer un seul caractère différent dans une cellule

Message par SolPro »

Bonjour
Merci pour la réponse
Je veux faire cela par macro car j'ai d'autres "petits trucs à automatiser".
Je ne connais pas du tout "replace".
je vais fouiller le "net"
je suis preneur d'exemple
Encore merci
LibreOffice 25.2.3.2 (x64) et Windows 10 Pro (personnel)
LibreOffice 25.2.3.2 (x86-64) et Windows 11 Pro (professionnel, obligatoire)
Avatar de l’utilisateur
Oukcha
RespOOnsable modération
RespOOnsable modération
Messages : 4371
Inscription : 06 oct. 2008 08:03

Re: [Calc] Rechercher & Remplacer un seul caractère différent dans une cellule

Message par Oukcha »

Bonjour,
SolPro a écrit : ↑29 juin 2024 14:55 je vais fouiller le "net"
Avant de fouiller le "net", utilisez la recherche sur le forum (la recherche est en haut de page à droite) :
search.php?st=0&sk=t&sd=d&sr=topics&key ... d%5B%5D=24

Cordialement
                                        
Pour tout savoir sur le fonctionnement de ce forum :arrow: À lire avant tout ! Image
SolPro
Membre OOrganisé
Membre OOrganisé
Messages : 84
Inscription : 31 juil. 2022 12:38

Re: [Calc] Rechercher & Remplacer un seul caractère différent dans une cellule

Message par SolPro »

Oukcha a écrit : ↑29 juin 2024 17:08 Avant de fouiller le "net", utilisez la recherche sur le forum (la recherche est en haut de page à droite) :
search.php?st=0&sk=t&sd=d&sr=topics&key ... d%5B%5D=24
Cordialement
Fouiller le net signifie entre autre, commencer par chercher sur ce forum et ailleurs. Je commence toujours sur ce forum que je parcours tous les jours ;)
D'ailleurs, je fouille, je fouille et je trouve quelquechose qui s'en approche même si le titre du post n'est pas "précis"
viewtopic.php?t=50219

Je suis preneur d'aide.
LibreOffice 25.2.3.2 (x64) et Windows 10 Pro (personnel)
LibreOffice 25.2.3.2 (x86-64) et Windows 11 Pro (professionnel, obligatoire)
Avatar de l’utilisateur
Dolev
SuppOOrter
SuppOOrter
Messages : 1202
Inscription : 19 août 2018 05:20

Re: [Calc] Rechercher & Remplacer un seul caractère différent dans une cellule

Message par Dolev »

Bonsoir,

Où se trouve la difficulté ? Noonours vous donne la formule qui est à reprendre en anglais :

Code : Tout sélectionner

Sub RemplacerCar
	oFeuille = thisComponent.CurrentController.ActiveSheet
	
	FoncAcces = CreateUnoService("com.sun.star.sheet.FunctionAccess")
	For i = 2 to 74
		Contenu = oFeuille.GetCellRangeByName("F" & i).String
		Resultat = FoncAcces.callFunction("REPLACE", Array(Contenu,4,1,0))
		oFeuille.GetCellRangeByName("F" & i).String = resultat
	Next	
End sub
Open Office 4.1.16 sous Windows 11
SolPro
Membre OOrganisé
Membre OOrganisé
Messages : 84
Inscription : 31 juil. 2022 12:38

Re: [Calc] Rechercher & Remplacer un seul caractère différent dans une cellule

Message par SolPro »

Bonsoir
Merci pour la réponse
La difficulté ? "com.sun.star.sheet.FunctionAccess"
LibreOffice 25.2.3.2 (x64) et Windows 10 Pro (personnel)
LibreOffice 25.2.3.2 (x86-64) et Windows 11 Pro (professionnel, obligatoire)
Avatar de l’utilisateur
Dolev
SuppOOrter
SuppOOrter
Messages : 1202
Inscription : 19 août 2018 05:20

Re: [Calc] Rechercher & Remplacer un seul caractère différent dans une cellule

Message par Dolev »

Re,
SolPro a écrit : ↑02 juil. 2024 16:44 La difficulté ? "com.sun.star.sheet.FunctionAccess"
Je vous invite à étudier ce suprême de code de Loopingss : viewtopic.php?f=15&t=14625
Open Office 4.1.16 sous Windows 11