[Résolu] échapper le $ pour remplacement avec regexp

Discussions à propos du tableur Calc.
Les questions sur les macros doivent être postées dans la section dédiée en dessous.

Modérateur : Vilains modOOs

Règles du forum
Cette section est uniquement dédiée au tableur Calc. Vous ne devez pas poster ici de questions sur les macros mais utiliser la section éponyme.
blaise64
Fraîchement OOthentifié
Messages : 3
Inscription : 29 juil. 2010 15:30

[Résolu] échapper le $ pour remplacement avec regexp

Message par blaise64 »

Bonjour,

Je dois traiter une 40 de fichiers .xlxs (obligation donnée du format par l'employeur :) ) en changeant 2 formules différentes qui sont présentes de nombreuses fois.
Pour aller plus vite j'ai donc décidé d'utiliser les regexp et calc auquel je suis plus habitué.
Cependant lors du remplacement je ne parvient pas à échapper le signe $ dans la chaine de remplacement : il me le remplace systématiquement par la capture de la regexp.
Pour illustrer mes propos voilà la regexp utilisée et qui fonctionne ainsi que le texte de remplacement :

=SI\((C[0-9]+)<>"";SI\((G[0-9]+)="ART";RECHERCHEV\(C[0-9]+;'file:///W:/01-PROCEDURES/EXTRACTION-ARTICLE-EBP/FICHIER%20LIE%20-%20NE%20PAS%20RENOMMER%20-%20NE%20PAS%20DEPLACER/ARTICLES\.xlsx'\#\$Feuil1\.\$A\$1:\$F\$1921;2;0\);SI\(G[0-9]+="SE";RECHERCHEV\(C[0-9]+;\$MODULES\.\$A\$1:\$E\$1999;2;0\);RECHERCHEV\(C[0-9]+;\$\#REF \!\.\$A\$1:\$C\$2000;3;0\)\)\);""\)

=SI($1<>"";SI($2="SE";RECHERCHEV($1;'W:\01-PROCEDURES\EXTRACTION-ARTICLE-EBP\PRIX DE REVIENT DES PRODUITS\ANNU\[MODULES.xlsx]MODULES'!$A$1:$E$1994;2;FAUX);RECHERCHEV($1;'W:\01-PROCEDURES\EXTRACTION-ARTICLE-EBP\FICHIER LIE - NE PAS RENOMMER - NE PAS DEPLACER\[ARTICLES.xlsx]Feuil1'!$A$1:$F$1921;2;FAUX));"")

et voici le résultat du remplacement :

=SI(C9<>"";SI(G9="SE";RECHERCHEV(C9;'w:\01-procedures\extraction-article-ebp\prix de revient des produits\annu\[modules.xlsx]modules'!$AC9:$EC9994;2;0);RECHERCHEV(C9;'w:\01-procedures\extraction-article-ebp\fichier lie - ne pas renommer - ne pas deplacer\[articles.xlsx]feuil1'!$AC9:$FC9921;2;0));"")))))))))))))

j'ai mis en gras les remplacement que je ne souhaite pas et en rouge ceux que je souhaite remplacer (il s'agit en fait de garder les numéros de cellules)
Sauriez vous comment échapper le caractère $ dans la chaine de remplacement ?
D'autre part je souhaiterais savoir d'ou viennent toutes les parenthèses supplémentaires à la fin ...

Merci d'avance
Dernière modification par Oukcha le 02 août 2010 08:08, modifié 3 fois.
Raison : Correction casse balise [résolu] -> [Résolu]
Open Office 3.0 sous Windows XP et Ubuntu 10.04
Avatar de l’utilisateur
Bidouille
RespOOnsable forum
RespOOnsable forum
Messages : 12838
Inscription : 08 nov. 2005 16:23
Localisation : Brest, France

Re: echapper le caractère $ lors d'un remplacement avec rege

Message par Bidouille »

Bonjour et bienvenue,

Ce forum n'a aucun don de voyance. Il serait donc plus facile de répondre à votre question en nous joignant un exemple de classeur accompagné de la formule avec notre service Ci-Joint (lien en bas de la page lors de la rédaction du message) : http://user.services.openoffice.org/fr/ ... ne-PJ.html

Dans l'attente.
Avatar de l’utilisateur
Dude
IdOOle de la suite
IdOOle de la suite
Messages : 26195
Inscription : 03 mars 2006 07:45
Localisation : 127.0.0.1

Re: echapper le caractère $ lors d'un remplacement avec rege

Message par Dude »

Salut,

En attendant le fichier...
blaise64 a écrit :Je dois traiter une 40 de fichiers .xlxs (obligation donnée du format par l'employeur)
Juste pour ton info, tu ne pourras pas fournir ce format car OOo ne possède qu'un filtre d'import pour le xlsx.

:idea:
Poser une question, c'est bien. Répondre aux autres, c'est encore mieux.
Améliorez AOO et votez pour les issues
blaise64
Fraîchement OOthentifié
Messages : 3
Inscription : 29 juil. 2010 15:30

Re: echapper le caractère $ lors d'un remplacement avec rege

Message par blaise64 »

Je joins donc un exemple très simple et complètement inutile mais qui je pense illustrera plus simplement mon problème.

Le but serait de modifier les formule des cellules D4 à D6.
Par exemple je si je souhaite passer en cellule D4 de
=SI(C4="x";B4*$B$1;0)
à
=SI(OU(C4="x";$B$1=0);B4*$B$1;0)
et ainsi de suite dans les 2 autres cellules

Je ne peux utiliser la fonction de remplacement simple car les cellules changent ( C4 et B4) donc je souhaite utiliser une regexp qui serait la suivante :
=SI\((C[0-9]+)="x";(B[0-9]+)\*\$B\$1;0\)
pour trouver toutes les occurrence de la formule a modifier.
Le texte de remplacement serait donc
=SI(OU($1="x";$B$1=0);$2*$B$1;0)
Les $1 et $2 en vert étant les captures de la regexp et ceux en rouge les indésirables que je souhaiterais échapper afin qu'il ne soient pas remplacés.

J'espère avoir explicité plus clairement mon problème :)

Connaitriez vous une solution à mon problème ?
Vous ne pouvez pas consulter les pièces jointes insérées à ce message.
Open Office 3.0 sous Windows XP et Ubuntu 10.04
Avatar de l’utilisateur
Jean-Louis Cadeillan
GourOOu
GourOOu
Messages : 6090
Inscription : 02 janv. 2009 23:56

Re: échapper le $ pour remplacement avec regexp

Message par Jean-Louis Cadeillan »

Bonjour,
Pour "échapper" le $1 dans la zone Remplacer, mets devant un \, comme tu l'as fait dans la zone Rechercher, ainsi :

Code : Tout sélectionner

=SI(OU($1="x";$B\$1=0);$2*$B\$1;0)
Cordialement
Jean-Louis
Windows 10 Pro 64, LibO 25.8.6.2 (JRE 1.8.0_481) et AOO 4.1.16 (Adoptium 19.0.2.7)
blaise64
Fraîchement OOthentifié
Messages : 3
Inscription : 29 juil. 2010 15:30

Re: échapper le $ pour remplacement avec regexp

Message par blaise64 »

Merci pour la réponse. En effet le caractère \ permet bien d'échapper le caractère $.
J'avais pourtant essayé sans succès ... une erreur de ma part sans doute.

Merci
Open Office 3.0 sous Windows XP et Ubuntu 10.04