Répeter une phrase autant de fois que possible dans une même cellule

Bonjour à tous et toutes,

Je souhaite votre aide pour la création d'une macro.

Mon fichier joint comporte une feuille base et une autre feuil1 à remplir au fur à mesure que je reçois des saisies.

Si je reçois une saisie sur un compte par exemple (déjà présent dans ma base), il suffit que je tape le n° du compte dans la feuil1 pour qu'il m'affiche le SIREN concerné. Donc dans les colonnes H et I il y'a une phrase qui doit être écrite. Lorsque le SIREN affiché n'a qu'un seul dans la base c'est simple puisque je n'ai qu'une phrase. Le plus dur serait de répéter autant de fois qu'il y'a de comptes liés au SIREN.

Sachant qu'il y'a 3 types de compte, je souhaiterais que dans la colonne H apparaissent tous les comptes 10 et 20 liés au SIREN et dans la colonne I tous les comptes 55.

Bien sûr si le SIREN n'a que des comptes 55, il n'y a que la colonne I qui doit être renseigné et vice versa.

Pouvez-vous m'apporter votre expertise en m'aidant avec une macro capable de faire cela ? J'ai mis un ex de ce qui est attendu.

En espérant avoir été clair, je vous souhaite un excellent week-end.

Bonjour

Les solutions dépendent de ta version Excel (2019, 2021, 365,..) que tu a omis de préciser dans ton profil

Bonjour 78chris,

Je croyais l'avoir fait c'est Excel 2016.

Merci !

RE

Tu décris chercher sur la numéro de compte mais tu as des listes sur les soldes et un montant : on ne sait plus trop quelle est la clef de recherche

Re 78chris,

Ma clé de recherche c'est le SIREN.

