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 !
Cela fait un bon bout de temps que je n'ai pas participé pour des raisons personnelles.
Ce soir, je viens solliciter votre précieuse aide. En essayant de mieux comprendre l'utilisation du dictionnaire sur le site de Boisgontier.
Je suis arrivé au lien ci-dessous: http://boisgontierjacques.free.fr/pages_site/Dictionnaire.htm#DicoIndice
Juste au dessus de ce lien, il y avait ces lignes:
Utilisation de Sum,Average,Match,Max,Min avec le dictionnaire
ttal = Application.Sum(d.items) donne la somme des items Moy = Application.Average(d.items) donne la moyenne p=Application.Match("toto",d.keys,0) donne la position de toto dans le dictionnaire
Cependant, je n'ai pas trouvé d'exemple d'utilisation de ces bouts de code. Auriez-vous un exemple pour Application.Sum(d.items).
Sub test()
Dim dd, dc, i As Long, clef, elem
Set dd = CreateObject("scripting.dictionary")
Set dc = CreateObject("scripting.dictionary")
For i = 2 To 15
clef = Cells(i, 1)
dd(clef) = dd(clef) + Cells(i, 2)
dc(clef) = dc(clef) + Cells(i, 3)
Next i
Range("f:h").Clear
Range("a1:c1").Copy Range("f1")
Range("f2").Resize(dd.Count) = Application.Transpose(dd.keys)
Range("g2").Resize(dd.Count) = Application.Transpose(dd.items)
Range("h2").Resize(dd.Count) = Application.Transpose(dc.items)
Range("g2:h2").Resize(dd.Count).Replace 0, "", lookat:=xlWhole
Range("a2:c2").Copy...
Bonjour @cathodique et meilleurs vœux pour cette nouvelle année 🙂,
Voir le code :
VB:
Sub test()
Dim d, i As Long
Set d = CreateObject("scripting.dictionary")
For i = 10 To 1 Step -1: d(CStr(i)) = 10 * i: Next
MsgBox Application.Sum(d.items)
MsgBox Application.Average(d.items)
MsgBox Application.Match(CStr(3), d.keys, 0)
End Sub
Bonjour @cathodique et meilleurs vœux pour cette nouvelle année 🙂,
Voir le code :
VB:
Sub test()
Dim d, i As Long
Set d = CreateObject("scripting.dictionary")
For i = 10 To 1 Step -1: d(CStr(i)) = 10 * i: Next
MsgBox Application.Sum(d.items)
MsgBox Application.Average(d.items)
MsgBox Application.Match(CStr(3), d.keys, 0)
End Sub
Pour être honnête, je ne sais pas pourquoi un dico.
En fait, je voulais mieux comprendre l'utilisation d'un dico. Je me suis rendu sur le site de Boisgontier qui est assez fourni en exemple. Et, je suis tombé sur les lignes de codes (voir post#1) dont cette ligne: Application.Sum((d.items)
Je me suis dit que ça serait intéressant d'utiliser ceci. J'ai peut-être pris un mauvais exemple.
C'est surtout dans un cadre d'apprentissage que j'ai pris cet exemple.
En fait, l'idée est la suivante, sur une feuille "bd" sont saisies toutes les opérations effectuées par un commerçant: date - montant crédit - montant débit
et voudrait sur une autre feuille extraire les opérations effectués par jour, ou par mois ou par trimestre ou semestre ou annuelle. En utilisant pour les choix une liste de validation dans une cellule.
C'est pour cela que je voudrai approfondir mes connaissances du dico et l'utilisation de Application.Sum.
Et cela, dans un souci de rapidité en cas de données conséquentes.
Voilà, je crois ne rien avoir oublié de l'idée.
cathodique
Tu as regardé ma copie d'écran?
Moi, je me demandais juste pourquoi tu ne passes par un TCD
(ce que j'ai fait)
puisqu'on obtient le même résultat (avec en plus des options esthétiques si on le souhaite, le tout manipulé uniquement à la souris 😉)
NB: Un TCD une fois fait est rapide et actualisable, non ?
cathodique
Tu as regardé ma copie d'écran?
Moi, je me demandais juste pourquoi tu ne passes par un TCD
(ce que j'ai fait)
puisqu'on obtient le même résultat (avec en plus des options esthétiques si on le souhaite, le tout manipulé uniquement à la souris 😉)
NB: Un TCD une fois fait est rapide et actualisable, non ?
[aparté dominical]
Pourtant tout aficionado d'Excel se doit de maitriser le TCD.
C'est ce que j'ai appris lors de mon noviciat à l'Abbaye de la Cambre, à IXELLES😉
Et cela m'a ouvert bien des portes, même en VBA
mais ceci est une autre histoire
[/aparté dominical]
Sub test()
Dim dd, dc, i As Long, clef, elem
Set dd = CreateObject("scripting.dictionary")
Set dc = CreateObject("scripting.dictionary")
For i = 2 To 15
clef = Cells(i, 1)
dd(clef) = dd(clef) + Cells(i, 2)
dc(clef) = dc(clef) + Cells(i, 3)
Next i
Range("f:h").Clear
Range("a1:c1").Copy Range("f1")
Range("f2").Resize(dd.Count) = Application.Transpose(dd.keys)
Range("g2").Resize(dd.Count) = Application.Transpose(dd.items)
Range("h2").Resize(dd.Count) = Application.Transpose(dc.items)
Range("g2:h2").Resize(dd.Count).Replace 0, "", lookat:=xlWhole
Range("a2:c2").Copy
Range("f2:h2").Resize(dd.Count).PasteSpecial xlPasteFormats
End Sub
Sinon le plus simple est d'utiliser la commande : Données / consolider.
[aparté dominical]
Pourtant tout aficionado d'Excel se doit de maitriser le TCD.
C'est ce que j'ai appris lors de mon noviciat à l'Abbaye de la Cambre, à IXELLES😉
Et cela m'a ouvert bien des portes, même en VBA
mais ceci est une autre histoire
[/aparté dominical]
Sub test()
Dim dd, dc, i As Long, clef, elem
Set dd = CreateObject("scripting.dictionary")
Set dc = CreateObject("scripting.dictionary")
For i = 2 To 15
clef = Cells(i, 1)
dd(clef) = dd(clef) + Cells(i, 2)
dc(clef) = dc(clef) + Cells(i, 3)
Next i
Range("f:h").Clear
Range("a1:c1").Copy Range("f1")
Range("f2").Resize(dd.Count) = Application.Transpose(dd.keys)
Range("g2").Resize(dd.Count) = Application.Transpose(dd.items)
Range("h2").Resize(dd.Count) = Application.Transpose(dc.items)
Range("g2:h2").Resize(dd.Count).Replace 0, "", lookat:=xlWhole
Range("a2:c2").Copy
Range("f2:h2").Resize(dd.Count).PasteSpecial xlPasteFormats
End Sub
Sinon le plus simple est d'utiliser la commande : Données / consolider.
==> @mapomme , Ce n'est pas que je tienne absolument au dico. Comme, je l'ai dis c'est pour essayer d'apprendre un peu plus sur les dicos. En tout cas, tous mes remerciements. Ton code fonctionne parfaitement.
=>mapomme
On a oublié Sous-Total aussi 😉
Petites questions:
1) Pourquoi je ne récupère pas Code avec ce code (ni à la main d'ailleurs)
2) Pour la consolidation, on est obligé de renseigné le FullName dans le code?
VB:
Sub Macro1()
Dim NomFichier$
'Consolidation
'adapter NomFichier avant usage
NomFichier = "'C:\Users\STAPLE\Documents\TESTS\[Application.Sum.xlsm]" & [A1].Parent.Name & "'"
Range("A1").RemoveSubtotal
Range("F:K").Clear
Range("F1").Consolidate Sources:=NomFichier & "!R1C1:R15C3", Function:=xlSum, TopRow:=True, LeftColumn:=True
End Sub
Sub Macro2()
'Sous-Total
Range("F:K").Clear
Range("A1:C15").Subtotal GroupBy:=1, Function:=xlSum, TotalList:=Array(2, 3), Replace:=True, PageBreaks:=False, SummaryBelowData:=True
ActiveSheet.Outline.ShowLevels RowLevels:=2
End Sub
=>cathodique
La técédéphobie est un trouble répandu mais curable 😉
Et le traitement est indolore et sans effet secondaire notoire.
Il suffit de quelques touches 😉
CTRL+A
ALT+S UA
ENTER
Et voilà 😉
=>mapomme
On a oublié Sous-Total aussi 😉
Petites questions:
1) Pourquoi je ne récupère pas Code avec ce code (ni à la main d'ailleurs)
2) Pour la consolidation, on est obligé de renseigné le FullName dans le code?
VB:
Sub Macro1()
Dim NomFichier$
'Consolidation
'adapter NomFichier avant usage
NomFichier = "'C:\Users\STAPLE\Documents\TESTS\[Application.Sum.xlsm]" & [A1].Parent.Name & "'"
Range("A1").RemoveSubtotal
Range("F:K").Clear
Range("F1").Consolidate Sources:=NomFichier & "!R1C1:R15C3", Function:=xlSum, TopRow:=True, LeftColumn:=True
End Sub
Sub Macro2()
'Sous-Total
Range("F:K").Clear
Range("A1:C15").Subtotal GroupBy:=1, Function:=xlSum, TotalList:=Array(2, 3), Replace:=True, PageBreaks:=False, SummaryBelowData:=True
ActiveSheet.Outline.ShowLevels RowLevels:=2
End Sub
=>cathodique
La técédéphobie est un trouble répandu mais curable 😉
Et le traitement est indolore et sans effet secondaire notoire.
Il suffit de quelques touches 😉
CTRL+A
ALT+S UA
ENTER
Et voilà 😉
==> @Staple1600 : Merci pour le conseil, je vais essayer juste pour ne pas mourir idiot avant mon trépas.
Tu t'es adressé à Mapomme (code). Je n'ai pas compris comment l'utiliser. En effet, il y a un adaptation du chemin. J'ai conclu que ton code est exécuté à partir d'un autre fichier. il plante sur cette ligne Range("A1").RemoveSubtotal
- 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