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

XL 2016 [RESOLU] Remplacer SommeProd par VBA

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

  • Test excel .xlsm
    2.6 MB · Affichages: 76

Dranreb

XLDnaute Barbatruc
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
 

roybaf

XLDnaute Occasionnel
Merci à tous les deux pour vos réponses.

Bebere ta formule fonctionne mais est aussi longue que ma sommeprod...

Draneb, super macro exécution 1 seconde sur 150 000 lignes!! au top merci
 

Discussions similaires

Réponses
12
Affichages
253
Réponses
14
Affichages
670
Les cookies sont requis pour utiliser ce site. Vous devez les accepter pour continuer à utiliser le site. En savoir plus…