Microsoft 365 Ajouter texte si doublons

Elyes-sama

XLDnaute Nouveau
Bonjour,

Voilà ça fait 2 jours que je ne trouve pas la solution à mon problème. J'aimerai pouvoir afficher du texte dans une cellule s'il y'a correspondance entre 2 mots présents dans d'autre cellule.
J'ai un tableau dans l'onglet 1 avec des produits et chaque produit est associé à un groupe. Dans l'onglet 2 j'ai une très longue liste de produit et j'aimerai associé les produits à leurs groupes dans une nouvelle cellule dans l'onglet 2.
N'hésitez pas si vous avez des questions, j'espère avoir été clair.
Merci d'avance à ceux qui prendront le temps de m'aider
 

Staple1600

XLDnaute Barbatruc
Re

Comme il fallait que mon cassoulet mitonne, j'ai pris le temps de réagencer tes données comme sur mon exemple
(voir fichier joint)

Pour l'insérer dans Excel=> Fichier-> Ouvrir -> type: *.txt
Quand l'assistant d'importation s'affiche, cocher Mes données ont des entêtes
et choisir comme Séparateur: tabulation
 

Pièces jointes

  • nouvtab.txt
    3.2 KB · Affichages: 2

Elyes-sama

XLDnaute Nouveau
Re,
Le code que vous m'avez proposé plante tu as bien raison, j'ai mis en rouge les choses que j'ai adapté à mon nouveau Excel :
DerLig = .Range ("H1)
DerCol = .Cells (8, .Cells...
Set plg = .Range(.Cells(8,2)

Set plgMol = .Range("I2:I" & Range("I" & ...

Mon classeur va de A à BK et descend jusqu'à 40 000 cellules

J'aimerai vraiment comprendre ce qui ne fonctionne pas. D'autant plus que rien ne change vraiment sinon...

Sinon je ne comprends pas également cette partie du code :
Cel.Offset(0, 1) = Sheets("information").Cells(1, cl).Value
J'imagine que ça doit bug ici.
 

Elyes-sama

XLDnaute Nouveau
Re

Comme il fallait que mon cassoulet mitonne, j'ai pris le temps de réagencer tes données comme sur mon exemple
(voir fichier joint)

Pour l'insérer dans Excel=> Fichier-> Ouvrir -> type: *.txt
Quand l'assistant d'importation s'affiche, cocher Mes données ont des entêtes
et choisir comme Séparateur: tabulation
Re

Il faut savoir que je ne peux pas ranger ces noms de molécules car elles ne sont pas complète encore.
 

cp4

XLDnaute Barbatruc
Re,
Le code que vous m'avez proposé plante tu as bien raison, j'ai mis en rouge les choses que j'ai adapté à mon nouveau Excel :
DerLig = .Range ("H1)
DerCol = .Cells (8, .Cells...
Set plg = .Range(.Cells(8,2)

Set plgMol = .Range("I2:I" & Range("I" & ...

Mon classeur va de A à BK et descend jusqu'à 40 000 cellules

J'aimerai vraiment comprendre ce qui ne fonctionne pas. D'autant plus que rien ne change vraiment sinon...

Sinon je ne comprends pas également cette partie du code :

J'imagine que ça doit bug ici.
Je me suis permis de renommer la feuille 'information' par 'Aires therapeutics' et supprimer la colonne du même nom. Je te joins un fichier qui inscrira 'pas de correspondance' si la molécule n'a pas d'aire therapeutique.

edit ton code au complet ça sera plus clair voir demo pour éditer correctement le code
Balise de code.gif

A+
 

Pièces jointes

  • fichier exemple2.xlsm
    38 KB · Affichages: 1

Elyes-sama

XLDnaute Nouveau
Bonjour,
J'ai beau essayé mais cela ne fonctionne pas, je dois faire quelques chose de mal.
Je vous ai mis en pièce jointe le fichier final (toutes les données importantes sont supprimés) mais la disposition sera la même.
J'ai la colonne Aires thérapeutique en cellule BK et toutes les molécules sont en colonne I et descend jusqu'à 38K en nombre de cellule. Sachant que le fichier était trop volumineux, j'ai réduit le nombre de molécule au lieu de 38 000. J'aimerai pouvoir faire la même chose mais afficher "other" quand la molécule ne correspond pas au lieu de "pas de correspondance".
J'espère que cela ne vous embêtera pas, car vous m'avez déjà tellement aidé.
Merci encore et je continue à apprendre à utiliser le Vba c'est super intéressant
 

Pièces jointes

  • Exemple final.xlsx
    15.3 KB · Affichages: 1

Elyes-sama

XLDnaute Nouveau
Re

Elyes-sama
Donc tu abandonnes la piste TCD?
Pourtant, c'est la plus simple et elle risque pas de planter ;)
(vu que VBA free)
Précisions: ce n'est pas une critique de l'ouvrage fourni par Cp4.
Re,
Non je n'abondons pas mais j'aimerai d'abord classer toutes les molécules par leurs aires thérapeutique avant de faire ce tableau.
Car je ne peux pas classer les molécules comme tu l'a fait dan ton screen car c'est ce que j'aimerai faire et je veux pas le faire 1 par 1 vue le nombre
 

Elyes-sama

XLDnaute Nouveau
VB:
Sub F_molecule()
'On doit déclarer les variables utilisées dans la procédure
'Range ==> cellule ou plage de cellules
'Long ==> numérique Nombre entier de - 2'147'483'648 à 2'147'483'647
'Integer ==>numérique Nombre entier de -32'768 à 32'767 (si tu es sûr que tu n'auras pas plus de 32 767 lignes)
    Dim plg As Range, DerLig As Long, DerCol As Long, plgMol As Range
    Dim Cel As Range, Air As Range, dl As Long
    ''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
    With Sheets("Aires therapeutics")    'signifie qu'on travaille avec la feuille "information"
        'étant donné que la derniere ligne non vide des colonnes n'est pas la même
        'on recherche la derniere ligne non vide de la plage courante à la cellule A1
        'avec la igne de code ci-dessous
        DerLig = .Range("A1").CurrentRegion.Find("*", , , , xlByRows, xlPrevious).Row

        'on récupère la dernière colonne non vide de la ligne 1 (ligne de code ci-dessous)
        DerCol = .Cells(1, .Cells.Columns.Count).End(xlToLeft).Column

        'on définit la plage "plg" où l'on va rechercher les molécules
        Set plg = .Range(.Cells(1, 1), .Cells(DerLig, DerCol))
    End With    'fin de travail avec la feuille "information
    '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
    With Sheets("Classement")
dl = .Range("I" & Rows.Count).End(xlUp).Row 'dernière ligne colonne A
.Range("B2:B" & dl).ClearContents 'on efface contenu cellules colonne B
        
'on définit la plage "plgMol"
Set plgMol = .Range("I2:I" & dl)
    End With
    '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
    'boucle for each sur toutes les cellules de la plage plgMol
    For Each Cel In plgMol
        If Cel <> "" Then    'si la cellule concernée n'est pas vide (juste par précaution qu'il y ait ces cellues vides)
            'on définit la variable Air (cellule) que l'on veut trouver dans plage plg
            Set Air = plg.Find(Cel, LookAt:=xlWhole)
            If Air Is Nothing Then    'si pas trouver
                Cel.Offset(0, 1) = "Pas de correspondance"
            Else
                'on repporte dans la cellule décaler d'une colonne soit colonne B
                Cel.Offset(0, 1) = Sheets("Aires therapeutics").Cells(1, Air.Column).Value
            End If
        End If
    Next Cel
    '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
    'vidage des variables
    Set plgMol = Nothing
    Set Air = Nothing
    Set plg = Nothing

End Sub

J'ai fais ça mais ça me met pas de correspondance à chaque molécules et ça ne le met pas dans la colonne BK mais dans la colonne J (juste après la colonne I qui correspond aux molécules)
 

Staple1600

XLDnaute Barbatruc
RE

=>Elyes-sama
Pour infos, j'ai joint un fichier texte(*) (donc avec les données réagencées comme sur ma copie d'écran)
Il suffit donc d'ouvrir ce fichier txt dans Excel puis de créer le TCD pour voir les possibilités offertes par celui-ci.
(Il ne s'agit pour toi que de faire le test pour voir si tu peux pérenniser plus tard ou pas la solution TCD)

(*) dans le message#31
 

Staple1600

XLDnaute Barbatruc
Re

En clair, ce qu'on voit sur ma copie d'écran:
1) peut te servir.
2) ou ne pas te servir
Si tu réponds oui au point 1), alors je continuerai à suivre ce fil et à apporter des informations et des réponses à tes questions
Si non, je laisse Cp4 poursuivre avec la solution VBA.

NB: En théorie, l'usage pour le demandeur est de tester toutes les propositions par les répondeurs dans le fil.
 

Elyes-sama

XLDnaute Nouveau
RE,

Je ne penses pas que ça peut me servir car j'aimerai afficher les aires thérapeutiques en fonction du nom de la molécule. Dans ta capture d'écran tu as déjà les noms des aires thérapeutiques par rapport à la molécule (vue le petit nombre c'est possible), mais moi j'ai tellement de molécule que le problème et que je ne peux pas le faire à la main.
Le TCD va me servir une fois que j'aurai réussi à donner des noms d'aires thérapeutiques à mes molécules car ensuite avec le TCD (si je comprends bien) je pourrais trier mes paramètres ville, CA, industries... en fonction des aires thérapeutiques qu'ils utilisent.

Je ne sais pas si tu m'a compris, il est difficile de bien expliquer mon cas, j'apprécie l'aide mais je ne comprends pas trop où tu veux en venir par rapport à mon problème.

Merci
 

Staple1600

XLDnaute Barbatruc
Re

Je ne veux en venir nulle part en particulier
Je reste simplement fidèle au principe KISS ;)
1) Tu dis débuter avec Excel (NB: ce n'est pas une critique, on a tous débuté avec Excel un jour)
2) Donc je te propose un TCD
(car ne nécessite que peu de connaissances puisque se manipule à la souris, et sans devoir connaitre le VBA
3) Je te conseille d'agencer tes donnés comme on le fait classiquement dans Excel
(afin justement de pouvoir réaliser des TCD
4) Enfin je t'indique simplement que j'eusse apprécier que tu testes ma proposition (à savoir faire toi-même un TCD à partir du fichier texte que je t'ai fourni)

une fois que j'aurai réussi à donner des noms d'aires thérapeutiques à mes molécules
Sauf erreur, c'est ce que j'ai déjà fait dans le fichier texte que je t'ai proposé.

Kesako le principe KISS, me diras-tu ?
Bonne découverte te répondrai-je ;)
 

Discussions similaires