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

reconstruire un dictionnaire en y éliminant une clé "vacante"

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 !

Magic_Doctor

XLDnaute Barbatruc
Supporter XLD
Bonsoir,

Je manie mal les dictionnaires ("Scipting.Dictionary"), aussi soyez indulgents vis à vis de mes gaucheries.
Voilà, je veux récupérer dans un dictionnaire des items (clés, je crois).
L'une de ces clés est une constante, elle apparaîtra toujours.
Les autres clés dépendent du contexte, mais il y aura toujours une (et une seule) de ces autres clés qui devra disparaître du dictionnaire.
Je suis parvenu à dresser le dictionnaire avec toutes les clés, mais y compris celle qui est vide, et je voudrais que ce dictionnaire ne l'inclu plus.
 

Pièces jointes

Re : reconstruire un dictionnaire en y éliminant une clé "vacante"

Bonsoir Magic_Doctor,

C'est bien, en testant ton code j'ai appris quelque chose : faire appel à dico(i) s'il n'existe pas le crée dans le dictionnaire, je l'ignorais

peut-être un truc comme ça

Code:
Sub ListeOnglets()
Dim i As Byte, j As Byte, MonClasseur As Workbook, dico As Object
Set MonClasseur = ActiveWorkbook
Set dico = CreateObject("Scripting.Dictionary")
j = 2
For i = 0 To MonClasseur.Worksheets.Count
    j = j + 1
    If i = 0 Then
        dico(0) = "rendez-vous avec :" 'le 1er item de la liste est toujours "rendez-vous avec :"
    ElseIf Sheets(i).Name <> ActiveSheet.Name Then 'nom de la feuille active qui ne doit pas figurer dans la liste
        dico(i) = Sheets(i).Name
    Else
        j = j - 1
    End If
    If dico.exists(i) Then
        Range("A" & j) = i 'pour voir ce que ça donne
        Range("B" & j) = dico(i) 'idem
    End If
Next
End Sub
 
Re : reconstruire un dictionnaire en y éliminant une clé "vacante"

Bonjour,

-L'objet Dictionary associe des valeurs à des clefs.



Code:
Sub listeOnglets()
    Set dico = CreateObject("Scripting.Dictionary")
    dico("rendez-vous avec:") = ""
    For Each c In ActiveWorkbook.Sheets
      dico(c.Name) = ""
    Next c
    dico.Remove (ActiveSheet.Name)
    [a2].Resize(dico.Count) = Application.Transpose(dico.keys)
End Sub

Réponse à la prochaine question:


Me.ComboBox1.List=dico.Keys


JB
 

Pièces jointes

Dernière édition:
Re : reconstruire un dictionnaire en y éliminant une clé "vacante"

Bonjour tototiti2008, BOISGONTIER,

Merci pour vos réponses. Vos solutions marchent parfaitement : on récupère à chaque fois le contenu du dictionnaire avec les conditions stipulées (1ère clé toujours la même, le nom de la feuille active exclu du dico, les noms des autres feuilles sont dans le dico).
La solution de BOIGONTIER me semble plus rapide, ce qui me semble normal car il n'y a pas de boucles. En revanche son contenu (bref) ne m'est pas vraiment clair (¡Caramba! encore des progrès à faire...).
Ce problème ayant été réglé, je peux maintenant revenir sur le fil qui l'a engendré.

Bonne après-midi à tous.
 
Re : reconstruire un dictionnaire en y éliminant une clé "vacante"

Bonjour,

Je reviens sur le sujet.
Je me suis penché un bon moment sur la solution "laconique" de BOISGONTIER, qui fonctionne parfaitement, mais un mystère (du moins pour moi...) demeure :
VB:
dico(c.Name) = ""
Je ne comprends pas comment le dictionnaire peut, à chaque fois, s'enrichir d'un nom de feuille.

Merci pour éclairer ma lanterne.
 
Re : reconstruire un dictionnaire en y éliminant une clé "vacante"

Bonjour,

-Si tu avais regardé le petit dessin du post#3, tu aurais compris qu'il y a d'une part les clés et d'autre part les items assioiés aux xlés (contrairement aux tableaux classiques où il n'y a que des items).
Donc, sur exemple, les noms de feuilles sont dans les clés seulement

dico(c.Name) = ""

-Avec

dico(c.Name) = c.Name

Nous aurions les noms dans les clés ET les items

-Dans ton exemple initial , en écrivant d(i)=c.name, tu as fabriqué un pseudo tableau classique.

Tu obtiens des clés 1,2,3,4,... et des Items qui contiennent les noms des feuilles.
ça fonctionne mais c'est plus compliqué.
(On peut imaginer de trier les items d'un dictionnaire avec cette méthode mais le temps de tri est + long que dans un tableau classique)

Les gains du dictionnaire par rapport aux tableaux à 1 dimension sont souvent
- la simplicité d'écriture (pas d'indice à gérer, pas de dimension à gérer, suppression simple)
- et la rapidité d'accès aux clés

Les informaticiens classiques sont souvent formatés tableau et ne perçoivent pas l'intérêt du dictionnaire.

JB
 
Dernière édition:
Re : reconstruire un dictionnaire en y éliminant une clé "vacante"

Bonjour Magic_Doctor,

Chaque élément d'un dictionnaire contient une Clé (Key) et une Valeur (Item)
Clé comme Valeur peuvent être numériques ou textuelles
Les doublons des Clés ne seront pas ajoutés, c'est aussi l'intérêt du dictionnaire, enlever les doublons
Si tu n'as besoin que d'une information, alors il faut la mettre dans la clé (qui doit toujours être renseignée), mais en l'absence de besoin de Valeur (seconde information) tu peux très bien mettre rien ("") dans la Valeur (en plus ça prend moins de place mémoire)
c'est ce qui est fait ici :

dico(c.Name) = ""
On crée un élément qui a pour clé C.Name et rien comme Valeur

Edit : Bing, bonjour Boisgontier 🙂
 
Re : reconstruire un dictionnaire en y éliminant une clé "vacante"

Bonjour BOISGONTIER & tototiti2008,

Un grand merci pour vos explications. Je commence à y voir plus clair.
BOISGONTIER, j'avais non seulement vu le petit tableau du post#3, mais aussi ta page au sujet du "Sripting.Dictionary". Mais reconnaissons que ce dictionnaire n'est pas le sujet le plus simple de VBA, mais il permet en revanche tellement de possibilités qu'il mérite qu'on s'y intéresse.

Une excellente journée à 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
Les cookies sont requis pour utiliser ce site. Vous devez les accepter pour continuer à utiliser le site. En savoir plus…