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

Formule rechercheV buggée et run macro très long

  • Initiateur de la discussion Initiateur de la discussion osishame
  • 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 !

O

osishame

Guest
Bonjour,

A l'aide d'une macro "CommunsCode", je compare les premières colonnes de deux tableaux F1 (onglet BE) et F2 (onglet Crapull) et en extrait les lignes communes à partir de mon tableau F2.
Je souhaite ensuite faire une recherchev des autres colonnes de mon tableaux F2 sur mon tableau F1 pour en comparer les valeurs.

La macro tourne sans problèmes sauf sur une des colonnes "#VALUES". Help !!
Ci-joint le fichier contenant la macro et le bug surligné en rouge.

De plus, mon fichier original contient un très grand nombre de lignes (+2000) et la macro mets +de 3min à tourner. Est-il possible d'alléger mon code pour permettre un run plus performant ?

Merci 🙂
 

Pièces jointes

Re : Formule rechercheV buggée et run macro très long

=RechvSansAccent(A2;BE!$A$2:$D$11;4)

Il faut récupérer les infos des 2 fichiers directement (voir exemple joint)

Code:
Sub CommunsTot()
  Set f1 = Sheets("BD1")
  Set f2 = Sheets("BD2")
  Set f3 = Sheets("Communs2")
  Set mondico1 = CreateObject("Scripting.Dictionary")
  For Each c In f1.Range("a2:a" & f1.[a65000].End(xlUp).Row)   ' adapter
    mondico1(UCase(sansAccent(c.Value))) = c.Row
  Next c
  Set mondico2 = CreateObject("Scripting.Dictionary")
  For Each c In f2.Range("a2:a" & f2.[a65000].End(xlUp).Row)   ' adapter
    tmp = UCase(sansAccent(c.Value))
    If mondico1.exists(tmp) Then If Not mondico2.exists(tmp) Then mondico2(tmp) = c.Row
  Next c
  f3.[A2].Resize(mondico2.Count, 1) = Application.Transpose(mondico2.keys)
  col1 = f1.[A1].CurrentRegion.Columns.Count     ' adapter
  col2 = f2.[A1].CurrentRegion.Columns.Count     ' adapter
  lig = 2
  For Each c In mondico2
    f1.Cells(mondico1(c), 1).Resize(, col1).Copy f3.Cells(lig, 2)
    f2.Cells(mondico2(c), 1).Resize(, col2).Copy f3.Cells(lig, col1 + 2)
    lig = lig + 1
  Next c
End Sub

JB
 

Pièces jointes

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

M
Réponses
3
Affichages
2 K
B
Réponses
1
Affichages
1 K
J
Réponses
9
Affichages
2 K
O
Réponses
6
Affichages
2 K
osishame
O
J
Réponses
16
Affichages
3 K
J
F
Réponses
5
Affichages
3 K
Philippe Tulliez
P
R
Réponses
5
Affichages
4 K
Rigolax
R
Les cookies sont requis pour utiliser ce site. Vous devez les accepter pour continuer à utiliser le site. En savoir plus…