XL 2016 Plantage au niveau Excel 2016

yaraar

XLDnaute Junior
Bonjour;

y'a t'il une astuce pour éviter le plantage réplétif sur mon Fichier excel , je travail sur un fichier excel avec plus de 100,000 lignes et 30 colonnes.
 
Solution
Voyez le fichier joint et cette macro dans le code de la feuille :
VB:
Private Sub Worksheet_Change(ByVal Target As Range)
If Intersect(Target, [G1]) Is Nothing Then Exit Sub
Dim dat, dest As Range, d As Object, dd As Object, tablo, i&, x$, titre, ncol%, j%, a
dat = [G1]
Set dest = [G4] '1ère cellule de destination
'---tableau source---
Set d = CreateObject("Scripting.Dictionary")
Set dd = CreateObject("Scripting.Dictionary")
tablo = [Tableau2] 'tableau structuré
For i = 1 To UBound(tablo)
    d(tablo(i, 2)) = ""
    x = tablo(i, 2) & tablo(i, 4) & tablo(i, 3) & tablo(i, 1)
    If Not dd.exists(x) Then dd(x) = tablo(i, 5)
Next i
If d.Count = 0 Then GoTo 1
'---tableau des titres---
titre = [G2:AE3] 'à adapter
ncol = UBound(titre, 2)
For j = 2 To...

job75

XLDnaute Barbatruc
Bonjour yaraar, le forum,

Fichier (2) avec ce code plus simple pour le tableau des résultats :
VB:
'---tableau des résultats---
tablo = dest.Resize(d.Count, ncol)
a = d.keys
For i = 1 To UBound(tablo)
    tablo(i, 1) = a(i - 1)
    For j = 2 To ncol
        tablo(i, j) = dd(tablo(i, 1) & titre(2, j) & titre(1, j) & dat)
Next j, i
J'ai aussi modifié la couleur en colonne G (.Color au lieu de .ColorIndex).

A+
 

Pièces jointes

  • Classeur(2).xlsm
    93.7 KB · Affichages: 6

yaraar

XLDnaute Junior
Bonjour job 75;

j'ai ajouté une colonne au nom de ''cell'' que dois je modifier dans le code source pour que le tableau soit rempli

merci
1638303200236-png.1123416
 

job75

XLDnaute Barbatruc
Bonsoir yaraar,

Ce que vous voulez mettre en colonne H est bien trop compliqué.

Contentez-vous de cette macro :
VB:
Private Sub Worksheet_Change(ByVal Target As Range)
If Intersect(Target, [H1]) Is Nothing Then Exit Sub
Dim dat, dest As Range, d As Object, dd As Object, tablo, i&, x$, titre, ncol%, j%, a
dat = [H1]
Set dest = [H4] '1ère cellule de destination
'---tableau source---
Set d = CreateObject("Scripting.Dictionary")
Set dd = CreateObject("Scripting.Dictionary")
tablo = [Tableau2] 'tableau structuré
For i = 1 To UBound(tablo)
    x = tablo(i, 2) & " ; " & tablo(i, 3)
    d(x) = ""
    x = x & tablo(i, 5) & tablo(i, 4) & tablo(i, 1)
    If Not dd.exists(x) Then dd(x) = tablo(i, 6)
Next i
If d.Count = 0 Then GoTo 1
'---tableau des titres---
titre = [H2:AF3] 'à adapter
ncol = UBound(titre, 2)
For j = 2 To ncol
    If titre(1, j) = "" Then titre(1, j) = titre(1, j - 1) 'remplit les cellules vides
Next j
'---tableau des résultats---
tablo = dest.Resize(d.Count, ncol)
a = d.keys
For i = 1 To UBound(tablo)
    tablo(i, 1) = a(i - 1)
    For j = 2 To ncol
        tablo(i, j) = dd(tablo(i, 1) & titre(2, j) & titre(1, j) & dat)
Next j, i
'---restitution---
With dest.Resize(d.Count, ncol)
    .Value = tablo
    .Borders.Weight = xlThin
    .Columns(1).Interior.Color = 16772300 'bleu
End With
'---RAZ en dessous---
1 dest.Offset(d.Count).Resize(Rows.Count - d.Count - dest.Row + 1, ncol).Delete xlUp
With UsedRange: End With 'actualise la barre de défilement verticale
End Sub
A+
 
Dernière édition:

job75

XLDnaute Barbatruc
A mon avis l'erreur vient du fait que vous avez créé une nouvelle feuille avec un nouveau tableau structuré dont le nom n'est pas Tableau2.

Tableau2 est alors l'ancien tableau avec 5 colonnes alors qu'il en faut 6.

Si c'est bien cela il suffit dans la macro de mettre le nom du nouveau tableau à la place de Tableau2.
 

Discussions similaires

Statistiques des forums

Discussions
312 177
Messages
2 085 974
Membres
103 076
dernier inscrit
LoneWolf90