Ceci est une page optimisée pour les mobiles. Cliquez sur ce texte pour afficher la vraie page.

fonction Scripting.Dictionary

  • Initiateur de la discussion Initiateur de la discussion Pyrof
  • 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 !

Pyrof

XLDnaute Occasionnel
Bonjour,

J'utilise beaucoup la fonction CreateObject("Scripting.Dictionary")
comme dans la document :

Dim a, d, i 'Crée des variables
Set d = CreateObject("Scripting.Dictionary")
d.Add "a", "Athènes" 'Ajoute des clés et des éléments.
d.Add "c", "Le Caire"
d.Add "b", "Belgrade"
a = d.keys 'Obtient les éléments

For i = 0 To d.Count -1 'Effectue une itération sur le tableau
Print a(i) 'Imprime un élément
Next

Seulement lorsque l'on fait un for to (ou each), il nous les liste suivant l'ordre d'insertion.
Je souhaiterai faire un tri alphabétique sur les clés.

Quelqu'un a t-il fait cela et comment

Merci
 
Re : fonction Scripting.Dictionary

bonjour Pyrof

voici un essai de classement des clés

Code:
Sub test()
Dim a, d, i 'Crée des variables
Set d = CreateObject("Scripting.Dictionary")
d.Add "a", "Athènes" 'Ajoute des clés et des éléments.
d.Add "c", "Le Caire"
d.Add "b", "Belgrade"
a = d.keys 'Obtient les éléments
' classement des clés
For n = 1 To UBound(a)
 For m = n + 1 To UBound(a)
   If a(m) < a(n) Then
   temp = a(m)
   a(m) = a(n)
   a(n) = temp
   End If
 Next m
Next n
'Affichage
For i = 0 To d.Count - 1 'Effectue une itération sur le tableau
MsgBox (d(a(i))) 'Affiche un élément
Next
End Sub
 
Re : fonction Scripting.Dictionary

bonjour,
Pour des raisons de rapidité d'execution, j'ai utilisé "sripting.dictionary".
j'ai créé un premier dico ayant comme "binome": "repère chemin de câbles" / "dimensions chemin de câbles"
Ensuite j'en ai créé un second tel que: " "repère chemin de câbles" / "Somme des surfaces des câbles y cheminant"

Donc j'ai deux dicos: (AA / BB) et (AA / CC)

Mon problème est que je ne parviens pas à faire correspondre les deux dicos en les reportant sur un onglet "RESULTAT" dans un tableau 2D: col A: "repère chemin de câbles", col B:"dimensions ChdC", col C: "surface utilisée"

Pourriez-vous m'aider
merci d'avance
 
Re : fonction Scripting.Dictionary

Bonjour.

Utilisez des dictionnaires arborescents, voir modules appropriés de OutIdx, ils sont très facile à construire et à utiliser: leurs item contiennent au final les liste des numéros de lignes en correspondances avec les clés de tous les niveaux.

Edit: Salut pierrejean

J'ajouterai qu'avec deux dictionnaires arborescents à un seul niveau, il est possible de construire une version filtrée du second ne comportant que les n° de lignes associés à une clé donnée du premier, et que tout cela est effectué automatiquement dans le module de classe ComboBoxLiés. Celui cii permet un minimum de code dans un Userform, avec obtention, dans une procédure évènement Résultat, de la liste des n° des lignes communes à tous les choix.
 
Dernière édition:
Re : fonction Scripting.Dictionary

Bonjour jlgi

Si dico1 est AA/BB , dico2 est AA/CC


Code:
a=dico1.keys
b=dico1.items
c=dico2.items
for n=lbound(a) to ubound(a)
 sheets("RESULTAT").range("A" & n+2)=a(n)
 sheets("RESULTAT").range("B" & n+2)=b(n)
 sheets("RESULTAT").range("C" & n+2)=c(n)
next

Edit :Salut Dranreb
 
Re : fonction Scripting.Dictionary

Bonjour à tous
Une proposition avec une propriété rarement utilisée:
VB:
Private Sub CommandButton1_Click()
Dim i&, T As Variant, Dico As Object
Set Dico = CreateObject("Scripting.dictionary")
With Sheets("Feuil1")
    T = .Range(.Cells(1, 1), .Cells(.Rows.Count, 7).End(3))
End With
For i = LBound(T, 1) To UBound(T, 1)
    Dico(T(i, 1)) = Array(T(i, 1), T(i, 3), T(i, 6))
Next i
Sheets("Feuil1").Cells(1, 12).Resize(Dico.Count, 3) = Application.Index(Dico.items, , 0)
End Sub
Cordialement
 

Pièces jointes

Re : fonction Scripting.Dictionary

Bonjour,

Module de classe donnant une liste triée

Classe Dictionnaire

http://boisgontierjacques.free.fr/fichiers/Cellules/ClasseDictionnaireDico.xls

http://boisgontierjacques.free.fr/fichiers/Cellules/DictTri.xls

Code:
Sub ListeSansDoublonsDicoTrié()
  Set d1 = New Dictionnaire
  a = Range("A2:B" & [A65000].End(xlUp).Row)
  For i = 1 To UBound(a)
    d1.ajout a(i, 1), a(i, 2)
  Next i
  '--- résultat dans le tableur
  Range("d2").Resize(d1.Count, 2) = d1.Tri
  '-- résultat dans un tableau
  a = d1.Tri
End Sub

JB
 
Dernière édition:
Re : fonction Scripting.Dictionary

D'ailleurs possible que vous n'ayez pas besoin de Dictionary: La fonction GroupOrg du module MClassement de OutIdx pourrait suffire.
Elle a besoin des modules de classe TableIndex et SsGroup.
 
Re : fonction Scripting.Dictionary

Bonjour et merci pierrejean

Ca marche et c'est super rapide.
En fait, je m'étais perdu dans l'aide excel qui n'a fait que m'embrouiller.
Je tiens à signaler que je suis novice en la matière et que ce forum m'aide énormément.

Merci encore à tous
 
- 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

Discussions similaires

Réponses
40
Affichages
3 K
Réponses
3
Affichages
662
Réponses
12
Affichages
756
H
  • Résolu(e)
Microsoft 365 Fond de couleur
Réponses
2
Affichages
887
Harry13
H
R
Réponses
20
Affichages
4 K
RaVenSs
R
Les cookies sont requis pour utiliser ce site. Vous devez les accepter pour continuer à utiliser le site. En savoir plus…