Ceci est une page optimisée pour les mobiles. Cliquez sur ce texte pour afficher la vraie page.

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 herve62 en fait la MFC est dans l'onglet DDE pour la voir il faut que ton curseur soit actif sur une des case et à partir de la tu peux voir la MFC

merci d'avance pour ton aide
 
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,

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

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
Les cookies sont requis pour utiliser ce site. Vous devez les accepter pour continuer à utiliser le site. En savoir plus…