[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.

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

Messagepar lmn » 27 Avr 2019 08:25

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 édition par lmn le 07 Mai 2019 15:20, édité 1 fois.
OpenOffice 4.1.2 sous Windows 10
lmn
Fraîchement OOthentifié
 
Message(s) : 6
Inscrit le : 26 Avr 2019 10:35

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

Messagepar Jean-Louis Cadeillan » 27 Avr 2019 09:25

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 6.2.6.2 (x64 avec Java 1.8.0_221) et AOO 4.1.6 (avec Java x32 1.8.0_201), Windows 7 Édition Intégrale 64 SP1, (Domicile)
LibO 5.4.1.2 (x86) sous Ubuntu LTS 16.04.1, noyau 4.4.0-93 et Xfce 4.12, Java (x86) 1.8.0_131 (Travail) [obligation de version]
Avatar de l’utilisateur
Jean-Louis Cadeillan
ManitOOu
ManitOOu
 
Message(s) : 4433
Inscrit le : 03 Jan 2009 00:56

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

Messagepar lmn » 27 Avr 2019 09:53

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
lmn
Fraîchement OOthentifié
 
Message(s) : 6
Inscrit le : 26 Avr 2019 10:35

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

Messagepar Jean-Louis Cadeillan » 27 Avr 2019 10:13

Ci-joint une solution basée sur cette formule (ici en B1 de Feuille1) :
Code : Tout sélectionner   AgrandirRéduire
=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
Pièces jointes
Imn_20190427_JLC01.ods
(10.99 Kio) Téléchargé 9 fois
LibO 6.2.6.2 (x64 avec Java 1.8.0_221) et AOO 4.1.6 (avec Java x32 1.8.0_201), Windows 7 Édition Intégrale 64 SP1, (Domicile)
LibO 5.4.1.2 (x86) sous Ubuntu LTS 16.04.1, noyau 4.4.0-93 et Xfce 4.12, Java (x86) 1.8.0_131 (Travail) [obligation de version]
Avatar de l’utilisateur
Jean-Louis Cadeillan
ManitOOu
ManitOOu
 
Message(s) : 4433
Inscrit le : 03 Jan 2009 00:56

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

Messagepar lmn » 27 Avr 2019 15:46

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
lmn
Fraîchement OOthentifié
 
Message(s) : 6
Inscrit le : 26 Avr 2019 10:35

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

Messagepar Jean-Louis Cadeillan » 27 Avr 2019 19:32

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   AgrandirRéduire
=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   AgrandirRéduire
=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   AgrandirRéduire
=NOMPROPRE(STXT($A1;15;TROUVE(" ";$A1;15)-15))
)

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 6.2.6.2 (x64 avec Java 1.8.0_221) et AOO 4.1.6 (avec Java x32 1.8.0_201), Windows 7 Édition Intégrale 64 SP1, (Domicile)
LibO 5.4.1.2 (x86) sous Ubuntu LTS 16.04.1, noyau 4.4.0-93 et Xfce 4.12, Java (x86) 1.8.0_131 (Travail) [obligation de version]
Avatar de l’utilisateur
Jean-Louis Cadeillan
ManitOOu
ManitOOu
 
Message(s) : 4433
Inscrit le : 03 Jan 2009 00:56

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

Messagepar lmn » 28 Avr 2019 15:27

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é
 
Message(s) : 6
Inscrit le : 26 Avr 2019 10:35

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

Messagepar lmn » 05 Mai 2019 09:45

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
lmn
Fraîchement OOthentifié
 
Message(s) : 6
Inscrit le : 26 Avr 2019 10:35

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

Messagepar micmac » 05 Mai 2019 10:16

Bonjour,
lmn 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
Avatar de l’utilisateur
micmac
RespOOnsable forum
RespOOnsable forum
 
Message(s) : 6009
Inscrit le : 28 Août 2010 09:45

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

Messagepar lmn » 07 Mai 2019 15:13

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
lmn
Fraîchement OOthentifié
 
Message(s) : 6
Inscrit le : 26 Avr 2019 10:35


Retour vers Tableur

Qui est en ligne ?

Utilisateur(s) parcourant ce forum : Aucun utilisateur inscrit et 21 invité(s)