Dictionnaire à partir d'un tableau de données

  • Initiateur de la discussion Initiateur de la discussion Roblim
  • Date de début Date de début

Boostez vos compétences Excel avec notre communauté !

Rejoignez Excel Downloads, le rendez-vous des passionnés où l'entraide fait la force. Apprenez, échangez, progressez – et tout ça gratuitement ! 👉 Inscrivez-vous maintenant !

R

Roblim

Guest
Bonjour,
Encore une fois je viens vous présenter une nouvelle question.

Je suis en train de créer une base de données dont le tableau est explicité dans la feuille 1 du fichier joint.
Avec les patronymes qui sont présents dans les colonnes E et P de ce tableau, je souhaiterais créer automatiquement en feuille 2 un dictionnaire des noms.
Celui-ci se présenterait sous la forme d'un tableau avec une colonne par lettre de l'alphabet.
Dans les colonnes, les noms seraient triés automatiquement par ordre alphabetique et les doublons enlevés.
 

Pièces jointes

Re : Dictionnaire à partir d'un tableau de données

Bonjour Roblim, Bh² 🙂,
Un peu à la bourre moi 😛.
Ma proposition, je jettes un oeil à celle de Bh² 😀
Code:
[COLOR=blue]Sub[/COLOR] Test()
[COLOR=green]' Librement adapté de JB [URL="http://boisgontierjacques.free.fr/"]Formation Excel VBA JB[/URL][/COLOR]
[COLOR=blue]Set[/COLOR] MonDico = CreateObject("Scripting.Dictionary")
[COLOR=blue]With[/COLOR] Sheets("Feuil1")
[COLOR=blue]For Each[/COLOR] c [COLOR=blue]In[/COLOR] .Range([E9], [E65000].End(xlUp))
[COLOR=blue]If[/COLOR] c.Value <> "" [COLOR=blue]Then[/COLOR]
MonDico.Item(c.Value & " " & c.Offset(0, 1).Value) = c.Value & " " & c.Offset(0, 1).Value
[COLOR=blue]End If[/COLOR]
[COLOR=blue]Next[/COLOR] c
[COLOR=blue]For Each[/COLOR] c [COLOR=blue]In[/COLOR] .Range([P9], [P65000].End(xlUp))
[COLOR=blue]If[/COLOR] c.Value <> "" [COLOR=blue]Then[/COLOR]
MonDico.Item(c.Value & " " & c.Offset(0, 1).Value) = c.Value & " " & c.Offset(0, 1).Value
[COLOR=blue]End If[/COLOR]
[COLOR=blue]Next[/COLOR] c
[COLOR=blue]End With[/COLOR]
temp = MonDico.items
[COLOR=blue]Call[/COLOR] tri(temp, [COLOR=blue]LBound[/COLOR](temp), [COLOR=blue]UBound[/COLOR](temp))
[COLOR=blue]With[/COLOR] Sheets("Feuil3")
[COLOR=blue]For[/COLOR] J = 1 [COLOR=blue]To[/COLOR] 26
K = 5
[COLOR=blue]For[/COLOR] I = [COLOR=blue]LBound[/COLOR](temp) [COLOR=blue]To UBound[/COLOR](temp)
[COLOR=blue]If[/COLOR] Left(temp(I), 1) = .Cells(4, J) [COLOR=blue]Then[/COLOR]
.Cells(K, J) = temp(I)
K = K + 1
[COLOR=blue]End If[/COLOR]
[COLOR=blue]Next[/COLOR] I
[COLOR=blue]Next[/COLOR] J
[COLOR=blue]End With[/COLOR]
[COLOR=blue]End Sub[/COLOR]
[COLOR=blue]Sub[/COLOR] tri(a, gauc, droi)[COLOR=green] ' Quick sort par JB [URL="http://boisgontierjacques.free.fr/"]Formation Excel VBA JB[/URL][/COLOR]
  ref = a((gauc + droi) \ 2)
  g = gauc: d = droi
  [COLOR=blue]Do[/COLOR]
    [COLOR=blue]Do While[/COLOR] a(g) < ref: g = g + 1: [COLOR=blue]Loop[/COLOR]
    [COLOR=blue]Do While[/COLOR] ref < a(d): d = d - 1: [COLOR=blue]Loop[/COLOR]
    [COLOR=blue]If[/COLOR] g <= d [COLOR=blue]Then[/COLOR]
      temp = a(g): a(g) = a(d): a(d) = temp
      g = g + 1: d = d - 1
    [COLOR=blue]End If[/COLOR]
  [COLOR=blue]Loop While[/COLOR] g <= d
  [COLOR=blue]If[/COLOR] g < droi [COLOR=blue]Then Call[/COLOR] tri(a, g, droi)
  [COLOR=blue]If[/COLOR] gauc < d [COLOR=blue]Then Call[/COLOR] tri(a, gauc, d)
[COLOR=blue]End Sub[/COLOR]
Bon dimanche 😎
Ajout : Même raisonnement, code un peu différent. J'ai pris les prénoms en plus, bonne chose ou pas, je ne sais pas 😀
 
Dernière édition:
Re : Dictionnaire à partir d'un tableau de données

Bonjour bh2 et JPN
Comme d'habitude l'expertise répond présent.
Je réponds tout de suite à JPN que j'avais également comme projet de faire un DicoIndividu et là sa solution trouve toute sa place, merci pour cette anticipation.
Je reviendrais sur cette fonction mais il faut que je comprenne d'abord le première.
Chaud !!!!!!!!!

