Traduction MFC en Macro

romss82

XLDnaute Nouveau
bonjour à tous voici plusieurs semaines que je galère avec ma macro

je souhaiterai traduire la MFC du fichier ci-joint en macro car j'ai un nombre de lignes très important (environ 50 000)


merci à tous de votre aide
 

Pièces jointes

  • Copie de Classeur1.xlsm
    19 KB · Affichages: 83

job75

XLDnaute Barbatruc
Bonjour romss82, herve62, le forum,

La macro de la feuille "DDE" (clic droit sur l'onglet et Visualiser le code) :
Code:
Private Sub Worksheet_Change(ByVal Target As Range)
Dim d As Object, t, i&, matrice()
Set d = CreateObject("Scripting.Dictionary")
d.CompareMode = vbTextCompare 'la casse est ignorée
Application.ScreenUpdating = False
'---liste sans doublon des concaténations en 1ère feuille---
t = Feuil1.[A2].CurrentRegion.Resize(, 12) 'CodeName Feuil1
For i = 2 To UBound(t)
  d(Left(t(i, 3), 6) & t(i, 10) & t(i, 12)) = ""
Next
'---tableau matrice sur 2ème feuille---
t = [A1].CurrentRegion.Resize(, 7)
ReDim matrice(1 To UBound(t), 1 To 1)
For i = 2 To UBound(t)
  If Not d.exists(t(i, 3) & t(i, 6) & t(i, 7)) Then matrice(i, 1) = True
Next
'---restitution en 3ème feuille---
With Feuil3.[A1].Resize(UBound(t)) 'CodeName Feuil3
  .Parent.Columns(1).ClearContents
  .Value = matrice
  .Name = "Matrice" 'plage nommée pour la MFC
End With
End Sub
Elle permet de créer la plage "Matrice" utilisée dans la MFC sur les colonnes A:O entières :
Code:
=INDEX(Matrice;LIGNE())
Grâce aux tableaux VBA et au Dictionary l'exécution est très rapide.

Pour tester j'ai recopié le tableau A2:O4 de la feuille "DDE" sur 60000 lignes.

Sur Win 10 - Excel 2013 la modification d'une cellule s'exécute alors en 0,53 seconde, c'est très acceptable.

Fichier joint.

A+
 

Pièces jointes

  • MFC(1).xlsm
    31.8 KB · Affichages: 64
Dernière édition:

job75

XLDnaute Barbatruc
Re,

J'ai ajouté une 2ème condition à la MFC pour appliquer les bordures au tableau :
Code:
=LIGNE()<=LIGNES(Matrice)
J'ai coché les cases "Interrompre si Vrai" pour que cela fonctionne sur les versions antérieures à Excel 2007.

Fichier (2).

A+
 

Pièces jointes

  • MFC(2).xlsm
    29.3 KB · Affichages: 52

job75

XLDnaute Barbatruc
Re,

La solution que j'ai donnée fonctionne sans problème sur un tableau organisé en tableau Excel.

Sur un tel tableau tous les formats, couleurs, bordures, MFC, se recopient sur les nouvelles lignes.

J'ai inséré la ligne 2 (masquée) par sécurité.

Fichier joint.

A+
 

Pièces jointes

  • MFC sur tableau Excel(1).xlsm
    33.3 KB · Affichages: 54

job75

XLDnaute Barbatruc
Re,

Pour finir, le tableau en feuille "Base" pouvant être modifié, j'ai ajouté cette macro :
Code:
Private Sub Worksheet_Activate()
Worksheet_Change [A1]
End Sub
Ci-joint les 3 fichiers complétés.

A+
 

Pièces jointes

  • MFC(1 bis).xlsm
    32.1 KB · Affichages: 52
  • MFC(2 bis).xlsm
    32 KB · Affichages: 57
  • MFC sur tableau Excel(1 bis).xlsm
    36.2 KB · Affichages: 59

Discussions similaires

Statistiques des forums

Discussions
312 854
Messages
2 092 825
Membres
105 539
dernier inscrit
Morgane0202