XL 2010 Aide code de Boisgontier (Array)

cathodique

XLDnaute Barbatruc
Bonsoir,

Pas très à l'aise avec les Tableaux vba et encore moins les dictionnaires. Je sollicite votre aide.

C'est un code de Boisgontier (Items pour un code dans un Array 2D)

VB:
Sub ItemsPourUnCode()
  Set d1 = CreateObject("Scripting.Dictionary")
  a = Range("A2:B" & [a65000].End(xlUp).Row)
  j = 0
  For i = LBound(a) To UBound(a)
    If Not d1.exists(a(i, 1)) Then j = j + 1: d1(a(i, 1)) = j
  Next i
  Dim Tbl(): ReDim Tbl(1 To d1.Count, 1 To 5) 'comment remplacer le 5 par le nombre d'items
  Set d2 = CreateObject("Scripting.Dictionary")
  For i = LBound(a) To UBound(a)
      d2(a(i, 1)) = d2(a(i, 1)) + 1
      Tbl(d1(a(i, 1)), 1) = a(i, 1)
      Tbl(d1(a(i, 1)), d2(a(i, 1)) + 1) = a(i, 2)
   Next
   [E2].Resize(d1.Count, 5) = Tbl
End Sub
Le tableau Tbl est redimensionner (1 to d1.count, 1 to 5), or le code plante si le nombre de colonne dépasse 5. C'est ce que j'ai constaté en ajoutant des données.
Comment rendre la 2ème dimension dynamique (variable).
En vous remerciant par avance.

 

laetitia90

XLDnaute Barbatruc
bonsoir Cath:)
sans trop toucher ton code....
VB:
Sub ItemsPourUnCode()
  Set d1 = CreateObject("Scripting.Dictionary")
  a = Range("A2:B" & [A65000].End(xlUp).Row)
  For i = LBound(a) To UBound(a)
    If Not d1.exists(a(i, 1)) Then j = j + 1: d1(a(i, 1)) = j
    Next i
   x = i - d1.Count 'rajout
    Dim Tbl(): ReDim Tbl(1 To d1.Count, 1 To x) 'modif
Set d2 = CreateObject("Scripting.Dictionary")
  For i = LBound(a) To UBound(a)
      d2(a(i, 1)) = d2(a(i, 1)) + 1
      Tbl(d1(a(i, 1)), 1) = a(i, 1)
      Tbl(d1(a(i, 1)), d2(a(i, 1)) + 1) = a(i, 2)
   Next
   [E2].Resize(d1.Count, x) = Tbl 'modif
End Sub
il y a d'autres methode pour arriver a ce resultat "tablo dico & split" par exemple
 

cathodique

XLDnaute Barbatruc
Bonjour,

Je vous remercie beaucoup pour votre précieuse aide. J'essaie de m'améliorer à mon rythme tout en essayant de donner un coup de main. En effet, c'est suite à cette discussion que j'ai ouvert ce fil.

@BISSON Nicole: Bienvenue au forum. Un très grand bravo pour tes codes et ton fichier. J'essaierai de les adapter sur le fichier de notre ami Grisouille. Merci aussi pour le fichier, stp pourrais-tu me donner un plus de détails sur tes codes, ça me sera très utile pour la compréhension.

@ Laetitia90 : Tes compétences en la matière ne sont plus à démontrer. Merci beaucoup ta modification est parfaite.
il y a d'autres methode pour arriver a ce resultat "tablo dico & split" par exemple
Pour élargir mon champ de connaissance toutes autres solutions seront les bienvenues surtout quand elles commentées.

Merci à vous et très bonne journée.
 
Dernière édition:

laetitia90

XLDnaute Barbatruc
re Cath:) bonjour Nicole:)
effectivement beaucoup de methode Nicole a utiliser Split
on a equivalent pratiquement aussi rapide!!! peu utilisé
Range("f2:f" & m.Count + 1).TextToColumns Other:=1, OtherChar:="ù" ' "eclate" colonne
dans ce cas un seul dico un seul tablo une seule boucle.... pas de redim
VB:
Sub es()
Dim t(), m As Object, i As Long
t = Range("a2:b" & Cells(Rows.Count, 1).End(3).Row)
Set m = CreateObject("Scripting.Dictionary")
For i = 1 To UBound(t): m(t(i, 1)) = m(t(i, 1)) & t(i, 2) & "ù": Next i
[e2].Resize(m.Count, 1) = Application.Transpose(m.keys)
[f2].Resize(m.Count, 1) = Application.Transpose(m.items)
Range("f2:f" & m.Count + 1).TextToColumns Other:=1, OtherChar:="ù" ' "eclate" colonne
End Sub

ce code a un inconvenient on utilise.... Application.Transpose on est limite a 65000 items
pour contourner ce pb...autre facon de l'ecrire

VB:
Sub ess()
  Dim t(), i As Long, m As Object, x As Long
   Set m = CreateObject("Scripting.Dictionary")
   t = Range("a2:b" & Cells(Rows.Count, 1).End(3).Row)
    For i = 1 To UBound(t)
    If m.Exists(t(i, 1)) Then
    t(m(t(i, 1)), 2) = t(m(t(i, 1)), 2) & "ù" & t(i, 2)
    Else
    x = x + 1
    t(x, 1) = t(i, 1): t(x, 2) = t(i, 2): m(t(i, 1)) = x
    End If
    Next i
    [e2].Resize(x, 2) = t
    Range("f2:f" & m.Count + 1).TextToColumns Other:=1, OtherChar:="ù" ' "eclate" colonne
