créer une liste à partir d'une plage de cellules

kang

XLDnaute Nouveau
Bonjour à tous !

La question est en rapport au document ci joint.

Je souhaite constituer une base de donnée dans laquelle une ligne représente une entité.
Chaque entités va être "annotée" avec un certain nombre de mots clés (variable en fonction des entités), notés dans des cases séparées à partir de la colonne E (voir doc ci-joint).

Je souhaiterais générer une liste non redondante des mots clé dans une nouvelle feuille.
Je souhaiterais que cette liste "s'agrandisse" toute seule au fur et à mesure que je remplirai ma base.

Pour info, cette liste servira à définir les mot clé pour en conserver la pertinence.

Merci d'avance pour votre réponse !
 

Pièces jointes

  • XLD liste mot clé.xlsx
    10.9 KB · Affichages: 137

Dugenou

XLDnaute Barbatruc
Re : créer une liste à partir d'une plage de cellules

Salut kang,

C'est un peu compliqué ton affaire puisqu'on retrouve le même mot clé dans différentes colonnes. A mon avis il faut une macro qui remet ensemble tous les mots clés de toutes les colonnes puis qui dédoublonne. Je ne peux pas grand chose dans ce domaine.
Sans macro je n'imagine qu'une solution semi manuelle : par MFC on peut faire que tout nouveau mot clé saisi dans la feuille labo et qui est absent de la feuille définitions apparaisse en rouge : il ne reste alors qu'à aller l'ajouter.

Cordialement
 

Pièces jointes

  • kang mots cles.xls
    33.5 KB · Affichages: 106
  • kang mots cles.xls
    33.5 KB · Affichages: 107
  • kang mots cles.xls
    33.5 KB · Affichages: 108
Dernière édition:

tototiti2008

XLDnaute Barbatruc
Re : créer une liste à partir d'une plage de cellules

Bonjour kang, Bonjour Dugenou,

Ou alors comme ça, dans le code de la feuille Labos :

Code:
Private Sub Worksheet_Change(ByVal Target As Range)
Dim Def, Ligne As Long
    If Target.Count = 1 Then
        If Target.Column > 4 Then
            If Application.CountIf(Sheets("Def Mots Clés").Range("A1:A" & Rows.Count), Target.Value) = 0 Then
                Def = Application.InputBox(prompt:="Définition du mot clé " & Target.Value, Title:="Nouveau mot clé", Type:=2)
                If Def = False Then Def = ""
                With Sheets("Def Mots Clés")
                    Ligne = .Range("A" & .Rows.Count).End(xlUp).Row + 1
                    .Range("A" & Ligne).Value = Target.Value
                    .Range("B" & Ligne).Value = Def
                End With
            End If
        End If
    End If
End Sub
 

kang

XLDnaute Nouveau
Re : créer une liste à partir d'une plage de cellules

Bonjour Dugenou, tototiti2008,

Merci pour vos réponses.
Au pire, oui, je peux utiliser la MFC...

Tototiti2008 : merci beaucoup de ta réponse. Cependant,je n'y connais rien eb VBA et en code... Du coup, je sais pas vraiment quoi faire de ce néanmoins sympathique code proposé...
 

Dugenou

XLDnaute Barbatruc
Re : créer une liste à partir d'une plage de cellules

Re bonjour à tous,

Merci tititoto ! ça marche au poil !

Kang : j'ai intégré la dans le fichier joint : il faut entrer la définition quand on saisi le nouveau mot clé.

A plus
 

Pièces jointes

  • kang mots cles.xls
    43.5 KB · Affichages: 145
  • kang mots cles.xls
    43.5 KB · Affichages: 149
  • kang mots cles.xls
    43.5 KB · Affichages: 150

tototiti2008

XLDnaute Barbatruc
Re : créer une liste à partir d'une plage de cellules

Re,

Clic droit sur la feuille Labos - Visualiser le code
tu colles l'ensemble du code proposé
tu fermes la fenêtre pour revenir à Excel

Puis pour tester, tu tapes un nouveau mot clé dans la feuille Labos
le fichier devra être enregistré en xlsm pour que la macro ne soit pas perdue
 

tototiti2008

XLDnaute Barbatruc
Re : créer une liste à partir d'une plage de cellules

Re,

Voici le code commenté
C'est une procédure évènementielle de la feuille
Worksheet_change se déclenche lorsque l'on a modifié le contenu d'une cellule de la feuille (saisie ou collage)

Code:
Private Sub Worksheet_Change(ByVal Target As Range)
'Target représente la cellule ou la plage de cellule qui a été modifié
Dim Def, Ligne As Long
    If Target.Count = 1 Then 'S'il n'y a qu'une seule cellule de modifiée
        If Target.Column > 4 Then 'Si la colonne est E ou au-delà
            If Application.CountIf(Sheets("Def Mots Clés").Range("A1:A" & Rows.Count), Target.Value) = 0 Then
'Si la valeur qui vient d'être saisie n'existe pas dans la 1ère colonne de la feuille Def Mots Clés
                Def = Application.InputBox(prompt:="Définition du mot clé " & Target.Value, Title:="Nouveau mot clé", Type:=2)
'On demande à l'utilisateur de taper la définition du nouveau mot clé
                If Def = False Then Def = "" 'Si l'utilisateur clique sur Annuler, on considère une définition vide
                With Sheets("Def Mots Clés")
                    Ligne = .Range("A" & .Rows.Count).End(xlUp).Row + 1 'Numéro de la 1ère ligne vide de la feuille Def Mots Clés
                    .Range("A" & Ligne).Value = Target.Value 'On écrit le nouveau mot clé
                    .Range("B" & Ligne).Value = Def 'On écrit la définition associée dans la même ligne
                End With
            End If
        End If
    End If
End Sub
 
Dernière édition:

Discussions similaires

Statistiques des forums

Discussions
312 294
Messages
2 086 941
Membres
103 404
dernier inscrit
sultan87