XL 2010 Dresser un tableau à partir d'un dictionnaire et d'un autre tableau

Magic_Doctor

XLDnaute Barbatruc
Bpnsoir,

J'ai un dictionnaire, nommé "dico", qui recueille les éléments d'une liste.
J'ai un tableau, nommé tab1, qui contient certains éléments du dictionnaire.
Je veux créer un second tableau (tab2) qui contienne les éléments du dictionnaire dont on a soustrait ceux du premier tableau.
Supposons que le 1er tableau contienne 5 éléments. Comment m'y prendre ?
 

njhub

XLDnaute Occasionnel
Bonjour Magic_Doctor,

Vous pourriez procéder comme suit,

dans "dico", générer un numéro de ligne pour les items absents (dicoligne) de tab1

Code:
=SI(ESTNUM(EQUIV(tab1A1;dicotexte;0));"";LIGNE())

puis dans tab2 récupérer les valeurs

Code:
=INDIRECT(dicotexte&PETITE.VALEUR(dicoligne;LIGNE());1)

vous aurez compris que
"dicotexte" correspond à la colonne de "dico" dans laquelle on retrouve les termes recherchés
"dicoligne" correspond à la ligne de "dico" dans laquelle on ne retrouve pas les termes recherchés dans tab1

;)
 

mapomme

XLDnaute Barbatruc
Supporter XLD
Bonjour @Magic_Doctor ;),

Bien taquin tu es ce matin (du moins en France) o_O. Aucun fichier, nada, rien à se mettre sous la dent :(. Les répondeurs n'ont qu'à utiliser leur boule de cristal.

Pour rester dans des généralités oiseuses :
  • le dico possède des clefs,
  • je suppose que le tableau tb1 possède aussi une quelque part sur chaque ligne un terme correspondant à quelque chose qui ressemble à une clef
  • parcourir le tb1 et ôter les éléments du dico qui ont pour clefs celles du tb1 ne me semble pas insurmontable
 
Dernière édition:

Magic_Doctor

XLDnaute Barbatruc
Bonjour mapomme,

Il est vrai que n'utilisant que le VBA dans Excel, j'oublie de le mentionner.
Le fichier est trop volumineux, ou plutôt a trop de procédures, voilà pourquoi je ne l'ai pas uplodé.
J'avais tenté un truc du genre :
VB:
    For i = 1 To 5  '5 éléments dans le tableau "tab1"
        dico.Remove tab1(i)  '28 éléments dans le dictionnaire "dico" | on y retire les 5 items contenus dans le tableau "tab1()"
    Next
  
    ReDim tab2(1 To 23)  'il y aura fatalement dans le tableau dynamique "tab2()" 23 éléments, soit 28 - 5 éléments
  
    For i = 0 To 22  'Base 0 (22 = 23 - 1)
        tab2(i + 1) = dico.Keys(i)
    Next
Fracaso (lamentable échec).
 
Dernière édition:

job75

XLDnaute Barbatruc
Bonjour Magic_Doctor, njhub, mapomme,

J'y vais de ma solution :
VB:
Sub Calcul()
Dim liste, tab1, d As Object, e, tab2
liste = Array("A1", "A2", "A3", "A4", "A5", "A6", "A7", "A8", "A9", "A10")
tab1 = Array("A2", "A4", "A6", "A8", "A10")
Set d = CreateObject("Scripting.Dictionary")
For Each e In liste
    d(e) = ""
Next
For Each e In tab1
    If d.exists(e) Then d.Remove e
Next
'---restitution (pour tester)---
Application.ScreenUpdating = False
Range("A2:C" & Rows.Count).ClearContents 'RAZ
[A2].Resize(UBound(liste) + 1) = Application.Transpose(liste)
[B2].Resize(UBound(tab1) + 1) = Application.Transpose(tab1)
If d.Count = 0 Then Exit Sub
tab2 = d.keys
[C2].Resize(UBound(tab2) + 1) = Application.Transpose(tab2)
End Sub
A+
 

Pièces jointes

  • Listes(1).xlsm
    18.1 KB · Affichages: 5

Discussions similaires

Statistiques des forums

Discussions
312 231
Messages
2 086 450
Membres
103 214
dernier inscrit
MASSA1616