Pour la solution de bh2, elle répond à mon besoin.
Mais je voudrais aller plus loin dans la compréhension.
-J'ai fait une copie du bouton "go" dans mon fichier original
-j'ai été voir si il y avait alors la macro; je ne l'ai pas vu
-j'ai activé le bouton, le fichier "test" est alors activé, ouvert
-le dico dans mon fichier original est bien constitué

Ma question et cela rejoint un peu la procédure de création : quelles sont les macros taches à effectuer pour créer cette possibilité dans mon fichier original.
 
Dernière modification par un modérateur:
Re : Dictionnaire à partir d'un tableau de données

Pardon Jean-Marcel, je n'avais pas réactualiser ma page et donc pas vu ta réponse.
Je suis en train de comprendre comment faire comme tu peux le lire sur mon message
- le bouton
- le programme
- l'association du programme au bouton
je plane un peu
 
Re : Dictionnaire à partir d'un tableau de données

Re-,

Dans mon fichier, en faisant Alt + F11, tu accèdes au VBE (Visual Basic Editor)

Dans l'explorateur de projets, à gauche, tu as "Module1"

clique dessus, et tout en maintenant le bouton appuyé, glisse le module dans ton projet (regarde les noms "VBAProjects")

Ensuite, il faut changer l'affectation de code du bouton "GO" (là, il pointe sur mon fichier)

Clique droit dessus, "Affecter une macro"

Dans la liste, sélectionne "Tri_par_nom", celui qui n'est pas précédé du nom de mon fichier...

Bon courage
 
Re : Dictionnaire à partir d'un tableau de données

Dans mon projet, j'ai déjà des lignes de prg (des macros ) dans module 1; est ce que ce glissé ne va pas les écraser ??
 
Dernière modification par un modérateur:
Re : Dictionnaire à partir d'un tableau de données

Je l'ai fait et cela m'a créer un nouveau module, donc mes craintes étaient non fondées.
Tout a bien fonctionné. (je comprends maintenant pourquoi il est possible de faire pointer le VBE sur un fichier ou sur tous!!!)
Pour faire ce dico je faisais des manipulations de données que tu peux imaginer, cela me prennait prés de 20 minutes.
VRAIMENT merci

Je vais maintenant regarder la proposition de JPN pour le dico des individus.
 
Re : Dictionnaire à partir d'un tableau de données

Bonjour à tous,

Je vois que le sujet interpelle.

Une solution par Dictionary, merci à JB pour les modèles de son site :
Objet dictionary

Le code est dans le module de la feuille "Feuil1". Son transfert dans un autre classeur est à réaliser avec un simple copier/Coller.
 

Pièces jointes

Dernière édition:
Re : Dictionnaire à partir d'un tableau de données

hb2,
pour aller un peu plus loin dans ma compréhension
- comment l'enchainement se fait-il de la macro tri par nom à la macro tri?
- le private sub bouton de commande se fait automatiquement ou l'as tu écrit?
 
Re : Dictionnaire à partir d'un tableau de données

Re-,

Pour le tri, regarde dans le bas du code "Tri_par_nom", tu as une ligne qui ressemble à ça :

Code:
Call tri(Tmp, LBound(Tmp), UBound(Tmp))

C'est cette ligne qui appelle le code de tri...

Pour le bouton de commande, j'ai fait un bête rectangle, issu de la barre d'outils "Dessin", et avec le clic droit, je lui ai affecté la macro...
 
Re : Dictionnaire à partir d'un tableau de données

Bonjour à tous,

Je vois que le sujet interpelle.

Une solution par Dictionary, merci à JB pour les modèles de son site :
Objet dictionary

Le code est dans le module de la feuille "Feuil1". Son transfert dans un autre classeur est à réaliser avec un simple copier/Coller.

Bonjour à tous,

Je me suis également laissé interpeller par le sujet, et je joins donc le résultat de mes réflexions.

Bien que moins technique et moins "pro" que les travaux précédemment exposés, ma solution a pour seul mérite de n'utiliser que des instructions basiques en VBA, connues par quasiment tous les amateurs de macros.

Espérant avoir été utile.

Cordialement.
 

Pièces jointes

Re : Dictionnaire à partir d'un tableau de données

Bonjour à tous

Moi aussi, cela m'a interpellé.

Débutant en VBA, j'ai fait ce code en sélectionnnant les lettres de la feuille 3 et en les nommant: Pour cela, tapez Lettre dans le petit Carré à droite de la barre de formule:

Code:
Sub test()
Sheets("Feuil1").Select
For Each cell In Range("E9:E" & Range("E65536").End(xlUp).Row)
col = Sheets("Feuil3").Range("Lettre").Find(Left(cell, 1)).Column
derl = (Sheets("Feuil3").Cells(65536, col).End(xlUp).Row) + 1
Sheets("Feuil3").Cells(derl, col) = cell
Next
End Sub


Pour le tri, je pense faire appel à Henry 🙂, quoique à la réflexion le code de fin de Papou devrait aller 😉.
 
Dernière édition:
- Navigue sans publicité
- Accède à Cléa, notre assistante IA experte Excel... et pas que...
- Profite de fonctionnalités exclusives
Ton soutien permet à Excel Downloads de rester 100% gratuit et de continuer à rassembler les passionnés d'Excel.
Je deviens Supporter XLD
Assurez vous de marquer un message comme solution pour une meilleure transparence.

Discussions similaires

Réponses
5
Affichages
691
Retour