[Résolu] Remplacer cellule par un texte selon un mot trouvé

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.
lmn
Fraîchement OOthentifié
Messages : 6
Inscription : 26 avr. 2019 09:35

[Résolu] Remplacer cellule par un texte selon un mot trouvé

Message par lmn »

Bonjour,

J'ai un tableau dont l'une des colonnes est l'intitulé d'un virement bancaire : "VIR SEPA NOM XXXX"

Je voudrais remplacer chaque cellule, ou créer une nouvelle colonne, avec du texte (le nom et l'adresse correspondant au "NOM")

Par exemple pour "VIR SEPA DUPONT 1525 18171168" ça me crée dans la nouvelle colonne :
"Dupont René
12 rue de l'église
06100 Nice"

(je peux avoir la "base de données" des adresses et noms dans le même fichier, ou un fichier séparé)

C'est pour faire une base pour un publipostage

Je cherche bien entendu une solution "automatisée", pour lorsque je colle la liste de mes virements, une nouvelle colonne se crée avec les noms et adresses en "propre"

J'ai cherché un peu sur le forum, mais je n'ai trouvé que des solutions manuelles.

Merci d'avance
Dernière modification par lmn le 07 mai 2019 14:20, modifié 1 fois.
OpenOffice 4.1.2 sous Windows 10
Avatar de l’utilisateur
Jean-Louis Cadeillan
GourOOu
GourOOu
Messages : 5749
Inscription : 02 janv. 2009 23:56

Re: Remplacer cellule par un texte selon un mot trouvé

Message par Jean-Louis Cadeillan »

Bonjour et bienvenue,
Je doute que le seul nom puisse te permettre de retrouver la bonne personne : comment discrimine-tu les doublons (s'il y a plusieurs personnes qui se nomment DUPONT) ?
Cordialement,
Jean-Louis
LibO 7.6.6.3 (x64 avec Java 1.8.0_401) et AOO 4.1.15 (avec Java x32 1.8.0_381), Windows 7 Édition Intégrale 64 SP1
lmn
Fraîchement OOthentifié
Messages : 6
Inscription : 26 avr. 2019 09:35

Re: Remplacer cellule par un texte selon un mot trouvé

Message par lmn »

Il n'y aura pas de soucis avec ça, il n'y a qu'une quinzaine de noms, qui sont toujours les mêmes, et il n'y a pas de doublons au niveau des noms ;)
OpenOffice 4.1.2 sous Windows 10
Avatar de l’utilisateur
Jean-Louis Cadeillan
GourOOu
GourOOu
Messages : 5749
Inscription : 02 janv. 2009 23:56

Re: Remplacer cellule par un texte selon un mot trouvé

Message par Jean-Louis Cadeillan »

Ci-joint une solution basée sur cette formule (ici en B1 de Feuille1) :

Code : Tout sélectionner

=RECHERCHEV(STXT($A1;10;TROUVE(" ";$A1;10)-TROUVE(" ";$A1;7)-1);Noms.$A$1:$C$15;COLONNE(A1);0)
avec en A1 le libellé du SEPA et en feuille Noms la base des noms. Formule à recopier vers la droite et vers le bas.
À adapter à ton cas de figure.
Cordialement,
Jean-Louis
Vous ne pouvez pas consulter les pièces jointes insérées à ce message.
LibO 7.6.6.3 (x64 avec Java 1.8.0_401) et AOO 4.1.15 (avec Java x32 1.8.0_381), Windows 7 Édition Intégrale 64 SP1
lmn
Fraîchement OOthentifié
Messages : 6
Inscription : 26 avr. 2019 09:35

Re: Remplacer cellule par un texte selon un mot trouvé

Message par lmn »

Merci beaucoup Jean-Louis !

Alors je suis en train d'essayer de décortiquer ta formule en cherchant à droite à gauche (je débute :p )

Donc si je comprends bien :

Ici on "isole" le nom depuis l'intitulé du virement avec la fonction STXT.
On commence au 10eme caractère (au final moi ça sera au 20ème car les intitulés sont "VIREMENT SEPA RECU ")
On ne connait pas le nombre de caractères à isoler donc on utilise "TROUVE(" ";$A1;10)-TROUVE(" ";$A1;7)-1", qui cherche le nombre de lettres entre les 2 espaces (au final 20 et 17 pour moi)

On recherche ensuite ce nom extrait dans la feuille "Noms" avec la fonction RECHERCHEV
(Le ";0" à la fin étant pour refuser d'extraire une valeur proche)

Par contre en plage de recherche tu as mis "Noms.$A$1:$C$15", il y a une raison à cela ? (car ;Noms.$A$1:$A$15" suffirait non ? vu que les noms se trouvent dans la colonne A)

On récupère ensuite la valeur désirée dans la ligne correspondante avec COLONNE(A1)

Je demande un peu car je préfère essayer de comprendre, comme ça si j'ai à modifier des valeurs.

Merci beaucoup en tout cas pour ton aide précieuse (je pense que j'aurais mis à peu près 3 mois à trouver ça tout seul :D )
OpenOffice 4.1.2 sous Windows 10
Avatar de l’utilisateur
Jean-Louis Cadeillan
GourOOu
GourOOu
Messages : 5749
Inscription : 02 janv. 2009 23:56

Re: Remplacer cellule par un texte selon un mot trouvé

Message par Jean-Louis Cadeillan »

lmn a écrit :qui cherche le nombre de lettres entre les 2 espaces (au final 20 et 17 pour moi)
Entre les deux espaces qui entourent le nom cherché, cela suppose que l'espace avant le nom est toujours le deuxième espace (pour "VIR SEPA ") ou le troisième (pour "VIREMENT SEPA RECU ", le troisième argument de TROUVE() précise justement la position où doit commencer la recherche. Donc, dans la formule, le premier TROUVE() doit être positionné au début du nom, comme ça il trouvera l'espace à la fin du nom, le deuxième TROUVE() doit être positionné avant l'espace qui précède le nom, ce qui donnerait pour VIR SEPA RECU DUPONT 1525 18171168, la formule :

Code : Tout sélectionner

=RECHERCHEV(STXT($A1;15;TROUVE(" ";$A1;15)-TROUVE(" ";$A1;13)-1);Noms.$A$1:$C$15;COLONNE(A1);0)
Dans ton cas de figure particulier où la position du début du nom est connue, on peut simplifier de cette façon :

Code : Tout sélectionner

=RECHERCHEV(STXT($A1;15;TROUVE(" ";$A1;15)-15);Noms.$A$1:$C$15;COLONNE(A1);0)
lmn a écrit :tu as mis "Noms.$A$1:$C$15", il y a une raison à cela ?
Oui, RECHERCHEV() recherche le nom dans la première colonne (sans tenir compte de la casse), puis extrait la donnée correspondant de la même ligne et de la colonne spécifiée par COLONNE(). Si c'est COLONNE(A1), qui vaut 1, il extrait le nom (au passage, s'il n'y avait que le nom à extraire sous la forme Nom à partir de NOM, on aurait pu tout simplement utiliser la formule :

Code : Tout sélectionner

=NOMPROPRE(STXT($A1;15;TROUVE(" ";$A1;15)-15))
)[/i]
Mais en recopiant la formule vers la droite, COLONNE(A1) devient COLONNE(B1), donc 2 et RECHERCHEV() va donc chercher la valeur dans la colonne 2 de sa plage de données (Noms.$A$1:$C$15), donc la colonne B, pour en extraire le prénom... etc.
En tout cas merci de t'intéresser au pourquoi du comment... c'est plutôt rare :wink:
Cordialement,
Jean-Louis
LibO 7.6.6.3 (x64 avec Java 1.8.0_401) et AOO 4.1.15 (avec Java x32 1.8.0_381), Windows 7 Édition Intégrale 64 SP1
lmn
Fraîchement OOthentifié
Messages : 6
Inscription : 26 avr. 2019 09:35

Re: Remplacer cellule par un texte selon un mot trouvé

Message par lmn »

Merci pour ces nouvelles explications !
Jean-Louis Cadeillan a écrit : En tout cas merci de t'intéresser au pourquoi du comment... c'est plutôt rare :wink:
Oui quand c'est possible je préfère essayer de comprendre comment ça fonctionne, pour pouvoir faire des modifications / ajouts moi-même


Bon, je n'ai pas encore pu tester "en réel" si tout fonctionne bien, je viendrai faire un retour ici dès que c'est fait
OpenOffice 4.1.2 sous Windows 10
lmn
Fraîchement OOthentifié
Messages : 6
Inscription : 26 avr. 2019 09:35

Re: Remplacer cellule par un texte selon un mot trouvé

Message par lmn »

Bon donc cela semble fonctionner avec ce que je voulais faire (en fait c'était un peu plus compliqué que ce que j'avais demandé car j'avais d'autres données à "extraire" : adresse, pays, etc., mais je m'en suis sorti)

Il n'y avait qu'un seul petit "problème", c'est que pour certains virement, je n'ai qu'un seul nom après ""VIREMENT SEPA RECU ", par exemple ""VIREMENT SEPA RECU DUPONT" (et rien après), mais donc comme on cherche le prochain espace mais qu'il n'y en a pas, ça donne une erreur

Mais comme tu m'avais expliqué un peu plus haut, comme pour moi c'est toujours le même début, j'ai remplacé par :


=RECHERCHEV(STXT($C2;20;6);*****)

Ainsi j'effectue donc la recherche sur les 6 premiers caractères seulement (il n'y aura pas de doublons)
(je voulais ensuite dans ma feuille "Noms" tronquer toute la colonne sur laquelle on effectue la recherche pour qu'il n'y ait également que 6 caractères et que la correspondance soit exacte, mais en fait ça semble fonctionner déjà comme ça)

Bon, c'est moins classe que l'extraction du nom exact en trouvant les 2 espaces qui l'entourent, mais ça fonctionne.

Merci encore Jean-Louis !


(maintenant faut que je résolve mes problèmes de publipostage pour lequel je dois utiliser ce tableau :D )
OpenOffice 4.1.2 sous Windows 10
Avatar de l’utilisateur
micmac
RespOOnsable forum
RespOOnsable forum
Messages : 9249
Inscription : 28 août 2010 08:45

Re: Remplacer cellule par un texte selon un mot trouvé

Message par micmac »

Bonjour,
[b][color=#404080]lmn[/color][/b] a écrit :maintenant faut que je résolve mes problèmes de publipostage pour lequel je dois utiliser ce tableau :D )
Dans un nouveau sujet bien sûr : règle n° 7.

Si celui-ci est résolu, merci de le faire savoir : Comment clore correctement un sujet lorsqu'il est résolu

Cordialement
Touche Ctrl de Windows = touche cmd⌘ sur Mac
Outils > Options sur Windows = OpenOffice > Préférences sur Mac
lmn
Fraîchement OOthentifié
Messages : 6
Inscription : 26 avr. 2019 09:35

Re: Remplacer cellule par un texte selon un mot trouvé

Message par lmn »

micmac a écrit :Dans un nouveau sujet bien sûr
oui oui bien entendu
micmac a écrit :Si celui-ci est résolu, merci de le faire savoir
OK, j'édite le titre ;)

(si des fois je me rends compte que j'ai des soucis, je rééditerai si c'est possible)

Et merci encore Jean-Louis Cadeillan :!:
OpenOffice 4.1.2 sous Windows 10