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

XL 2016 Macro pour afficher grande valeur

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 !

guellila

XLDnaute Junior
Bonjour

j'ai un tableau Excel avec deux colonnes Site A et Site B et des données de pourcentages sur la colonnes C , je cherche une macro pour remplir les cellules de la colonnes D avec le plus grand pourcentage qui corresponds au critère Site A et Site B

un exemple en attaché
 

Pièces jointes

Bonsoir guellila, djidji59430,

Formule matricielle en C2 à valider par Ctrl+Maj+Entrée :
Code:
=MAX((A$2:A$61=A2)*(B$2:B$61=B2)*C$2:C$61)
A+
Bonjour
j'ai déjà travaillé avec une formule mais mon problème que je travail sur un tableau très volumineux avec plus de 450000 lignes et avec les formules c'est trop long alors je cherche une macro dans l'espoir que ca sera plus rapide

merci
 
Vous avez tout à fait raison, les formules matricielles ne vont pas avec un grand nombre de lignes.

Alors voyez le fichier .xlsm joint et cette macro :
VB:
Sub Maximum()
Dim d As Object, tablo, i&, x$
Set d = CreateObject("Scripting.Dictionary")
d.CompareMode = vbTextCompare 'la casse est ignorée
With Feuil1 'CodeName de la feuille
    If .FilterMode Then .ShowAllData 'si la feuille est filtrée
    With .[A1].CurrentRegion
        '---liste des maxima---
        tablo = .Resize(, 3) 'matrice, plus rapide
        For i = 2 To UBound(tablo)
            x = tablo(i, 1) & Chr(1) & tablo(i, 2)
            If tablo(i, 3) > d(x) Then d(x) = tablo(i, 3)
        Next i
        '---affectation des maxima au tableau resu---
        ReDim Resu(1 To UBound(tablo), 1 To 1)
        Resu(1, 1) = .Cells(1, 4)
        For i = 2 To UBound(tablo)
            Resu(i, 1) = d(tablo(i, 1) & Chr(1) & tablo(i, 2))
        Next
        '---restitution sur la 4ème colonne---
        .Columns(4) = Resu
    End With
End With
End Sub
Elle est très rapide car elle utilise des tableaux VBA et le Dictionary.
 

Pièces jointes

Dernière édition:
Pour tester j'ai recopié le tableau A2: D61 sur 600 000 lignes.

On obtient un fichier de 11,6 Mo.

Chez moi sur Excel 2019 la macro s'exécute en 2,2 secondes.
 
Dernière édition:
Bonjour
merci pour la macro
je n'est pas beaucoup de connaissance en macro , est-ce que c'est possible d'adapter votre macro a la disposition des colonnes dans le fichier en attaché

cdt
 

Pièces jointes

Le fichier en retour avec la macro adaptée :
Code:
Sub Maximum()
Dim d As Object, tablo, i&, x$
Set d = CreateObject("Scripting.Dictionary")
d.CompareMode = vbTextCompare 'la casse est ignorée
With Feuil1 'CodeName de la feuille
    If .FilterMode Then .ShowAllData 'si la feuille est filtrée
    With .[J1].CurrentRegion
        '---liste des maxima---
        tablo = .Resize(, 7) 'matrice, plus rapide
        For i = 2 To UBound(tablo)
            x = tablo(i, 1) & Chr(1) & tablo(i, 3)
            If tablo(i, 7) > d(x) Then d(x) = tablo(i, 7)
        Next i
        '---affectation des maxima au tableau resu---
        ReDim resu(1 To UBound(tablo), 1 To 1)
        resu(1, 1) = .Cells(1, 8)
        For i = 2 To UBound(tablo)
            resu(i, 1) = d(tablo(i, 1) & Chr(1) & tablo(i, 3))
        Next
        '---restitution sur la 4ème colonne---
        .Columns(8) = resu
    End With
End With
End Sub
J'espère que vous allez essayer de comprendre comment fonctionnent les indices des tableaux.
 

Pièces jointes

Dernière édition:
Bonjour guellila, le forum,

Au post #6 j'ai remplacé :
VB:
d(x) = IIf(tablo(i, 3) > d(x), tablo(i, 3), d(x))
par :
VB:
If tablo(i, 3) > d(x) Then d(x) = tablo(i, 3)
Sur 600 000 lignes la durée d'exécution passe de 3,5 secondes à 2,2 secondes.

A+
 
- 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
18
Affichages
206
Réponses
6
Affichages
627
  • Résolu(e)
Microsoft 365 DATEDIF
Réponses
11
Affichages
238
Les cookies sont requis pour utiliser ce site. Vous devez les accepter pour continuer à utiliser le site. En savoir plus…