End Sub
 

cathodique

XLDnaute Barbatruc
Re Laetitia90,;)

Je suis sûr et certain que tes codes fonctionnent parfaitement. Vu mon niveau, c'est encore très abstrait ces histoires de variables tableau et dictionnaires. Je vais m'efforcer de comprendre tes codes. En espérant, assimiler un peu plus sur ces outils.

Encore merci, très gentil de ta part.

@+
 

mapomme

XLDnaute Barbatruc
Supporter XLD
Bonsoir cathodique :),

Uniquement pour le FUN, un essai qui utilise un dictionary de dictionary. Le résultat est trié par ordre croissant des codes. Pour chaque code, les valeurs associées sont sans doublon et triées par valeur croissante. Deux macros identiques dont une qui est commentée. On utilise une feuille auxiliaire temporaire pour trier les données et ôter les doublons.
 

Pièces jointes

  • cathodique- itemPourUneClef- v1b.xlsm
    295 KB · Affichages: 71

cathodique

XLDnaute Barbatruc
Bonjour tout le monde,

C'est trop gentil de votre part.

@mapomme : Merci beaucoup pour tes commentaires, c'est très bien expliqué.

@Dranreb : Merci beaucoup. Avec ton code on arrive au résultat escompté. Merci pour tes commentaires. Pour mon niveau, je trouve tes codes trop longs et compliqués. J'ai essayé à maintes reprises de potasser tes codes, mais j'avoue que j'abandonne car ça m'embrouille et du coup je ne retiens presque rien. Sinon, tu es un Maestro en la matière. Je suis sûr que tes codes sont très appréciés par des gens d'un certain niveau.

Merci à vous, bon week-end.
 
Dernière édition:

JBARBE

XLDnaute Barbatruc
Bonjour tout le monde,

C'est trop gentil de votre part.

@mapomme : Merci beaucoup pour tes commentaires, c'est très bien expliqué.

@Dranreb : Merci beaucoup. Avec ton code on arrive au résultat escompté. Merci pour tes commentaires. Pour mon niveau, je trouve tes codes trop longs et compliqués. J'ai essayé à maintes reprises de potasser tes codes, mais j'avoue que j'abandonne car ça m'embrouille et du coup je ne retiens presque rien. Sinon, tu es un Maestro en la matière. Je suis sûr que tes codes sont très appréciés par des gens d'un certain niveau.

Merci à vous, bon week-end.
Bonjour à tous,
Je connais bien mapomme et Dranreb ( excusez-moi d'oublier les Job75 et autres ) qui présentent des algorithmiques très complexes que l'on ne trouve pas sur n'importe qu'elle bouquin mis en vente ( merci excel-downloads qui nous permet d’apprécier ces macros ) !
Cela relève d'un travail très pro nécessitant une école adéquate pour acquérir une telle performance ( ce qui n'est pas mon cas ) !
J'ai téléchargé et mis de côté ces fichiers qui m'impressionnent !
Merci Messieurs !
Bonne journée à tous !
 

cathodique

XLDnaute Barbatruc
Bonjour JBARBE,
Je connais bien mapomme et Dranreb ( excusez-moi d'oublier les Job75 et autres ) qui présentent des algorithmiques très complexes que l'on ne trouve pas sur n'importe qu'elle bouquin mis en vente ( merci excel-downloads qui nous permet d’apprécier ces macros ) !
Cela relève d'un travail très pro nécessitant une école adéquate pour acquérir une telle performance ( ce qui n'est pas mon cas ) !
Je partage parfaitement ton avis, en ce qui concerne la qualité et les compétences de nos amis.

Je trouve les codes de Dranreb sont supers mais dont la compréhension n'est accessible à mon avis qu'aux initiés.

Moi aussi, j'ai mis certains fichiers (du forum) de côtés que je reprendrai le moment opportun.

Un grand bravo et un grand merci à vous. Hommages aux Dames (Laetitia90, Nicole Bisson,...).
Amicalement.
 

Dranreb

XLDnaute Barbatruc
Je fais tout ce que je peux pour expliquer que les programmes d'application utilisant la fonction Gigogne sont aussi simples que possible à écrire. L'étude du fonctionnement de la programmation interne de celle ci est aussi inutile que celle, si elle était possible, des méthodes des objets d'Excel, sans doute monstrueusement plus volumineuse et complexe. Si vous avez une idée pour faire mieux, coté commentaires guides d'utilisation, dites le moi.

Ces deux dernières lignes de commentaires supplémentaires apportent-elles quelque chose par exemple ?
VB:
Function Gigogne(ByVal PlageOuTableau, ParamArray ColOrd() As Variant) As Collection
Rem. —— Renvoie une collection d'élements de type SsGr.
'       Ceux ci ont une propriété Id As Variant et une autre Co As Collection.
'       Vous aurez à invoquer ces deux propriétés fondamentales dans votre programmation
'       d'application. Aussi faut il connaître leur existence quant que vous la rédigez.
Histoire de mieux sensibiliser au fait que ces commentaires concernent bel et bien le programmeur d'application…
Parce que je suppose qui si ça continue de paraître compliqué, c'est par ce qu'on n'en a rien lu, ne se croyant pas concerné.
 
Dernière édition:

Discussions similaires

Réponses
11
Affichages
280
Réponses
12
Affichages
242

Statistiques des forums

Discussions
312 094
Messages
2 085 244
Membres
102 833
dernier inscrit
Hassna