OVH Cloud OVH Cloud

concaténation problématique

14 réponses
Avatar
Ticker
Bonjour à tous
Je voudrais vous faire part d'un problème que j'ai depuis un moment et que
je n'arrive résoudre à chaque fois que partiellement.
Je travaille dans une Userform sur Excel et j'aimerai concatener plusieurs
cellules ensemble en respectant des régles en fonction des crochets ou des
parenthèses, ainsi:

lorsque j'ai une suite de cellules de ce type

[A] B (C) D (E) je veux placer une vigule pour donner:

[A] B (C), D (E)

autre exemple, j'ai

[A] B C (D)

je place la virgule

[A] B , C (D)


Je ne peux avoir que des groupes du type
[A] B
B (C)
A
[A] B (C)

Je n'ai pas (et je n'aurai jamais) de groupe style: [A](B) ou similaire
style (A)(B)C ou C[A](B) ou C[A][B] (pour simplifier, 2 parenthèses , 2
crochets ou crochets et parenthèses qui se succedent)
Voilà,j'espère avoir bien expliqué les choses, le newbie que je suis est au
bout du rouleau lol. J'espère que quelqu'un aura une solution.
Merci beaucoup à tous ceux qui voudront se pencher sur mon cas.

Je marque le code que j'ai fais (ce n'est pas celui qui fonctionne le mieux,
j'en ai fait un autre qui était presque bon mais je l'ai perdu)

----------------------------------------------------------------------------
-------------------------------------------------------------
# Je tente de concatener correctement

Colonne = 6
Do
Tradinter = Cells(Ligne, Colonne)

C'est la ligne là qui part en vrille------------->> If Left(Cells(Ligne,
Colonne), 1) = "[" And Left(Cells(Ligne, Colonne + 1), 1) = "(" And
Left(Cells(Ligne, Colonne + 1), 1) <> "[" And Left(Cells(Ligne,
Colonne - 1), 1) <> "(" And Left(Cells(Ligne, Colonne - 1), 1) = "[" Then
Caption = Caption & Tradinter Else Caption = Caption & "," & Tradinter

Colonne = Colonne + 1
Loop Until Colonne = 6 + Indexcol

# J'enleve les virgules en trop en début ou fin de chaine

Taille = Len(Caption)
If Right(Caption, Taille - 1) = "," Then Label4.Caption = Right(Caption,
Taille - 1) Else Label4.Caption = Left(Caption, Taille - 1)

4 réponses

1 2
Avatar
Ticker
Je sens que je vais me faire engueuler. J'ai encore oublié un morceau de mon
problème. La disposition est déjà faites, j'avais agencé le tout comme ceci