En tapant un n° de compte dans la feuil1 à la main (pas besoin de l'automatiser) ça affiche un SIREN.

Et la macro doit chercher dans la base tous les comptes liés à ce SIREN et construire autant de phrase qu'il y'a de comptes lié à ce SIREN et afficher les phrases dans la même cellule.

J'espère avoir été un peu plus clair.

Merci pour l'aide.

RE

Cela je l'avais vu mais je ne comprends pas le rôle des 2 listes déroulantes qui semblent ne rien avoir à faire avec le reste...

Sur 365 on peut résoudre par une formule

Sur 2016 on pourrait extraire par PowerQuery mais pour cela il faut bien comprendre le contexte

Bonsoir le fil

Bonsoir Chris...

Si tu veux de plus amples informations

Bonne soirée

Arf

Marqué résolu ailleurs alors pourquoi ici ?

Bonjour 78chris,

Non ce n'est pas vraiment résolu. C'est un mal entendu désolé.

Avec des formules SI je peux afficher la phrase mais sans macro, les phrases ne peuvent pas se concatener. Les listes déroulantes c'est juste pour spécifier qu'il y'a un compte ou plusieurs rattachés à ce SIREN.

Pour être plus clair en gros dès que je tape le SIREN, je dois chercher dans la base tous les comptes liés à ce SIREN et construire la phrase soit dans la colonne H si compte 10 et 20 ou colonne I si compte 55.

Si macro pas possible, je suis preneur de la formule sur 365.

Merci bien !

RE

Les macros sont toujours possibles mais je ne les utilise que quand je n'ai pas d'autre solution

Avec 2016 on peut utiliser PowerQuery mais reste ces 2 colonnes, illogiques pour moi...

En mettant les plages en tableaux structurés nommés Base et Résultats

En H

=JOINDRE.TEXTE(CAR(10);;BYROW(CHOISIRCOLS(FILTRE(Base;(Base[Siren]=$A2)*((Base[Type de compte]=10)+(Base[Type de compte]=20)));1;4;5;6;7);LAMBDA(Mylig;JOINDRE.TEXTE(" ";;"Compte n°";CHOISIRCOLS(Mylig;1);"de nature";CHOISIRCOLS(Mylig;2);"présente un solde";CHOISIRCOLS(Mylig;3);"de";CHOISIRCOLS(Mylig;4);CHOISIRCOLS(Mylig;5)))))

En I

=SIERREUR(JOINDRE.TEXTE(CAR(10);;BYROW(CHOISIRCOLS(FILTRE(Base;(Base[Siren]=$A2)*(Base[Type de compte]=55));1;4;5;6;7);LAMBDA(Mylig;JOINDRE.TEXTE(" ";;"Compte n°";CHOISIRCOLS(Mylig;1);"de nature";CHOISIRCOLS(Mylig;2);"présente un solde";CHOISIRCOLS(Mylig;3);"de";CHOISIRCOLS(Mylig;4);CHOISIRCOLS(Mylig;5)))));"")

On peut remplacer CHOISIRCOLS(Mylig;x) par INDEX(Mylig;1;x) pour gagner quelques lettres

On pourrait aussi piocher les bout de phrase dans un tableau...

Si tu comptes reposter ici : mets ta version dans ton profil et évite les multiposts non signalés peu appréciés...

Bonjour 78chris,

Parfait merci beaucoup. Je vais essayer et je te dis. Les 2 colonnes ce sera surtout en pratique que j'en aurais besoin mais c'est vrai qu'elles n'ont pas d'utilités dans la recherche.

Oui c'est juste que sur l'autre, je me suis rendu compte que j'avais mal posé mon problème.

C'est noté, ça ne reproduira pas.

Merci pour l'aide et dès que ça marche, je clôture pas de soucis.

Bonjour 78Chris,

Bon ça n'a pas fonctionner chez moi. Certaines fonctions introuvables.

Je suis donc preneur des macros si possible.

Merci par avance !

Bonjour,

les formules de 78Chris sont pour 365, pas 2016.

Et pourrais-tu mettre ta version dans ton profil pour que tout le monde puisse la voir sous ton pseudo, merci.

Hello Doux Rêveur,

Normalement c'est good.

Merci.

Bonjour

Bon ça n'a pas fonctionner chez moi. Certaines fonctions introuvables.

Relis mon message https://forum.excel-pratique.com/s/goto/1198324

Il précisait bien les solutions différentes pour 2016 et pour 365...

Re 78Chris,

Oui j'ai compris que pour 2016 fallait passer par Power Query sauf que je suis nul sur ça.

Le plus simple pour moi serait une macro si possible.

Bien à toi !

1fichier-test.xlsm (20.05 Ko)

Re bonsoir,

En bidouillant un peu je suis parvenu à créer la macro ci-dessous mais me manque le plus dur à savoir concaténer les phrases sur la première ligne du SIREN et les autres restant vide (Exemple 2 ème feuille du fichier joint).

Sub CreerPhrases()
Dim ws As Worksheet
Dim baseRange As Range
Dim siren As Range
Dim compte As Range
Dim typeCompte As Range
Dim phrase As String

Set ws = ThisWorkbook.Sheets("base")

Set baseRange = ws.Range("B2:G100")

For Each siren In baseRange.Columns(0).Cells

If siren.Value = ws.Range("A2").Value And (siren.Offset(0, 2).Value = 10 Or siren.Offset(0, 2).Value = 20) Then

phrase = "Compte n°" & siren.Offset(0, 1).Value & " de nature " & siren.Offset(0, 3).Value & " présente un solde " & siren.Offset(0, 4).Value & " de " & siren.Offset(0, 5).Value & " " & siren.Offset(0, 6).Value
siren.Offset(0, 7).Value = phrase

ElseIf siren.Value = ws.Range("A2").Value And (siren.Offset(0, 2).Value = 55) Then

phrase = "Compte n°" & siren.Offset(0, 1).Value & " de nature " & siren.Offset(0, 3).Value & " présente un solde " & siren.Offset(0, 4).Value & " de " & siren.Offset(0, 5).Value & " " & siren.Offset(0, 6).Value
siren.Offset(0, 8).Value = phrase

End If
Next siren

MsgBox "Phrases créées avec succès !"
End Sub

Par avance merci !

Bonsoir,

en passant, Cette ligne de code : siren.Offset(0, 7).Value = phrase
ne devrait elle pas être en sortie de boucle ? Avec dans la boucle :
phrase = phrase & "Compte n°" & siren.Offset(0, 1).Value & " de nature " & siren.Offset(0, 3).Value & " présente un solde " & siren.Offset(0, 4).Value & " de " & siren.Offset(0, 5).Value & " " & siren.Offset(0, 6).Value & chr(10)

Pour le reste je n'ai pas suivi...

@ bientôt

LouReeD

Bonsoir LouReeD,

Oui ça a l'air de fonctionner sauf que ça me cumule les phrases dans la colonne H sans tenir compte du type de compte.

En gros si c'est des comptes de type 10 et 20 les phrases se cumulent dans la colonne H mais si c'est de type 55 c'est dans la colonne I.

Je vais déjà me servir de ta formule pour l'adapter voir.

Merci bien.

Bonsoir,

je n'avais pas vu le "elseif" donc vous testez les deux types de comptes en même temps !
Il vous faut donc deux variables : Phrase1 et Phrase2 par exemple et dans chaque "then" vous incrémentez la bonne phrase et à l'issue vous inscrivez chacune d'elles au bon endroit.

@ bientôt

LouReeD

Rechercher des sujets similaires à "repeter phrase autant fois que possible meme"