reperage des plus grandes valeurs VBA?

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

  • principal valeur.xlsx
    21.1 KB · Affichages: 72
Dernière édition:

néné06

XLDnaute Accro
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é
 

piga25

XLDnaute Barbatruc
Re : reperage des plus grandes valeurs VBA?

Bonjour,

Salut hoerwind, néné06

Peut être un début de piste comme ceci.
Par contre lorsqu'il y a un doublon je bloque (ici pour le second et le quatrième)
 

Pièces jointes

  • principal valeur piga25.xlsx
    25.6 KB · Affichages: 57

JCGL

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

klin89

XLDnaute Accro
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 :D

Klin89
 

Pièces jointes

  • Copie de Xl0000060.xls
    71.5 KB · Affichages: 82
  • Copie de Xl0000060.xls
    71.5 KB · Affichages: 90
  • Copie de Xl0000060.xls
    71.5 KB · Affichages: 116
Dernière édition:

garrec

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

  • modele detection titre.xls
    73 KB · Affichages: 77
  • modele detection titre.xls
    73 KB · Affichages: 77
  • modele detection titre.xls
    73 KB · Affichages: 123

klin89

XLDnaute Accro
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:

garrec

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

  • detection titre.xlsm
    214.4 KB · Affichages: 112
  • modele detection titre.xls
    68.5 KB · Affichages: 50
  • modele detection titre.xls
    68.5 KB · Affichages: 54
  • modele detection titre.xls
    68.5 KB · Affichages: 55

Discussions similaires

Statistiques des forums

Discussions
312 211
Messages
2 086 296
Membres
103 171
dernier inscrit
clemm