Convertir une ligne en chaine de caractères avec condition

Bonjour!

Grace à vous, j'ai pu énormément avancer dans la création d'un outil qui va m'être très utile et je voulais vous remercier.

Il me reste une dernière étape et j'ai besoin de votre aide!

J'ai une feuille nommée "Repères" et je cible la ligne B2:SG2 (oui, 500 cellules) qui contiennent du texte (repère 1, repère 2, repère 3...)

Sous cette ligne (donc B3:SG3) j'ai une valeur en texte qui désigne un nom(Type 1A, Type 1B, Type 1A, Type 3...)

Sur une autre feuille nommée: "Types" dans la cellule B32, je cherche le résultat suivant:

  • Toutes les valeurs textes de la ligne Repères!B2:SG2 si la valeur adjacente en B3:SG3 est = à B4
  • Renvoyer la chaine de caractère en séparant d'une virgule

Dans ma feuille "Type", si ma cellule B4, contient "Type 1A", le résultat attendu serait un renvoi de tous les repères associés au type 1A

Repère 1, Repère 3, Repère 8...

J'ai essayé de clarifier les choses sur le document en écrivant bêtement en texte le résultat attendu et en coloriant ce qui est utilisé.

Merci infiniment pour votre aide

16reperes-0-3.xlsx (24.23 Ko)

Bonsoir,

Je me permets d'abord de te faire remarquer que : Type 1VR et Type 1 VR sont deux chaînes différentes.

Lorsqu'on veut réaliser un travail précis sur des chaînes on apporte le plus grand soin à la présence d'espaces...

Et si en B4 il y a Type 1, on ne cherchera pas Type 1VR !

Par ailleurs on devrait retrouver strictement les exemples cités dans ton post dans ton fichier, et ce n'est pas le cas !

Enfin la méthode permettant de réaliser le plus rapidement cette opération paraît être l'utilisation du dictionnaire.

Cordialement.

Voilà une macro qui fera le job :

Sub RechercheType()
    Dim d As Object, aa, bb, i%, T$
    T = Worksheets("Types").Range("B4")
    With Worksheets("Repères")
        aa = .Range("B2:SG2").Value
        bb = .Range("B3:SG3").Value
    End With
    Set d = CreateObject("Scripting.Dictionary")
    For i = 1 To UBound(bb, 2)
        If bb(1, i) = T Then d(aa(1, i)) = ""
    Next i
    Worksheets("Types").Range("B32") = Join(d.keys, ", ")
End Sub

Tu la places dans un Module Standard, et la lances par le moyen que tu souhaites (bouton dans la feuille, raccourci clavier ou directement par la boîte de dialogue).

Cordialement.

Bonjour,

Une alternative à VBA avec Power query (complément gratuit Microsoft).

On crée une table Type/Nom et on fait un simple RECHERCHEV().

snip 20181025021847
4reperes-0-3.xlsx (38.88 Ko)

A te relire, peut-être !...

Cdlt.

Bonsoir,

Je me permets d'abord de te faire remarquer que : Type 1VR et Type 1 VR sont deux chaînes différentes.

Lorsqu'on veut réaliser un travail précis sur des chaînes on apporte le plus grand soin à la présence d'espaces...

Et si en B4 il y a Type 1, on ne cherchera pas Type 1VR !

Par ailleurs on devrait retrouver strictement les exemples cités dans ton post dans ton fichier, et ce n'est pas le cas !

Enfin la méthode permettant de réaliser le plus rapidement cette opération paraît être l'utilisation du dictionnaire.

Cordialement.

Ok, merci de me dire que je dois être précis, ça m'as beaucoup aider. J'ai réussi à le faire beaucoup plus simplement avec une formule que quelqu'un m'as filer. Merci encore.

Bonjour,

Peux-tu communique le solution par formule ?

Cdlt.

merci de me dire que je dois être précis

Je conçois que ce type de remarque te fasse réagir mais il faut bien que quelqu'un finisse par te le faire remarquer (en espérant que tu en tires profit ) et ta réaction consistant à ignorer les propositions faites par ailleurs manque quelque peu d'élégance...

Salut Jean-Eric !

Ok mais répondre à côté de la plaque en pointant des détails futiles c'est ridicule.

Je sais bien que les espaces sont importants dans un tableau mais pas dans mon explication.mon tableau contient une liste déroulante pour ne pas se tromper en écrivant "Type 1" tu seras obliger de toujours mettre le bon type donc merci de ne pas prendre les gens pour plus cons qu'ils ne le sont et stp si c'est juste pour la rammener c'est pas la peine. Heureusement que certains internautes m'ont vraiment aider... merci à eux.

Bonjour,

Peux-tu communique le solution par formule ?

Cdlt.

Difficile la car je suis au boulot sur mon téléphone mais en gros en faisant 2 lignes c'est faisable. B1=a1; b2=b1&a2 et tu déroule. En gros. Si je me souviens bien.

Bonne journée à tous et merci pour votre aide.

Sachant que ligne 1 peut être un "si" y'a moyen de le faire avec ca

Ok mais répondre à côté de la plaque en pointant des détails futiles c'est ridicule.

Désolé de la différence d'appréciation mais je considère qu'il s'agit de détails tout à fait essentiels et je passe sur les incidences socio-économiques...

De plus, ton humeur ne t'a sans doute pas permis de voir qu'à la suite des quelques remarques qui ont focalisé ton attention, il y avait l'indication de la méthode que j'entendais utiliser pour résoudre le problème.

Et le premier post était suivi d'un second, matérialisant cette méthode dans une macro réalisant le résultat demandé, que tu n'as semble-t-il ni vue ni essayée... Peu importe, cela pourra toujours servir à quelqu'un d'autre...

Mais comme tu as également ignoré la proposition de Jean-Eric, on ne sait plus bien ce que tu as vu ou pas.

Quant à une solution formules, j'étais quelque peu étonné qu'une formule dans une seule cellule puisse produire le résultat, mais evidemment si on en utilise plusieurs, des solutions formules sont tout à fait envisageables.

D'ailleurs la proposition de macro VBA pourrait être transformée en fonction personnalisée, ce qui la rendrait utilisable dans une formule (qui, elle opèrerait dans une seule cellule pour y fournir le résultat voulu), mais cela ne m'avait pas paru opportun dans le contexte... une fonction ne devenant intéressante que si l'on a à faire varier le contexte d'utilisation, ce qui permet alors d'avoir une macro qui opère en lui passant les éléments variables de calcul sous forme d'arguments de la fonction.

Ok c'est me dernier message de toi que je prends le temps de lire.

Au revoir.

Tu n'es en rien obligé de me lire : . J'avais d'ailleurs constaté que tu ne lisais pas ou à côté.

Trouve un travail stp

Aucun besoin, ce n'est pas ton affaire, et je travaille !

"et je passe sur les incidences socio-économiques..."

Tu te rends même pas compte que tu fais chier le monde pour des conneries complètement en dehors du sujet. T'est un marginal en manque d'occupation, de lien social et d'importance. Ça s'entend.

Je me retire de ce sujet car la je reçois un mail à chaque fois que tu gerbe ton mal être.

Bisous. Trouve un travail.

Pour ce qui est du sujet tu as fait une démonstration en posant une question pour ignorer les réponses proposant des solutions à la question.

Pour le reste, mieux vaut en rire !

Re,

@ Anthelm,

Je veillerai à ne plus intervenir pour tes prochains messages.

Rechercher des sujets similaires à "convertir ligne chaine caracteres condition"