reperage des plus grandes valeurs VBA?

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

garrec

XLDnaute Occasionnel
Bonjour

J'ai un tableau ci dessous, dans la colonne G, il y a le nom de portefeuilles d'actions et apres (a partir de la colonne BF) il y a pour chacun des portefeuilles leurs 5 premiere lignes actions avec un poid.

J'aimerais savoir s'il y a un outil excel pour faire une détection des 4 premieres valeurs (si on additionne leur poid)?


J'ai fais un exemple à la main dans le fichier ci joint ça sera plus simple à comprendre qu'une explication alambiquée 🙂

Ou alors il faut un code VBA?

Merci bcp

Garrec
 

Pièces jointes

Dernière édition:
Re : reperage des plus grandes valeurs VBA?

Bonjour le Forum, bonjour Garrec,

53 visites, 8 ouvertures de fichiers et zéro réponse ???
Il doit y avoir un problème d'explications ??

Perso, je ne comprends rien !!

A te relire avec plus d'explications !!

Cordialement

René
 
Re : reperage des plus grandes valeurs VBA?

Bonjour à tous,

Pas clair en effet.

Après avoir mis les bons intitulés en BR3 et suivantes. En BS3 et suivantes :
Code:
=SOMMEPROD(($BF$2:$BF$33=BR3)*$BG$2:$BG$33
+($BH$2:$BH$33=BR3)*$BI$2:$BI$33
+($BJ$2:$BJ$33=BR3)*$BK$2:$BK$33
+($BL$2:$BL$33=BR3)*$BM$2:$BM$33
+($BN$2:$BN$33=BR3)*$BO$2:$BO$33)

A + à tous
 
Re : reperage des plus grandes valeurs VBA?

Bonjour à tous,

Avec l'objet Scripting.Dictionary.
A tester sous Excel 2003.
Attention aux espaces superflus en bout de chaîne, dans ton fichier initial en BF30 feuil2, cela fausse le résultat, il y en a d'autres, je pense.
La feuille active doit être Feuil2, voir le résultat s'afficher en Feuil3 colonne E et F.
A peaufiner bien sûr 🙂

VB:
Sub Test()
Dim EnTete(), k As Byte, Col As Byte
Dim Lig As Long, i As Long, C As Range
Application.ScreenUpdating = False
EnTete = Array("LIGNE 1", "LIGNE 2", "LIGNE 3", "LIGNE 4", "LIGNE 5")
For k = LBound(EnTete) To UBound(EnTete)
  Col = Rows("1:1").Find(What:=EnTete(k), LookAt:=xlWhole).Column
  Lig = Cells(Rows.Count, Col).End(xlUp).Row
Range(Cells(2, Col), Cells(Lig, Col + 1)).Copy Sheets("Feuil3").[A65536].End(xlUp).Offset(1, 0)
Next k
With Sheets("Feuil3")
  For i = .Cells(.Rows.Count, 1).End(xlUp).Row To 2 Step -1
    If .Cells(i, 1) = "" Then .Rows(i).Delete
  Next i
  Set mondico1 = CreateObject("Scripting.Dictionary")
  For Each C In .Range("A2:A" & .Range("A65536").End(xlUp).Row)
    mondico1(C.Value) = mondico1(C.Value) + C.Offset(, 1).Value
  Next C
  .Range("E2").Resize(mondico1.Count, 1) = Application.Transpose(mondico1.keys)
  .Range("F2").Resize(mondico1.Count, 1) = Application.Transpose(mondico1.items)
  .Range("E2:F" & .Range("F65536").End(xlUp).Row).Sort Key1:=.Range("F2"), Order1:=xlDescending, Header:=xlNo
End With
Application.ScreenUpdating = True
End Sub

garrec, j'attends un retour sur investissement 😀

Klin89
 

Pièces jointes

Dernière édition:
Re : reperage des plus grandes valeurs VBA?

Re Bonjour

D'abord merci a tous et en particulier a piga25 JCGL et klin89

J'avoue que j'ai pas été tres clair dans ce que je voulais avoir au début

