Retour espace plus ou moins nombreux selon mot-clés trouvé dans cellule

Bonjour à vous,

J'ai besoin de votre aide car si je pensais réussir pour un seul mot clé via formule, je n'arrive pas à faire pour plusieurs mots clés.

A partir du fichier joint en colonne C avec réponse en colonne D faire un retour chariot à chaque qu'un de ces mots clés apparaît mais juste avant celui-ci :

- Matériaux :

- Fonctionnalités :

- Autres dimensions :

- Technique :

- Entretien :

- Logistiques :

- Densité :

- Finition :

Le soucis est qu'ils peuvent exister ou pas selon les cellules... Il faudrait idéalement dans la réponse que je puisse ajouter des mots-clés si besoin.

bonjou moreauste,

colonne D = en une cellule

colonne E:... = séparé

Salut Moreauste,
Salut BsAlv

@BsAlv : toujours sur les bons coups, toi!

Perso, je privilégie toujours VBA, étant quasi nul en formules!

En l'état, ma macro ne se déclenche actuellement que sur un double-clic sur la cellule texte que tu veux traiter avec résultat en [C10].
Tes mots-clés sont dans 'DATA', liste que tu peux modifier à ton aise.
Tu peux (pas encore programmé) modifier l'ordre de tes mots-clés en les numérotant en [A:A].
La colonne [C:C] est utilisée par la macro.

L'objectif final est évidemment de déclencher la macro au moindre changement d'une cellule-texte ou de la liste des mots-clés avec affichage sur la cellule même!
Mais, ayant du boulot ici, je m'y mettrai plus tard si cette solution te convient!

Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean)
'
Dim iRow%, iTRow%, iPos1%, iPos2%, sMsg1$, sMsg2$
'
Cancel = True
Application.EnableEvents = False
Application.ScreenUpdating = False
'
With Worksheets("DATA")
    If Not Intersect(Target, Columns(3)) Is Nothing Then
        If Target <> "" Then
            sMsg1 = Target
            iRow = .Range("B" & Rows.Count).End(xlUp).Row
            For x = 1 To 2
                For y = 1 To iRow
                    If x = 1 Then .Cells(y, 3) = InStr(sMsg1, .Cells(y, 2))
                    If x = 2 Then
                        iTRow = .Columns(1).Find(what:=y, lookat:=xlWhole, LookIn:=xlValues, searchdirection:=xlNext).Row
                        If .Cells(iTRow, 3) > 0 Then
                            iPos1 = .Cells(iTRow, 3)
                            iPos2 = IIf(.Cells(iTRow + 1, 2) <> "", .Cells(iTRow + 1, 3), Len(sMsg1) + 1)
                            If Asc(Mid(sMsg1, iPos2 - 1, 1)) < 32 Then iPos2 = iPos2 - 1
                            sMsg2 = sMsg2 & IIf(y = 1, "", vbLf) & Mid(sMsg1, iPos1, (iPos2 - iPos1))
                        End If
                    End If
                Next
                .Range("A1:C" & iRow).Sort key1:=.Range(IIf(x = 1, "C1", "A1")), order1:=xlAscending, Orientation:=xlTopToBottom
            Next
            Cells(10, 3) = sMsg2
        End If
    End If
End With
'
Application.ScreenUpdating = True
Application.EnableEvents = True
'
End Sub

A+

9moreauste.xlsm (24.13 Ko)

Bonjour à tous !

----> Pour une aide adaptée de la communauté, merci de préciser, dans votre profil, la nature de votre Excel ( 2019 ? 2021 ? 365 ? ...)

"2002" n'est pas un produit Microsoft.

Bonjour à vous deux,

J'ai préféré la version de BsAlv car je cherchais un résultat immédiat et non sur un déclencheur car j'ai un tableau très long et je n'aurai pas su comment modifier le code ;(

C'est un gain de temps très important donc un grand merci à vous deux à ce forum que je salue pour son existence ! Vous êtes au top !

Bonjour à tous de nouveau !

Merveilleux.....

Salut Moreauste,
Salut les as,

