besoin d'aide (URGENT) pour une macro-EXCEL VBA - VB/VBA/VBS - Programmation
Marsh Posté le 08-02-2012 à 11:41:40
bonjour, 
 
1) regarde le post de abder92 
2) enregistreur de macro 
3) regarde le post de abder92 
 
voila ca va t'aider
Marsh Posté le 08-02-2012 à 13:49:58
pas d'autres reponses  je trouve pas la solution.
 je trouve pas la solution. 
pourtant ca a l'air trés simple et basique 
Marsh Posté le 08-02-2012 à 13:57:25
generalement tu proposes un code (avec les indos que je t'ai donné) et puis apres on en parle 
on fait pas le travail pour les autres (je parle pour moi en tt cas)
Marsh Posté le 08-02-2012 à 14:46:56
oui oui vous avez raison . 
en faite j'ai commencé comme ca : 
pour la date puisque j'ai pas de solution j'ai mis la date pour 20 lignes et les bordures et trames pour 20 lignes aussi car je sais d'avance que le tableau que ej vais avoir aprés convertir les données de bases ne depasseront pas 20 lignes, mais bon j'ai voulu que j'ai un moyen pour que VBA ne le fait que pour les cellules nons vides  
 
Sub Recap() 
 
'declaration variables 
Dim Counterparty As String 
Dim Cel1 As Range 
 
 
'convertir les données en un tableau excel 
Range("A1:A43" ).TextToColumns Destination:=Range("A1" ), DataType:=xlDelimited, TextQualifier:=xlDoubleQuote, Semicolon:=True 
 
 
Range("B1" ).Value = "ISIN" 
 
Range("E1" ).Value = "Price" 
 
Range("F1" ).Value = "Trade date" 
 
Range("G1" ).Value = "Value date" 
 
Range("F2:F20" ).Value = Date 
 
 
Set Cel1 = Range("A1:G1" ) 
 
With Cel1.Font 
    .Bold = True 
    .Italic = True 
End With 
 
 'couleur de fond 
Range("A1:G1" ).Interior.Color = RGB(255, 255, 153) 
 
Range("B1:G1" ).HorizontalAlignment = xlCenter 
 
 
'ajuster automatiquement la largeur des cellules 
Workbooks("recap.csv" ).Worksheets("recap" ).Columns("A:G" ).EntireColumn.AutoFit 
 
 
 
 
Range("A1:G20" ).Select 
 
    Selection.Borders(xlDiagonalDown).LineStyle = xlNone 
 
    Selection.Borders(xlDiagonalUp).LineStyle = xlNone 
 
    With Selection.Borders(xlEdgeLeft) 
 
        .LineStyle = xlContinuous 
 
        .ColorIndex = xlAutomatic 
 
    End With 
 
    With Selection.Borders(xlEdgeTop) 
 
        .LineStyle = xlContinuous 
 
        .Weight = xlMedium 
 
        .ColorIndex = xlAutomatic 
 
    End With 
 
    With Selection.Borders(xlEdgeBottom) 
 
        .LineStyle = xlContinuous 
 
        .ColorIndex = xlAutomatic 
 
    End With 
 
    With Selection.Borders(xlEdgeRight) 
 
        .LineStyle = xlContinuous 
 
        .ColorIndex = xlAutomatic 
 
    End With 
 
    With Selection.Borders(xlInsideVertical) 
 
        .LineStyle = xlContinuous 
 
        .Weight = xlMedium 
 
        .ColorIndex = xlAutomatic 
 
    End With 
 
    With Selection.Borders(xlInsideHorizontal) 
 
        .LineStyle = xlContinuous 
 
        .ColorIndex = xlAutomatic 
 
    End With 
 
   
 
 
 
 
 
 
 
 
 
End Sub 
 
Marsh Posté le 08-02-2012 à 15:16:15
ah j'ai oublié quelque chose : 
voila le code : 
Sub Recap() 
 
'declaration variables 
Dim Counterparty As String 
Dim Cel1 As Range 
 
 
'convertir les données en un tableau excel 
Range("A1:A43" ).TextToColumns Destination:=Range("A1" ), DataType:=xlDelimited, TextQualifier:=xlDoubleQuote,Semicolon:=True$$ 
 
'supprimer les colonnes I--P 
Columns("I:P" ).Delete Shift:=xlToLeft 
 
     
'effacer le contenu de la colonne G 
Range("G1:G6" ).Clear 
 
'inserer colonne 
Columns(6).EntireColumn.Insert 
 
Range("B1" ).Value = "ISIN" 
 
Range("E1" ).Value = "Price" 
 
Range("F1" ).Value = "Trade date" 
 
Range("G1" ).Value = "Value date" 
 
Range("F2:F20" ).Value = Date 
 
 
Set Cel1 = Range("A1:G1" ) 
 
With Cel1.Font 
    .Bold = True 
    .Italic = True 
End With 
 
 'couleur de fond 
Range("A1:G1" ).Interior.Color = RGB(255, 255, 153) 
 
Range("B1:G1" ).HorizontalAlignment = xlCenter 
 
 
'ajuster automatiquement la largeur des cellules 
Workbooks("recap.csv" ).Worksheets("recap" ).Columns("A:G" ).EntireColumn.AutoFit 
 
 
 
 
Range("A1:G20" ).Select 
 
    Selection.Borders(xlDiagonalDown).LineStyle = xlNone 
 
    Selection.Borders(xlDiagonalUp).LineStyle = xlNone 
 
    With Selection.Borders(xlEdgeLeft) 
 
        .LineStyle = xlContinuous 
 
        .ColorIndex = xlAutomatic 
 
    End With 
 
    With Selection.Borders(xlEdgeTop) 
 
        .LineStyle = xlContinuous 
 
        .Weight = xlMedium 
 
        .ColorIndex = xlAutomatic 
 
    End With 
 
    With Selection.Borders(xlEdgeBottom) 
 
        .LineStyle = xlContinuous 
 
        .ColorIndex = xlAutomatic 
 
    End With 
 
    With Selection.Borders(xlEdgeRight) 
 
        .LineStyle = xlContinuous 
 
        .ColorIndex = xlAutomatic 
 
    End With 
 
    With Selection.Borders(xlInsideVertical) 
 
        .LineStyle = xlContinuous 
 
        .Weight = xlMedium 
 
        .ColorIndex = xlAutomatic 
 
    End With 
 
    With Selection.Borders(xlInsideHorizontal) 
 
        .LineStyle = xlContinuous 
 
        .ColorIndex = xlAutomatic 
 
    End With 
 
   
 
 
 
 
 
 
 
 
 
End Sub 
 
 
 
Marsh Posté le 08-02-2012 à 16:11:17
donc tout est bon ici sauf que l'ennui que c'est nul de vouloir mettre 20 date dans la colonne F ainsi que des bordures et trames pour 20 lignes . 
 
svp aidez moi, je vous en serai trés reconnaissant. 
 
ca me permettra d'apprendre et c'est ca le but aussi  
 
MERCI
Marsh Posté le 09-02-2012 à 11:44:43
la tristesse du stage en finance sans maitrise de VBA 
ca va bien les gov en ce moment?
Marsh Posté le 09-02-2012 à 11:59:02
pour la date, tu fais un  
i=0 
while cells(i,1)<>"" 
cells(i,6)=date 
wend 
 
en gros tu fais en fonction de la colone de ton ISIN, parce que pas d'ISIN pas de date. si ta ligne n'a pas de date, ton code s'arrete, 
l'inconvenient, c'est qu'il faut pas que tu aies une ligne vide (sans parler de l'infinit loop si tu rates ton code)
Marsh Posté le 09-02-2012 à 12:13:46
merci bcp, je vais essayer ca !!  
en plus mon job c'est de faire des deals aussi sur le marché , qui necessite en aucun cas l'utilisation de VBA, ce que je veux faire c'est un plus. 
Marsh Posté le 09-02-2012 à 12:16:18
en gros je fais pas de developpement ! mais c'est une chose qui est trés interessante et j'esaie de faire des trucs lorsque j'ai le temps pour ca. un broker n'a pas besoin de connaissance en VBA ce que je fais maintenant
Marsh Posté le 09-02-2012 à 12:24:14
le code ne marche pas et lorsque je fais debug, il marque le fond jaune sur While Cells (i,1) <> "" 
 
