Vous utilisez un navigateur obsolète. Il se peut que ce site ou d'autres sites Web ne s'affichent pas correctement. Vous devez le mettre à jour ou utiliser un navigateur alternatif.
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 !
Bonjour,,
j'ai plusieurs Dico dont je récupère les items sans doublon et j'aimerais récupérer les valeurs sur chacul des Dico à partir d'une boucle K.
Du genre :
For K = 1 to 5
For Each D In Dico & " K".Items
Mais je ne sais pas si c'est possible.
Bonne journée
Bonsoir,
j'ai bien vérifié et au vu du classeur que tu as fournis je ne vois pas d'erreur!
VB:
Private Sub CommandButton1_Click()
Dim Cell As Range, CANum As String, K(), CA As Integer, CB As Integer
Dim Dico As Object
Set Dico = CreateObject("Scripting.Dictionary")
For CA = 1 To 5
Set Dico("CA" & CA) = CreateObject("System.Collections.SortedList")
Next
For Each Cell In Sheets("BDD").Range("A1").CurrentRegion
If Cell.Value <> "" And Cell.Row > 1 Then
CANum = Trim(Split(Cell & "-", "-")(0))
APSAS = Trim(Split(Cell & "-", "-")(1))
If Dico.exists(CANum) Then Dico(CANum)(APSAS) = Dico(CANum)(APSAS) + 1
End If
Next
K = Dico.keys
With Sheets("résultats")
.UsedRange.Delete
For CA = 0 To UBound(K)...
Sub test()
Dim dico As New Dictionary, i&, idx, elem
For i = 1 To 20: dico.Add "key-" & 10 * i, "item-" & i: Next
idx = dico.Keys: elem = dico.Items
For i = 0 To 4
MsgBox idx(i) & " / " & elem(i)
Next i
End Sub
Bonjour Mapomme, Dranreb,
Merci pour vos propositions.
J'ai testé en premier la proposition de Dranreb qui semble mieux s'intégrer à mon projet.
J'ai un messaged'erreur suivant :
J'ai bien mis : Dim TDico() As New Scripting.Dictionary
Qu'est-ce que vous vouliez afficher par votre MsgBox ?
Essayez MsgBox D.Count par exemple.
Vous pouvez aussi ranger vos Dictionary dans une collection ou dans un autre Dictionary.
Info: ma classe SsGr est muni de deux propriétés: Id As Variant et Co as Collection
Ma fonction Gigogne renvoie une collection de ces objets à partir d'une ou plusieurs colonnes d'un tableau. Leur propriété Id étant les valeurs de la 1ère colonne spécifiée et leur propriété Co les collections de leurs contenus. Elle peuvent à leur tour contenir des SsGr si plusieurs colonnes sont spécifiées, sinon ce sont des tableaux dynamique d'une seule dimension contenant les valeurs de toutes les colonnes de chaque ligne attaché à cet Id. Le tout peut s'explorer très facilement par des bloc For Each SGrXY In … imbriqués. Joignez votre classeur si le point de départ de vos données est effectivement un tableau, et je vous y installerai mes modules de service pour ma fonction Gigogne.
Sub Test()
Dim tablo, ub1&, ub2%, TDico(), j%, i&, x$, a
tablo = [A1:C11]
ub1 = UBound(tablo)
ub2 = UBound(tablo, 2)
ReDim TDico(1 To ub2)
For j = 1 To ub2
Set TDico(j) = CreateObject("Scripting.Dictionary")
For i = 2 To ub1
x = tablo(i, j)
TDico(j)(x) = TDico(j)(x) + 1 'comptage
Next i
a = TDico(j).items
For i = 0 To UBound(a)
MsgBox a(i), , "TDico " & j
Next i, j
End Sub
Qu'est-ce que vous vouliez afficher par votre MsgBox ?
Essayez MsgBox D.Count par exemple.
Vous pouvez aussi ranger vos Dictionary dans une collection ou dans un autre Dictionary.
Info: ma classe SsGr est muni de deux propriétés: Id As Variant et Co as Collection
Ma fonction Gigogne renvoie une collection de ces objets à partir d'une ou plusieurs colonnes d'un tableau. Leur propriété Id étant les valeurs de la 1ère colonne spécifiée et leur propriété Co les collections de leurs contenus. Elle peuvent à leur tour contenir des SsGr si plusieurs colonnes sont spécifiées, sinon ce sont des tableaux dynamique d'une seule dimension contenant les valeurs de toutes les colonnes de chaque ligne attaché à cet Id. Le tout peut s'explorer très facilement par des bloc For Each SGrXY In … imbriqués. Joignez votre classeur si le point de départ de vos données est effectivement un tableau, et je vous y installerai mes modules de service pour ma fonction Gigogne.
Bonjour
Je ne comprends pas ce que vous voulez dire. Un Dictionary peut garantir des clés uniques et des items correspondants. Mais un seul, pas une ribambelle !
Joignez un classeur montrant ce que vous avez et ce que vous voulez.
J'ai aussi un autre module de service n'utilisant pas d'objet qui peut produire une table d'éléments String classée et sans doublon accompagnée d'un table de listes de numéros des lignes d'où il sont tirés dans la colonne source.
Re, voici en PJ , un fichier plus parlant et qui fonctionne avec ma maco MAIS qui demande à etre simplifiée par des boucles. @Dranreb : ou trouver votre fichier Gigogne?
Bonne journée
Dim Dico As Object
Set Dico = CreateObject("Scripting.Dictionary")
Set Dico("1") = CreateObject("Scripting.Dictionary")
Set Dico("2") = CreateObject("Scripting.Dictionary")
Set Dico("3") = CreateObject("Scripting.Dictionary")
Set Dico("4") = CreateObject("Scripting.Dictionary")
Set Dico("5") = CreateObject("Scripting.Dictionary")
For Each Cell In .Range("A2:A" & .Range("A65000").End(xlUp).Row)
If Cell.Value = "" Then Exit For
'regrouper tous les champs entre eux et en isolant les "CAx"
For K = 1 To 3
CANum = Right(Left(.Cells(Cell.Row, .Range("APSA" & K).Column), 3), 1)
APSAS = Right(.Cells(Cell.Row, .Range("APSA" & K).Column), Len(.Cells(Cell.Row, .Range("APSA" & K).Column)) - 4)
If Not Dico(CANum).Exists(APSAS) Then Dico(CANum).Add APSAS, APSAS
Next K
Next Cell
- 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