ah, homme de peu de foi et de peu d'espérance qui ne réalise pas les miracles potentiels de VBA!
Tu n'as manifestement pas compris mon objectif qui ne vise que ton confort de travail... aussi extraordinaire que soit la formule concoctée par BsAlv, que je salue ici.

Tu feras évidemment comme tu auras décidé. Peu me chaut, c'est toi qui bosse!
Je développe mon idée, j'envoie, tu testes ou pas, j'aurai fait mon boulot de bénévole d'Excel-Pratique!
Ça intéressera peut-être quelqu'un d'autre...

Bonne soirée, le forum!
A+

Encore un grand merci curulis57 et vous m'excuserez, je l'espère, de mon peu de connaissance.

A tous, un problème un peu similaire et dites moi si je dois faire un autre post mais cela me semble très proche de ce sujet, quoique...

Autre fichier Excel en pièce jointe où j'aimerai garder ce qui est gauche dès qu'on trouve une dimension du type largeurXprofondeurXhauteurCM.

Le soucis est que pas toujours présent.

Comme vous le voyez en colonne B, j'ai mis une formule qui coupe sur la gauche à partir du dernier espace trouvé depuis la droite mais ne fonctionne pas quand il n'y a pas largeurXprofondeurXhauteur.

Je pense pour identifier une dimension qu'il faut prendre l'ensemble de la chaîne de caractères qui se termine par "cm" sans oublier l'espace à couper devant.

Je suppose que très facile pour vous mais je me casse la tête ;(

Bonjour

"2002" n'est pas un produit Microsoft.

Si 2002 a existé en 2002 (s'appelait aussi Office XP)

Mais c'était pas des xlsx donc ce n'est surement pas la version du malotru du jour...

Bonsoir à tous !

@78chris : Hello !

Si 2002 a existé en 2002 (s'appelait aussi Office XP)

Fichtre ! C'est la première fois que j'entends parler de cette version !

Salut MoreauSte,

A tous, un problème un peu similaire et dites moi si je dois faire un autre post...

Oui, autre problème ou fichier = autre sujet.
Autant que tout le monde s'amuse!

A+

re, vous n'avez pas encore posé la question, donc une solution ici ... avec excel365

Je me suis sûrement mal exprimé BsAlv car je voulais le résultat à gauche des dimensions en les retirants donc.

Pour information, je suis sur Office Mac version 16 donc office 365 je pense ?

Bonjour à tous !

Pour obtenir l'information précise du produit Excel : menu "Fichier / Compte / A propos de Excel"

Me concernant, cela donne :

image

Voulez-vous que je fasse un autre post suite à mon message à @BsAlv ?

c'est mieux, je crois, mais commence à modifier votre profil avec l'information de @JFL (que je salue).

Salut Moreauste,
Salut les as,

voilà une version plus aboutie dont le seul déclencheur sera le fait d'encoder ton texte.
La macro de traitement démarrera à la suite de la validation de ta cellule-texte. Rassuré?
Si tu modifies une cellule dans 'COMM', seule cette cellule sera traitée. Logique!

Dans 'DATA' se trouvent les intitulés de section que tu souhaites voir affichés en début de ligne.
Tout changement dans cette liste sera immédiatement répercuté dans toutes les cellules-textes de 'COMM'.
Tu peux y :
- effacer une donnée (pour l'instant, cela n'affectera pas les cellules-textes mais je vais me pencher dessus).
- ajouter un nouvel intitulé de section en fin de liste.
- modifier l'ordre d'édition de ces sections.

Les 2 actions possibles pour l'instant sont, via multi-sélection des cellules concernées :
- inverser deux intitulés en les sélectionnant.
Pour inverser "Logistiques :" et " Densités :"

image image

- rejeter un intitulé en fin de liste
Pour rejeter "Matériaux :" en fin de liste, sélectionne une cellule vide en fin de liste.

image image

Traitement immédiat : "Matériaux :" se retrouve en fin de description.

image

Tu vois ci-dessus une nouvelle section possible : "Cadeaux :".
Plus qu'à tester le jouet et à me dire si tu souhaites l'améliorer... ou le jeter au bac!

A+

6moreauste.xlsm (30.67 Ko)
Rechercher des sujets similaires à "retour espace nombreux mot cles trouve"