c'est a dire que le probleme vient de cette ligne. 
 
t'as une idée?
Marsh Posté le 09-02-2012 à 12:52:42
t'as defini  
dim i as integer? 
change i=1 
je ne sais plus si cells part de (0,0) ou de (1,1) 
idealement tu dois nomer tes cellules et utiliser des offset.
Marsh Posté le 09-02-2012 à 13:08:35
j'ai fait ca , mais toujours probleme : Run-time error '1004' 
application-defined or object-defined error 
 
Sub Recap() 
 
'declaration variables 
Dim counterparty As String 
Dim Cel1 As Range 
Dim i As Integer 
 
 
 
 
 
'convertir les données en un tableau excel 
Range("A1:A43" ).TextToColumns Destination:=Range("A1" ), DataType:=xlDelimited, TextQualifier:=xlDoubleQuote, Semicolon:=True 
 
 
 
Range("B1" ).Value = "ISIN" 
 
Range("E1" ).Value = "Price" 
 
Range("F1" ).Value = "Trade date" 
 
Range("G1" ).Value = "Value date" 
 
 
 
Set Cel1 = Range("A1:G1" ) 
 
With Cel1.Font 
    .Bold = True 
    .Italic = True 
End With 
 
 
'ajuster automatiquement la largeur des cellules 
Workbooks("test.csv" ).Worksheets("test" ).Columns("A:G" ).EntireColumn.AutoFit 
 
 
 
 'couleur de fond 
Range("A1:G1" ).Interior.Color = RGB(255, 255, 153) 
 
