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 !

moutchec

XLDnaute Occasionnel
bonjour à tous,
je cherche un code VBA pour remplacer les formules en colonne B de la feuille "recap" avec mise à jour à l'activation de la feuille.
j'ai parcouru quelques fils sur le forum mais pas de solution de ce type.
merci d'avance.
Moutchec.
 

Pièces jointes

Bonsoir.
VB:
Option Explicit

Private Sub Worksheet_Activate()
Dim Parti As GigIdx.SsGr, T(1 To 500, 1 To 2), L As Long
For Each Parti In GigIdx.Gigogne(Feuil1.[B2:C2], 1)
   L = L + 1
   T(L, 1) = Parti.ID
   T(L, 2) = Parti.Somme(2)
   Next Parti
Me.[A2].Resize(UBound(T, 1), UBound(T, 2)).Value = T
End Sub
 

Pièces jointes

Bonjour le forum,

Un classique dans l'utilisation des tableaux VBA :
Code:
Private Sub Worksheet_Activate()
Dim t, d As Object, i&, a, b
t = Feuil1.[A1].CurrentRegion.Resize(, 3)
Set d = CreateObject("Scripting.Dictionary")
d.CompareMode = vbTextCompare 'la casse est ignorée
Application.ScreenUpdating = False
For i = 2 To UBound(t)
  d(t(i, 2)) = d(t(i, 2)) + IIf(IsNumeric(t(i, 3)), t(i, 3), 0)
Next
If FilterMode Then ShowAllData 'si la feuille est filtrée
Range("A2:B" & Rows.Count) = "" 'RAZ
If d.Count = 0 Then Exit Sub
a = d.keys: b = d.items: ReDim t(UBound(a), 1) 'base 0
For i = 0 To UBound(a)
  t(i, 0) = a(i): t(i, 1) = b(i)
Next
[A2].Resize(i, 2) = t
[A2].Resize(i, 2).Sort [A2], xlAscending, Header:=xlNo 'tri facultatif
End Sub
Edit : ajouté If FilterMode Then ShowAllData 'si la feuille est filtrée

L'exécution est très rapide même avec un grand nombre de lignes.

Bonne journée.
 

Pièces jointes

Dernière édition:
Re,

Pour tester j'ai copié le tableau source sur 90 000 lignes.

L'inconvénient du TCD c'est qu'il faut alors changer la source de données.

Ceci étant fait l'actualisation prend chez moi 0,16 seconde.

Avec mon fichier du post #7 le résultat est obtenu en 0,35 seconde.

A+
 
Re,

Mais avec le TCD si l'on change la source de données automatiquement :
Code:
Private Sub Worksheet_Activate()
Me.PivotTables(1).ChangePivotCache ThisWorkbook.PivotCaches.Create(xlDatabase, Feuil1.[A1].CurrentRegion)
End Sub
le résultat s'obtient chez moi en 0,49 seconde, c'est un peu moins rapide que par tableaux VBA.

A+
 
- 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éponses
20
Affichages
242
Retour