J’aurais besoin d’un coup de main pour une macro VBA:
J’ai une liste avec une 20ene de critères en colonne dont : quantité ; prix ; strike
Et Cette liste est composée de paires que je veux associer et séparées d’une ligne vierges : je m’explique :
Je veux que cette liste qui est en vrac soit retrié afin de mettre dans un nouvel onglet les paires ensemble (l’une en dessous de l’autre) et séparé des autres paires par une ligne vierge.
Et les lignes uniques n’ayant pas de paire allant dans un autre onglet et sont séparé les unes des autres par une ligne vierge.
Pour l’instant j’ai crée une macro qui à partir d’une liste en vrac, filtre certains critères et le copie trié en fonction de la quantitée, du prix et du strike dans un nouvel onglet.
Bref ! Mon problème est d’avoir le code d’une boucle qui va :
1- prendre la 1ere ligne du tableau et voir si via 3 critères disons (quantitée, prix, strike), il existe au moins 2 de ces critères dans une autre ligne de la liste ( voir étendre ça à plus de critères pour ne pas avoir d’erreur de paire qui ne sont pas ensemble alors qu’elle devrait l’être).
2-les/la copier dans un autre onglet et les/le espacer d’une ligne vierge avec la prochaine paires.
-Puis passer à la seconde ligne.
NB : Il est possible d’avoir des trio
Le but est donc de retrouver des lignes qui sont sensées aller par paire mais qui peuvent avoir un critère différent et de les separé par une ligne vierge.
J’aimerais que qqun me montre son code s’il a une macro de ce genre ou des parties qui pourraient m’aider. Parce que je ne vois pas comment commencer le code…
En vous remerciant bien d’avance…
PS : Si vous avez rien compris, merci de me le dire, que je réexplique !
Etape 1 : Recherche des doublons pour faire une macro secondaire. Code plus court, plus clair.
La mise en page de ton tableau onglet 2 et 3 est identique! Tu as écris le code 2 fois.
Etape 2 : module 2, j'ai recopié ta partie qui faisait doublon
Etape 3 : j'ai neutralisé toutes les lignes inutiles (je te laisse le soin de les effacer, ainsi que mes commentaires)
Etape 4 : mise à jours de la macro principale situé module 1
Cf. ci-joint
Il se fait tard, je te laisse étudier cela.
Une piste pour tes boucles :
-> For each
-> For to next
me semble les plus faciles à mettre en place et approprié à ton cas.
Sub MiseEnFormeTableau()
[COLOR="Red"] ActiveWindow.SplitRow = 1
ActiveWindow.FreezePanes = True[/COLOR]
Range("A1:BA500").Select
With Selection.Borders(xlEdgeLeft)
.LineStyle = xlContinuous
End With
With Selection.Borders(xlEdgeTop)
.LineStyle = xlContinuous
End With
With Selection.Borders(xlEdgeBottom)
.LineStyle = xlContinuous
End With
With Selection.Borders(xlEdgeRight)
.LineStyle = xlContinuous
End With
With Selection.Borders(xlInsideVertical)
.LineStyle = xlContinuous
End With
With Selection.Borders(xlInsideHorizontal)
.LineStyle = xlContinuous
End With
Rows("1:1").Select
With Selection.Interior
.ColorIndex = 36
.Pattern = xlSolid
End With
With Selection
.HorizontalAlignment = xlLeft
.VerticalAlignment = xlBottom
End With
Selection.Font.ColorIndex = 0
Selection.Font.Bold = True
Selection.Font.Italic = True
Selection.Font.Underline = xlUnderlineStyleSingle
Cells.Select
Cells.EntireColumn.AutoFit
End Sub
J'ai juste rajouté les 2 lignes en rouge, permet de figer les deux premières lignes de tes tableaux feuille 2 et 3, plus pratique étant donné la longueur de ton tableau.
With Sheets("[COLOR="Blue"]nom de ta feuille[/COLOR]")
With .Range("A1").CurrentRegion
.Sort Key1:=.Range("U2"), Order1:=xlAscending, Key2:=.Range("W2"), Order2:=xlAscending, Header:=xlYes
End With
End With
[COLOR="Red"]MiseEnFormeTableau[/COLOR]