Traduction MFC en Macro

  • Initiateur de la discussion Initiateur de la discussion romss82
  • Date de début Date de début

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 !

R

romss82

Guest
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

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

Dernière édition:
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

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

- 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
Assurez vous de marquer un message comme solution pour une meilleure transparence.

Discussions similaires

Réponses
3
Affichages
209
Retour