Mais Klin89 a fait un truc parfait! Merci encore. Bon bien sur tu as raison il faut que je le peaufine de sorte que la macro d'adapte au fichier initial. D'ailleur j'avais une question si je deplace le tableau vers le bas ou vers la droite, la macro ne fonctionne plus?
ça me met cette ligne en jaune kan je fais F8 ou quand j'execute la macro


Code:
 Col = Rows("1:1").Find(What:=EnTete(k), LookAt:=xlWhole).Column

Avec l'ENtete et les fonction Ubound et Lbound je pensais que la macro reperait le tableau n'importe ou dans la feuille excel!! Je ne vois pas ou c'est indiqué que le tableau commence en G1?

Tu vois ça pose un pb pke en fait le tableau est comme sur le fichier ci joint? Et il y a d'autre truc en dessous?

Merci encore

Ewen
 

Pièces jointes

Re : reperage des plus grandes valeurs VBA?

Re garrec,

VB:
Sub Test()
Dim EnTete(), k As Byte, Col As Byte
Dim Lig As Long, i As Long, C As Range
Application.ScreenUpdating = False
EnTete = Array("LIGNE 1", "LIGNE 2", "LIGNE 3", "LIGNE 4", "LIGNE 5")
PremLig = Cells.Find("*", , , , xlByRows, xlNext).Row
'PremLig = ActiveSheet.UsedRange.Row
For k = LBound(EnTete) To UBound(EnTete)
  Col = Rows(PremLig).Find(What:=EnTete(k), LookAt:=xlWhole).Column
  'Lig = Cells(Rows.Count, Col).End(xlUp).Row
 Lig = 42
Range(Cells(PremLig + 1, Col), Cells(Lig, Col + 1)).Copy Sheets("Feuil3").[A65536].End(xlUp).Offset(1, 0)
Next k
With Sheets("Feuil3")
  For i = .Cells(.Rows.Count, 1).End(xlUp).Row To 2 Step -1
    If .Cells(i, 1) = "" Then .Rows(i).Delete
  Next i
  Set mondico = CreateObject("Scripting.Dictionary")
  Set mondico1 = CreateObject("Scripting.Dictionary")
  For Each C In .Range("A2:A" & .Range("A65536").End(xlUp).Row)
    'supprime l'espace à droite
     C.Value = RTrim(C.Value)
    mondico(C.Value) = mondico(C.Value) + 1
    mondico1(C.Value) = mondico1(C.Value) + C.Offset(, 1).Value
  Next C
  .Range("E1").Resize(1, 3) = Array("Titres", "Volumes", "Poids")
  .Range("E2").Resize(mondico.Count, 1) = Application.Transpose(mondico.keys)
  .Range("F2").Resize(mondico.Count, 1) = Application.Transpose(mondico.items)
  .Range("G2").Resize(mondico1.Count, 1) = Application.Transpose(mondico1.items)
  .Range("E2:G" & .Range("G65536").End(xlUp).Row).Sort Key1:=.Range("G2"), Order1:=xlDescending, Header:=xlNo
End With
Application.ScreenUpdating = True
End Sub
C'est quoi cette deuxième partie de tableau qui vient mettre le bazar ?
J'ai donc défini Lig = 42

Je le répète, attention aux espaces superflus en bout de chaîne, il y a 2 lignes SAF FP
SAF FP et SAF FP_

Klin89
 
Dernière édition:
Re : reperage des plus grandes valeurs VBA?

Hey bonjour Klin89 et tout le monde!

Oui cette deuxieme ligne vient mettre le bazarre mais c'est parce que dans mon fichier original elle est là 😉
J'envoie mon fichier original sous le nom: Détection titre. les #NOM sont dedans car il prend en compte des formule bloomberg normalement. Mais qu'importe dans se fichier la macro que tu m'a donné ne fonctionne pas 🙁

Pourtant dans le fichier test: modele detection titre ta macro marche du tonnerre??? et j'ai remi le tableau exactement au même endroit!

J pense que ça doit venir de la définition de PremLig et de EnTete???

Bonne journée a tous

Merci
 

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

Discussions similaires

Réponses
10
Affichages
1 K
Retour