XL 2016 [RESOLU] Remplacer SommeProd par VBA

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

roybaf

XLDnaute Occasionnel
Bonsoir à tous,
Meilleurs vœux pour cette nouvelle année!!

Je joint un fichier pour le post suivant.

Ce que je voudrais c'est remplacer une sommeprod écrite en VBA par un code si possible, car la formule fait ramer ma procédure.

J'ai un tableau qui peux contenir jusqu'à 300 000 lignes et j'ai besoins de savoirs si dans la colonne A si commence par 6 ou 7 alors voir si j'ai un doublon en colonne ...

Ci joint ma formule :

Code:
=SI(SOMMEPROD((OU(GAUCHE(BD!$E$1:$E$20681)="6";GAUCHE(BD!$E$1:$E$20681)="7")*(BD!$Y$1:$Y$20681=Y2)))>=2;"Doublon";"")

Ci joint mon code qui permet de l'incrémenter (et qui fait ramer ma procédure)

Code:
Sub traitement_des_données()
Dim LstRow&
LstRow = Sheets("BD").Cells(Rows.Count, 1).End(xlUp).Row
    Sheets("BD").Activate
    Range("z2").Select
    ActiveCell.FormulaR1C1 = _
        "=IF(SUMPRODUCT((OR(LEFT(BD!R1C5:R" & LstRow & "C5)=""6"",LEFT(BD!R1C5:R" & LstRow & "C5)=""7"")*(BD!R1C25:R" & LstRow & "C25=RC[-1])))>=2,""Doublon"","""")"
    Range("z2").Select
    Selection.AutoFill Destination:=Range("z2:z" & LstRow)
End Sub

Vous verrez sur le fichier que la formule et la macro fonctionne mais je pense que l'on peut faire plus rapide...

Merci d'avance pour votre aide.
 

Pièces jointes

Bonsoir.
VB:
Sub traitement_des_données()
Dim F As Worksheet, LMax&, TCE(), TCY(), L&, D As New Dictionary
Set F = Sheets("BD")
LMax = F.Cells(Rows.Count, 1).End(xlUp).Row - 1
TCE = F.[E2].Resize(LMax).Value
TCY = F.[Y2].Resize(LMax).Value
For L = 1 To UBound(TCY)
   D(TCY(L, 1)) = D(TCY(L, 1)) - (Left$(TCE(L, 1), 1) = "6" Or Left$(TCE(L, 1), 1) = "7")
   Next L
For L = 1 To UBound(TCY)
   If D(TCY(L, 1)) > 1 Then TCY(L, 1) = "Doublon" Else TCY(L, 1) = Empty
   Next L
F.[Z2].Resize(LMax).Value = TCY
End Sub
Cochez la référence Microsoft Scripting Runtime pour que le type Dictionay soit défini par la scrrun.dll
 
- 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

Discussions similaires

Réponses
12
Affichages
468
Réponses
5
Affichages
474
  • Question Question
Microsoft 365 VBA sur outlook
Réponses
14
Affichages
949
Réponses
1
Affichages
649
Réponses
22
Affichages
3 K
Réponses
1
Affichages
1 K
Retour