C6 / C7 / C8 / C9
/ C10 / C11
pousser / (un cri) / [re] / pousser /
(quelqu'un) /
[sur] / prendre / (quelqu'un) / prendre /
(quelquechose) /
tenir / (quelquechose) / [re] / tenir /
(quelqu'un) /
enfermer / emprisonner / / /
/
faire / (sens de créer) / créer / /



La position de le virgule dans ce tableau:

Ligne 1 : pousser (un cri), [re] pousser (quelqu'un)
Ligne 2 : [sur] prendre (quelqu'un),prendre (quelque chose)
Ligne 3 : tenir (quelque chose),[re]tenir(quelqu'un)
Ligne 4 : enfermer, emprisonner
Ligne 5 : faire (sens créer), créer

Entre crochets [] toujours des préfixes et dans les parenthèses () des
précisions.
Mon programme réussit à trouver la ligne, je n'arrive pas à concaténer
correctement


Alors oui, je sais maintenant que j'ai vu la solution d'AV, ma méthode me
parait completement tordu (mais,elle fonctionne presque). Avoir la réponse à
mon problème me permettrai de pouvoir utiliser une première version, mais je
pense que je vais par la suite refaire mon programme, il sera ainsi beaucoup
plus clair. Je voudrais juste avoir un truc utilisable pour le moment.
Merci de votre patience.

P.S: Operator:xlAND quand peut on l'utiliser ?


"AV" a écrit dans le message de news:
blpons$23t$
Si j'ai bien compris.
Avec une liste d'expressions en A2:Ax et une liste de mots clés en B2:Bx
(plage

nommée "motsClés")
Extraire (en C2:Cx) et concaténer les expressions faisant référence à un
même

mot clé
Exemple de données et disposition :
[A1:A12] :
listExpressions
pousser (un cri)
[sur] prendre (un voleur)
[re] prendre (quelque chose)
tenir (un marteau)
prendre (quelque chose)
tenir (un discours)
[re] tenir (ses émotions)
pousser (une brouette)
prendre (le train)
[re] pousser (les avances d'une dame)
[de] tenir (un secret)
[B1:B4] :
motsClés
prendre
tenir
pousser

Sub dico()
Application.ScreenUpdating = False
Set plg = Range("A1:A" & [A65536].End(3).Row)
Set plg2 = Range("A2:A" & [A65536].End(3).Row)
Dim C As Range
For Each C In [motsClés]
[plg].AutoFilter Field:=1, Criteria1:="=**" & C.Value & "**",
Operator:=xlAnd
For Each c2 In plg2.SpecialCells(xlCellTypeVisible)
x = x & " , " & c2.Value
Next
C(1, 2) = Right(x, Len(x) - 3)
x = ""
Next
[plg].AutoFilter
End Sub

AV

"Ticker" a écrit dans le message news:
#
Je vais essayer d'être plus clair:

Je veux concatener le texte qu'il y a dans chaque cellule référencée.
En fait,il s'agit d'un petit traducteur français - chinois

dans le [] il y des préfixes et dans les () il y a une précision sur le
mot


quand cela est nécessaire:

On aurai ainsi
[re] prendre (quelque chose)

L'exemple n'est pas très probant, mais c'est surtout utile pour la
partie


chinoise, pas française.

si j'ai plusieurs synonymes, je veux les mettre à la suite avec une
petite


virgule.

[re] prendre (quelque chose) , [re] prendre (quelque chose)

bien évidemment, il n'y pas forcement de préfixe ou de précision à
apporter


d'où mon problème:
Si je veux ça:

[re] prendre (quelque chose) , prendre (quelque chose)

ou ça

[re] prendre , prendre (quelque chose)

ça marche plus :-(

j'arrive pour des exemple précis, sinon il me mets des virgules avant
la


parenthèse ou après les crochets ou même partout

Voilà,en espèrant que ça soit moins confus, parce que c'est vrai que les
A,B,C,.... c'était pas génial.
Merci pour votre aide.


"AV" a écrit dans le message de news:
blog1s$par$
Perso je pige que couic à la question et aux exemples ....!
Tu veux concatener quoi ?
une chaîne de caractères ? les contenus de cellules dont on les réfs ?
D'où sortent les [] et/ou () ??
????

AV












Avatar
AV
Je sens que je vais me faire engueuler.


Achhhhh.oui ! Pfffffffff !

SI et seulement SI dans ton exemple.. :
* j'ai bien compris les virgules et le reste.
* l'énoncé ne change pas dans la journée ;-)
* les "/" représentent des séparateurs de colonnes
* les lignes sont bien des lignes différentes (5)
* la plage à examiner est (donc) bien A1:E5
* chacun des éléments n'est pas suivi ou précédé d'espace(s) parasites

ALORS et seulement ALORS (sinon cesser immédiatement la lecture;-) :
En F1 recopie --> F5 :
=SUBSTITUE(SUBSTITUE(SUBSTITUE(SUBSTITUE(SUBSTITUE(SUBSTITUE(SUBSTITUE(SUBSTITUE
(A1&", 0"&B1&", 0"&C1&", 0"&D1&", 0"&E1;" 0[";" [");", 0(";" (");"], 0";"] ");",
0";", ");",,";"");", ,";"");" , ,";"");" , ,";"")

AV

Avatar
Ticker
ça fonctionne ,merci mille fois pour votre patience.


"AV" a écrit dans le message de news:
bltg0l$82f$
Je sens que je vais me faire engueuler.


Achhhhh.oui ! Pfffffffff !

SI et seulement SI dans ton exemple.. :
* j'ai bien compris les virgules et le reste.
* l'énoncé ne change pas dans la journée ;-)
* les "/" représentent des séparateurs de colonnes
* les lignes sont bien des lignes différentes (5)
* la plage à examiner est (donc) bien A1:E5
* chacun des éléments n'est pas suivi ou précédé d'espace(s) parasites

ALORS et seulement ALORS (sinon cesser immédiatement la lecture;-) :
En F1 recopie --> F5 :

=SUBSTITUE(SUBSTITUE(SUBSTITUE(SUBSTITUE(SUBSTITUE(SUBSTITUE(SUBSTITUE(SUBST

ITUE
(A1&", 0"&B1&", 0"&C1&", 0"&D1&", 0"&E1;" 0[";" [");", 0(";" (");"], 0";"]
");",

0";", ");",,";"");", ,";"");" , ,";"");" , ,";"")

AV






Avatar
AV
ça fonctionne ,
J'en suis ravi !


merci mille fois pour votre patience.
Il y en a bien 999 fois de trop mais .....abondance de biens...;-)


AV

1 2