[Résolu][Calc]Rechercher-remplacer dans un texte de 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 !
Whiteneck
Membre hOOnoraire
Membre hOOnoraire
Messages : 159
Inscription : 20 janv. 2013 11:19

[Résolu][Calc]Rechercher-remplacer dans un texte de cellule

Message par Whiteneck »

Bonjour à tous,

Milles excuses auprès de Bidouille notre modérateur. :oops:
Je sais bien qu'il faut proposer des lignes de codes pour avoir de l'aide mais ici je ne ais pas comment commencer.
J'ai fait des recherches sur le forum et j'ai été surpris de ne rien trouver (ou alors je n'ai pas compris). :(
Ma demande est donc de m'aider à mettre le pied à l’étrier.



Dans un classeur qui aide à l'écriture d'un scénario, je voudrais faire par macro, l'équivalent d'un "Rechercher-remplacer".

Quand l'utilisateur du classeur change le nom du personnage dans une cellule (qui ne contient que son nom), le nom soit remplacé partout où il l'a déjà écrit.
Au milieu de textes donc.
J'ai pensé qu'à la fin de la procédure le nouveau nom pourrait être copié dans une deuxième cellule dans laquelle on irait piocher au moment de remplacer encore une fois le nom du personnage.
Et ainsi de suite.

Mon souci est que je ne sais pas comment écrire dans une macro l'équivalent du "rechercher-remplacer".
Si quelqu'un peut me le dire, je pourrai essayer de construire mon code à partir de ça.

Merci d'avance.
Dernière modification par Whiteneck le 24 janv. 2018 14:29, modifié 1 fois.
LibreOffice Version : 6.3.6.2 (x64) / Windows 8.1
Avatar de l’utilisateur
rollmops
PassiOOnné
PassiOOnné
Messages : 669
Inscription : 20 déc. 2017 14:45

Re: [Calc]Rechercher-remplacer

Message par rollmops »

Bonjour,

Même sans macro, tu peux joindre un document et des captures d'écran pour montrer le problème non ?
Whiteneck a écrit :J'ai fait des recherches sur le forum et j'ai été surpris de ne rien trouver (ou alors je n'ai pas compris).
Euh ? :? https://forum.openoffice.org/fr/forum/v ... er#p286014
OpenOffice 4.1.15 - Windows 10
Piaf
GourOOu
GourOOu
Messages : 5622
Inscription : 25 nov. 2011 18:07
Localisation : Guyane

Re: [Calc]Rechercher-remplacer

Message par Piaf »

Bonjour
A tester

Code : Tout sélectionner

Sub RemplacerNom()
Dim oDoc As Object, maFeuille As Object, Remplacer As Object
	oDoc = ThisComponent
	maFeuille = oDoc.CurrentController.ActiveSheet
	Remplacer = maFeuille.createReplaceDescriptor
	With Remplacer
		.setSearchString(maFeuille.getCellRangeByName("A2").String)
		.setReplaceString(maFeuille.getCellRangeByName("B2").String)
		.SearchWords = False
	End With
	maFeuille.replaceAll(Remplacer)
End Sub
Avant l'exécution de la procédure
Avant.png
Après l'exécution de la procédure
Apres.png
A+
Vous ne pouvez pas consulter les pièces jointes insérées à ce message.
Libre Office Version: 6.1.6 et Apache OpenOffice 4.1.6 Sur Xubuntu 18.04 AMD64
Whiteneck
Membre hOOnoraire
Membre hOOnoraire
Messages : 159
Inscription : 20 janv. 2013 11:19

Re: [Calc]Rechercher-remplacer

Message par Whiteneck »

Merci PIAF, :D

J'ai mis quelques conditions pour que cela ne parte pas dans tous les sens.
La plus importante étant que la cellule avec le nom du personnage ne soit pas vide.
Sans ça, plein de cellules vides se retrouvent remplies avec le nom du personnage.

J'ai ensuite limité à quelques lignes, du coup j'ai fait une copie entre les deux cellules de départ qui comportent le nom du personnage.
J'ai conditionné à un style de cellule, mais ça c'est pour moi.

Code : Tout sélectionner

Sub RemplacerNom()
' Remplace dans une plage de cellule le terme renseigné dans une cellule déterminée.
Dim oDoc As Object, maFeuille As Object, Remplacer As Object, oZone As object
Dim i as Integer
   oDoc = ThisComponent
   maFeuille = oDoc.CurrentController.ActiveSheet
   Remplacer = maFeuille.createReplaceDescriptor
   
   if maFeuille.getCellRangeByName("NOMPERSONNAGE").String <> "" Then 'Seulement si le nom du personnage est renseigné
   With Remplacer

    	.setSearchString(maFeuille.getCellRangeByName("NOMPERSONNAGE2").String)	
    	.setReplaceString(maFeuille.getCellRangeByName("NOMPERSONNAGE").String) 'cellule où on renseigne le nouveau nom du personnage
      .SearchWords = False
   
   End With
   End if
   
	maFeuille.getCellRangeByName("NOMPERSONNAGE2").String = maFeuille.getCellRangeByName("NOMPERSONNAGE").String 'Copie le nom du personnage dans la cellule "témoin"
   
   For i = 10 To 15 'Ne s'applique qu'aux lignes 10 à 15
   oZone = maFeuille.getCellByPosition(0,i)
   		If oZone.CellStyle = "TEXTE" Then  'Seulement si le style de cellule est "Texte"
   		oZone.replaceAll(Remplacer)
   		End if
   Next i
End Sub
Vous ne pouvez pas consulter les pièces jointes insérées à ce message.
LibreOffice Version : 6.3.6.2 (x64) / Windows 8.1