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
 

cp4

XLDnaute Barbatruc
Pour ajouter un raccourci à la macro voir démo
raccourci.gif
 

Elyes-sama

XLDnaute Nouveau
Merci beaucoup ! ça marche ! je viens d'apprendre plein de chose sur Excel grâce à toi ! C'est bon à savoir. Je vais utiliser ça en attendant mais si un jours il est possible de trouver une formule je la prendrai également.

Merci encore et bon week-end
 

cp4

XLDnaute Barbatruc
Merci beaucoup ! ça marche ! je viens d'apprendre plein de chose sur Excel grâce à toi ! C'est bon à savoir. Je vais utiliser ça en attendant mais si un jours il est possible de trouver une formule je la prendrai également.

Merci encore et bon week-end
Content que tu aies appris des choses sur Excel. Je ne suis pas très calé en formule, mais vu la répartition de tes données, je pense qu'il serait difficile de trouver une formule qui renvoie l’entête de la colonne correspondant à la valeur recherchée.

De plus, tu as parlé de 50000 lignes qui à mon avis prendra beaucoup de temps de recalcul.
Je te conseille de te mettre au VBA, ce n'est pas la mer à boire. Tu trouveras des tutos pour faire tes premières "armes" et tu pourras te faire aider ici.

Personnellement, je suis parti de rien, j'étais un utilisateur très moyen en formule. Et grâce, au forum j'ai beaucoup appris. En espérant avoir semé en toi la petite "graine VBA", à toi de la faire fructifier.

Bonne continuation et bon week-end.
 

Elyes-sama

XLDnaute Nouveau
De mon côté je vais me lancer dessus aujourd'hui car il faudrait que j'utilise ce code sur un autre Excel ion la disposition des tableaux n'est pas la même.
Merci pour les conseils, mais j'ai une dernière question, peut-on réutiliser ce code sous forme raccourcie dans n'importe quel autre fichier Excel (du moment où explique au code où chercher) ?
Merci
 

cp4

XLDnaute Barbatruc
De mon côté je vais me lancer dessus aujourd'hui car il faudrait que j'utilise ce code sur un autre Excel ion la disposition des tableaux n'est pas la même.
Merci pour les conseils, mais j'ai une dernière question, peut-on réutiliser ce code sous forme raccourcie dans n'importe quel autre fichier Excel (du moment où explique au code où chercher) ?
Merci
Bonjour @Elyes-sama ,

Je te rappelle que l'une des règles de ce forum est de commencer son message par un bonjour/bonsoir.
Sans adaptation au fichier, le code est susceptible de planter.
Étant donné que tu débutes, je vais commenter le code pour que tu puisses l'adapter à ton fichier.

A+
 

Staple1600

XLDnaute Barbatruc
Bonjour le fil, Elyse-sama, cp4

Une autre piste (sans formules, sans VBA)
et qui fonctionne sur un grand nombre de lignes (sans latence)
exmTCD.png

On peut filtrer avec la flèche du haut
et on peut également trier les molécules
(de A-Z ou Z-A)

NB: Comme cela tu auras appris 3 trucs avec Excel ;)
 

Staple1600

XLDnaute Barbatruc
Re

Il ne s'agit d'une formule mais de la fonctionnalité Tableau Croisé Dynamique
Un petit tut en guise d'apéro ? ;)
NB: Tuto concocté par David (le créateur du site Excel-Downloads)

Si tu as des questions sur comment faire un TCD, n'hésite pas
(Mais dans un premier temps, il faudrait mettre tes données comme sur ma copie d'écran)
 

Elyes-sama

XLDnaute Nouveau
Bonjour,
Je me demande, si on peut coupler le code VBA afin d'avoir la liste des aires thérapeutique associé à chaque molécule, puis faire un tableau croisé dynamique ? Dans le sens où les molécules, à partir du code vba, seront rangé comme sur ta copie d'écran ?
A la base, l'objectif était ensuite d'utiliser un tableau croisé dynamique afin de faire des rangements ect...
Merci 🙏
 

Staple1600

XLDnaute Barbatruc
Re

Je te mets un petit mode opératoire
1) donc remettre les données comme sur mon image
2) Une fois que cela est fait, sélectionner ce tableau de 2 colonnes puis sur le ruban, cliquez sur Insertion/Tableau Croisé Dynamique puis sur OK
3) Sur la nouvelle feuille qui apparait, regarder le volet à droite
Déplacer avec la souris Aires therapeutics dans la zone Filtres
et Molécules dans Lignes
Voila , tu viens de faire ton premier TCD ;)
 

Elyes-sama

XLDnaute Nouveau
Re,
Le problème est qu'il faut avoir toutes les molécules associées à chaque Aire thérapeutique. En vue de leurs nombre il est impossible que je fasse un tableau car il manquerait des données.
Mais ça sera ma prochaine étape, une fois que j'aurais associé les molécules à leurs aires thérapeutique (j'ai plus de 50000 molécules et certaines n'entrent dans aucune aires thérapeutique)...
 

cp4

XLDnaute Barbatruc
@Staple1600 ;), Bonjour et bon dimanche

@Elyes-sama :En espérant que ça puisse t'aider
VB:
Option Explicit

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, cl As Long
    ''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
    '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
    With Sheets("information")    '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, 2), .Cells(DerLig, DerCol))
    End With    'fin de travail avec la feuille "information
    '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
    '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
    With Sheets("classement")
        'on définit la plage "plgMol"
        Set plgMol = .Range("A2:A" & Range("A" & Rows.Count).End(xlUp).Row)
    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 Not Air Is Nothing Then    'si on la trouve
                cl = Air.Column    'on récupère le numero de colonne
                'on repporte dans la cellule décaler d'une colonne soit colonne B
                Cel.Offset(0, 1) = Sheets("information").Cells(1, cl).Value
            End If
        End If
    Next Cel
    '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
    '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
    'vidage des variables
    Set plgMol = Nothing
    Set Air = Nothing
    Set plg = Nothing

End Sub
 

Discussions similaires

Statistiques des forums

Discussions
312 202
Messages
2 086 180
Membres
103 152
dernier inscrit
Karibu