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

souci avec Dictionary et comptage

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

erics83

XLDnaute Impliqué
Bonjour,

j'ai un petit souci avec un code, pourtant simple d'un dictionnaire...
Code:
Sub Selectionparlieu()
Dim i As Long
Dim a As Long
Dim DicoEtab As New Dictionary

Set DicoEtab = CreateObject("scripting.dictionary")


For i = 2 To ActiveSheet.Range("T65536").End(xlUp).Row
If Cells(i, 32) = Feuil38.Cells(3, 2) Then 'va voir quelle agence sélectionnée
DicoEtab.Item(Cells(i, 20)) = Cells(i, 26)

End If
Next

[AN2].Resize(DicoEtab.Count) = Application.Transpose(DicoEtab.Keys)
[AO2].Resize(DicoEtab.Count) = Application.Transpose(DicoEtab.Items)
Il se met en erreur au niveau de
Code:
[AN2].Resize(DicoEtab.Count) = Application.Transpose(DicoEtab.Keys)
En regardant dans les variables, il s'arrête à la 256 alors qu'il y a 1068 réponses....en mettant erreur de compabilité...et je ne comprends pas pourquoi....

Merci pour votre aide,
 
Bonjour,

En fait, cela ne fonctionne pas.....ou du moins, cela ne me donne pas le résultat escompté.... : j'ai un fichier de données avec des établissement, par activité et par agence.

(je cherche à utiliser Dictionary et donc fait des essais....)

Je cherche simplement à :
lister les établissements qui sont rattachés à une agence (mise en Feuil8 B3) et les lister dans une autre colonne, avec son domaine d'activité.

J'ai donc essayé avec une macro "à l'ancienne" et j'ai essayé avec Dictionary et je n'ai pas les mêmes résultats...apparemment Dictionary ne prend que des référence unique...ou alors (et certainement) je fais une erreur....

merci pour votre aide,
(je mets en PJ un classeur test)
 

Pièces jointes

Bonjour.
Par définition les clés d'un Dictionary sont toujours uniques.
Le 2nde occurrence de "Etab1956" n'y sera donc plus ajoutée puisqu'elle y figure déjà. Cependant si l'item devait différer, il remplacerait celui spécifié la fois d'avant.
 
Merci Dranreb,

Un petit exemple ? j'ai essayé d'utiliser les Tableaux en regardant les exemples de JB, mais à chaque fois, les données sont déclarées
Code:
Sub Tab2D()
  Dim a(1 To 3, 1 To 2) ' 3 lignes x 2 colonnes
  a(1, 1) = 11
  a(1, 2) = 12
  a(2, 1) = 21
  a(2, 2) = 22
  a(3, 1) = 31
  a(3, 2) = 32
  For lig = LBound(a, 1) To UBound(a, 1)
     For col = LBound(a, 2) To UBound(a, 2)
        Cells(lig, col) = a(lig, col)
     Next col
  Next lig
End Sub
et donc, je ne sais pas trop comment les utiliser dans mon cas....

Merci pour votre aide,
 
Non. Évitez d'utiliser Cells ou Range dans des boucles, sinon vous ne gagnez rien. Aussi bien en lecture qu'en écriture, la proprié Value d'un objet Range représentant plusieurs cellules contigües est (ou, en sortie, doit être) directement constituée d'un tableau à 2 dimensions d'éléments de type Variant. Dans les boucle, ne travaillez qu'avec les éléments des tableaux. Vous chargez au début celui d'entrée en une fois, vous déposez à la fin le résultant aussi en une fois. Là vous aurez des codes rapides.
 
Très bon conseil, mais si le demandeur rame autant que moi avec les tableaux et dico, il n'avancera pas.
 
Mon corrigé :
VB:
Sub SélectionParLieuRapide()
Dim TE(), LE&, TS(), LS&, Arg
TE = Feuil4.[T2:AF2].Resize(Feuil4.[T35536].End(xlUp).Row - 1).Value
ReDim TS(1 To UBound(TE, 1), 1 To 2)
Arg = Feuil8.Cells(3, 2).Value
For LE = 1 To UBound(TE, 1)
   If TE(LE, 13) = Arg Then
      LS = LS + 1
      TS(LS, 1) = TE(LE, 1)
      TS(LS, 2) = TE(LE, 7)
      End If: Next LE
Feuil4.[AN2].Resize(UBound(TS, 1), 2).Value = TS
End Sub
 
Dernière édition:
Merci gosselien, c'est clair que je galère, mais à force.....j'espère y arriver....lol

Merci Danreb, je pense avoir compris ce que vous me suggerez, j'ai donc essayé
Code:
Sub Selectionparlieudictionary()
Dim i As Long
Dim a As Long
Dim b As Long

Dim DicoEtab As New Dictionary
b = 1
Set DicoEtab = CreateObject("scripting.dictionary")
a = [T1:AF20000]
For i = 1 To 10000
If a.Offset(, 12) = Feuil8.Cells(3, 2) Then 'va voir quelle agence sélectionnée
b = b + 1
DicoEtab.Item(b) = a.Offset(, 6)
End If
Next
Mais le code bloque au niveau de a.offset.....
Suis-je sur la "bonne" piste ?

En vous remerciant pour votre aide,
 
Merci Danreb,

Nos post se sont croisés....je vais analyser votre code et essayer d'en comprendre la logique (pour pouvoir me "perfectionner" dans les tableaux....

Merci car votre code fonctionne parfaitement (évidemment...lol) et je vois comment déclarer les variables....

Merci,

merci pour votre aide,
 
Merci Danreb,

Je viens de comprendre la logique du code. En fait apparemment j'avais pris cette même logique..., mais les déclarations et le format du tableau n'étaient vraiment pas bons.....lol

Je commence à mieux comprendre comment les utiliser et sur je vais m'entrainer pour les ré-utiliser .....si à tout hasard, vous pouviez me conseiller un "bon" tuto (car sur le net, on est noyé...) sur ces tableaux, histoire de me perfectionner, cela serait vraiment gentil.

Merci,

Merci pour votre aide,
 
Ma procédure illustre, me semble-t-il, tout ce qu'il y a à savoir sur les tableaux dynamiques de Variant, et leur utilisation comme propriété Value d'un Range de plusieurs cellules. Ce n'est pas plus compliqué que ça.
 
Merci Dranreb,

Effectivement, votre code est très clair, je pensais qu'il y avait d'autres subtilités avec les tableaux, mais si cela se résume à la "bonne" déclaration, à l'utilisation des variables comme vous me l'avez démontré, alors, je pense avoir tout compris, et j'ai hate de les ré-utiliser ...

merci,

merci pour votre aide,
 
- 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
Réponses
18
Affichages
7 K
r0man0
R
R
Réponses
0
Affichages
6 K
R
D
Réponses
3
Affichages
4 K
Dadadidou
D
Les cookies sont requis pour utiliser ce site. Vous devez les accepter pour continuer à utiliser le site. En savoir plus…