Range("B1:G1" ).HorizontalAlignment = xlCenter 
 
 
'bordures et trames 
Range("A1:G20" ).Select 
 
    Selection.Borders(xlDiagonalDown).LineStyle = xlNone 
 
    Selection.Borders(xlDiagonalUp).LineStyle = xlNone 
     
 
    With Selection.Borders(xlEdgeLeft) 
 
        .LineStyle = xlContinuous 
 
        .ColorIndex = xlAutomatic 
 
    End With 
 
    With Selection.Borders(xlEdgeTop) 
 
        .LineStyle = xlContinuous 
 
        .ColorIndex = xlAutomatic 
 
    End With 
 
    With Selection.Borders(xlEdgeBottom) 
 
        .LineStyle = xlContinuous 
 
        .ColorIndex = xlAutomatic 
 
    End With 
 
    With Selection.Borders(xlEdgeRight) 
 
        .LineStyle = xlContinuous 
 
        .ColorIndex = xlAutomatic 
 
    End With 
 
    With Selection.Borders(xlInsideVertical) 
 
        .LineStyle = xlContinuous 
 
        .ColorIndex = xlAutomatic 
 
    End With 
 
    With Selection.Borders(xlInsideHorizontal) 
 
        .LineStyle = xlContinuous 
 
        .ColorIndex = xlAutomatic 
 
    End With 
 
 
i = 1 
 
While Cells(i, 1) <> "" 
 
Cells(i, 6) = Date 
Wend 
 
 
End Sub
Marsh Posté le 09-02-2012 à 13:25:45
i=10  '(numero de la ligne de ton debut de tableau) 
While Cells(i, 2).Value <> ""    '2 pour le numero de ta colone ISIN 
Cells(i, 4).Value = "x"             '4 pour le numero de ta colone date 
i = i + 1 
Wend
Marsh Posté le 09-02-2012 à 15:30:45
merci  bcp hiukho. 
j'ai trouvé une autre facon  
 
For Line = 2 To lastRow 
        .Range("F" & Line).Value = Date 
    Next
Marsh Posté le 09-02-2012 à 16:04:40
en faite la j'ai reussit a tout faire, j'ai créer un bouton qui importe tous les données du logiciel sur excel , aprés, il fait la mise en forme , aprés il scinde le tableau en deux selon la contrepartie et il met chaque tableau dans une page a part sur excel. 
la derniére etape qui me manque et que j'ai pas reussit a faire car je suis fatigué la  c'est d'envoyer le contenu de chaque page a une adresse mail via outlook express.
 c'est d'envoyer le contenu de chaque page a une adresse mail via outlook express. 
sachant le truc c'est que sans vba , normalement je copie coller chaque tableau dans  la page d'envoi depuis excel a outlook . 
c'est a dire que je ne veux pas envoyer sous forme de piece jointe. 
 
Est ce que vous avez une idée SVP?
Marsh Posté le 13-02-2012 à 16:54:26
héééyyyyy cool les mecs. j'ai trouvé la solution. 
tout marche nickel  
 
Marsh Posté le 08-02-2012 à 11:20:17
A...........................B................................C...............D..............E................F............. G..........
Numeros..........................code.....................Role.........Quantity.......Price...........Date......Counterparty
TB 0.00 10/12...............BE0312684534..............Seller............30............110.............................A........
TB 0.00 05/12...............BE0312679484..............Seller............20............120.............................A.......
TR 3.25 04/16...............FR0010288357..............Buyer............49............105.............................B.......
TR 3.75 04/21...............FR0010192997..............Seller............25.............80..............................B.......
TR 3.25 10/21...............FR0011059088..............Buyer............10.............99..............................B.......
Bonjour tout le monde, je suis novice en VBA et la j'ai vraiment vraiment besoin de votre aide .
c'est en faite une macro que je dois realiser pour la boite pour qui je bosse.
en faite la macro qui sert a presenter le tableau , je l'ai faite .
ce que j'ai pas reussit a faire et dois se derouler comme suit sur vba
1) inserer la date automatiquement dans la colonne F de maniere que l'insertion s'arrete toujours dans la derniere cellule non vide , c'est a dire demander a VBA de identifier la derniere ligne non vide pour que l'insertion de la date se poursuit jusqu'a la derniére ligne non vide
2) mettre les bordures et trames pour en faire un tableau . la meme chose , demander a VBA de faire ces bordures et trames que pour les cellules non vides .
3) une fois on a la date inseré ainsi que les bordures et trames, demander a VBA de separer le tableau crée en 2 selon la contre partie (colonne G).
c'est a dire demander a VBA de regarder cette colonne et une fois il tombe sur un chiffre different de A , il separe le tableau en 2 de facon qu'on a au final un tableau avec contrepartie A et un autre tableau avec la contre partie B
Merci beaucoup .
j'en ai vraiment besoin pour reussir mon boulot .
Aidez moi SVP
Message édité par akira3100 le 08-02-2012 à 11:47:35