Bonjour à tous,
Lors d’un import d’un fichier sur excel, je dispose de beaucoup de colonnes dont l’information ne m’est pas nécessaire. D’autres colonnes sont indispensables et d’autres sont facultatives selon l’analyse que l’on souhaite faire de ce fichier.
Je souhaite faire une macro que je diffuserais à mes collègues et qui permettrait à tous de trier efficacement et rapidement les données.
Partant de l’hypothèse que celui qui veut analyser un fichier connaît le type d’information nécessaire à l’avance, je voudrais que la macro, une fois lancée, demande à travers un userform (cases à cocher) quelles sont les informations (facultatives) que l’utilisateur veut récupérer. Les libellés des infos indispensables seront affichés à titre d’information.
En fonction des cases sélectionnées, les colonnes y relatives seront conservées dans le fichier et toutes les autres colonnes seront supprimées (sauf évidemment les colonnes indispensables…).
Pour un type concret d’information, j’ai déjà fait ceci mais le code pourrait à mon avis être facilement allégé…
En gras les commentaires ajoutés pour votre compréhension
Je pense que ce code est beaucoup trop long pour le peu d’informations à traiter mais je n’ai appris VBA qu’en manipulant excel…
Je sais aussi utiliser les input box et msg box.
Ce que je ne sais pas faire :
- Création d’un userform
- Lier des cases à cocher d’un userform avec des colonnes
- Et bcp d’autres choses…
Ma réflexion sur ce sujet est la suivante :
Lors du lancement de la macro, lancer un userform en demandant quelles sont les informations à récupérer.
Le userform indique quelles seront les données gardées d’office et laisse le choix par des cases à cocher pour les autres données. En fonction de la sélection, récupérer les n° ou noms des colonnes a garder (ces n° ou noms peuvent être définis au départ puisque le fichier importé sera toujours le même). Sélectionner les colonnes choisies + les colonnes indispensables, inverser la sélection et supprimer.
Pourriez-vous me dire si ma réflexion est juste et surtout si possible, pourriez vous m’aider à mettre au point cette application ?
Je vous remercie d’avoir lu jusque ici et vous remercie par avance de l’aide que vous m’apporterez !!
Cordialement
Thierry
Lors d’un import d’un fichier sur excel, je dispose de beaucoup de colonnes dont l’information ne m’est pas nécessaire. D’autres colonnes sont indispensables et d’autres sont facultatives selon l’analyse que l’on souhaite faire de ce fichier.
Je souhaite faire une macro que je diffuserais à mes collègues et qui permettrait à tous de trier efficacement et rapidement les données.
Partant de l’hypothèse que celui qui veut analyser un fichier connaît le type d’information nécessaire à l’avance, je voudrais que la macro, une fois lancée, demande à travers un userform (cases à cocher) quelles sont les informations (facultatives) que l’utilisateur veut récupérer. Les libellés des infos indispensables seront affichés à titre d’information.
En fonction des cases sélectionnées, les colonnes y relatives seront conservées dans le fichier et toutes les autres colonnes seront supprimées (sauf évidemment les colonnes indispensables…).
Pour un type concret d’information, j’ai déjà fait ceci mais le code pourrait à mon avis être facilement allégé…
En gras les commentaires ajoutés pour votre compréhension
Code:
Columns("AJ:AJ").Select
Selection.Delete Shift:=xlToLeft
Columns("AF:AH").Select
Range("AH1").Activate
Selection.Delete Shift:=xlToLeft
Columns("AD:AD").Select
Selection.Delete Shift:=xlToLeft
Columns("W:AB").Select
Range("AB1").Activate
Selection.Delete Shift:=xlToLeft
Columns("N:T").Select
Range("T1").Activate
Selection.Delete Shift:=xlToLeft
Columns("L:L").Select
Selection.Delete Shift:=xlToLeft
Columns("I:J").Select
Range("J1").Activate
Selection.Delete Shift:=xlToLeft
Columns("E:F").Select
Range("F1").Activate
Selection.Delete Shift:=xlToLeft
Columns("A:C").Select
Range("C1").Activate
Selection.Delete Shift:=xlToLeft
[B]Je supprime les colonnes de droite à gauche pour éviter qu’elles ne changent de références…[/B]
Columns("B:B").Select
Selection.Insert Shift:=xlToRight
Columns("F:F").Select
Selection.Insert Shift:=xlToRight
Columns("H:H").Select
Selection.Insert Shift:=xlToRight
[B]J’insère des colonnes qui vont me permettre de transcodifier des informations[/B] Range("B2").Select
ActiveCell.FormulaR1C1 = _
"=VLOOKUP(RC[-1],'CheminDuFichier[ref_tables.xls]Instruments'!C1:C3,3,FALSE)"
Range("B2").Select
Selection.AutoFill Destination:=Range("B2:B200")
Range("B2:B200").Select
Range("F2").Select
ActiveCell.FormulaR1C1 = _
"=VLOOKUP(RC[-1],' CheminDuFichier[ref_tables.xls]quotation'!C1:C3,3,FALSE)"
Range("F2").Select
Selection.AutoFill Destination:=Range("F2:F200")
Range("F2:F200").Select
Range("H2").Select
ActiveCell.FormulaR1C1 = _
"=VLOOKUP(RC[-1],' CheminDuFichier [ref_tables.xls]guarantee'!C1:C3,3,FALSE)"
Range("H2").Select
Selection.AutoFill Destination:=Range("H2:H200")
Range("H2:H200").Select
[B]Je vais récupérer les informations dans un fichier fermé[/B]
Cells.Select
Range("C2").Activate
With Selection.Font
.Name = "Arial"
.Size = 8
End With
Cells.EntireColumn.AutoFit
Range("B1").Select
ActiveWorkbook.breaklink Name:= _
" CheminDuFichier \ref_tables.xls" _
, Type:=xlExcelLinks
[B]Je romps le lien[/B]
Columns("A:A").Select
Selection.Delete Shift:=xlToLeft
Columns("D:D").Select
Selection.Delete Shift:=xlToLeft
Columns("E:E").Select
Selection.Delete Shift:=xlToLeft
Range("A1").Select
ActiveCell.FormulaR1C1 = "Instrument type"
Range("B1").Select
ActiveCell.FormulaR1C1 = "ISIN"
Range("C1").Select
ActiveCell.FormulaR1C1 = "NAME"
Range("D1").Select
ActiveCell.FormulaR1C1 = "Quotation place"
Range("E1").Select
ActiveCell.FormulaR1C1 = "Guarantee type"
Range("F1").Select
ActiveCell.FormulaR1C1 = "Quantity"
Range("G1").Select
ActiveCell.FormulaR1C1 = "Price"
Range("H1").Select
ActiveCell.FormulaR1C1 = "EVAL"
Range("I1").Select
ActiveCell.FormulaR1C1 = "% TNA"
Range("J1").Select
ActiveCell.FormulaR1C1 = "Event"
[B]Je remplace les titres de colonnes par des titres plus explicites[/B]
ActiveWindow.Zoom = 95
Columns("F:H").Select
Selection.NumberFormat = "#,##0.00"
Range("I7").Select
Selection.AutoFilter
Selection.AutoFilter Field:=10, Criteria1:="1"
Range("A1").Select
Application.ScreenUpdating = False
With ActiveSheet.PageSetup
.PrintTitleRows = ""
.PrintTitleColumns = ""
End With
ActiveSheet.PageSetup.PrintArea = ""
With ActiveSheet.PageSetup
.LeftHeader = ""
.CenterHeader = ""
.RightHeader = "&8&D"
.LeftFooter = "&8&Z&F"
.CenterFooter = ""
.RightFooter = ""
.LeftMargin = Application.InchesToPoints(0.35)
.RightMargin = Application.InchesToPoints(0.35)
.TopMargin = Application.InchesToPoints(0.51)
.BottomMargin = Application.InchesToPoints(0.51)
.HeaderMargin = Application.InchesToPoints(0.21)
.FooterMargin = Application.InchesToPoints(0.21)
.PrintHeadings = False
.PrintGridlines = False
.PrintComments = xlPrintNoComments
.PrintQuality = 600
.CenterHorizontally = True
.CenterVertically = False
.Orientation = xlLandscape
.Draft = False
.PaperSize = xlPaperA4
.FirstPageNumber = xlAutomatic
.Order = xlDownThenOver
.BlackAndWhite = False
.Zoom = False
.FitToPagesWide = 1
.FitToPagesTall = 2
.PrintErrors = xlPrintErrorsDisplayed
End With
Application.ScreenUpdating = True
End Sub
Je sais aussi utiliser les input box et msg box.
Ce que je ne sais pas faire :
- Création d’un userform
- Lier des cases à cocher d’un userform avec des colonnes
- Et bcp d’autres choses…
Ma réflexion sur ce sujet est la suivante :
Lors du lancement de la macro, lancer un userform en demandant quelles sont les informations à récupérer.
Le userform indique quelles seront les données gardées d’office et laisse le choix par des cases à cocher pour les autres données. En fonction de la sélection, récupérer les n° ou noms des colonnes a garder (ces n° ou noms peuvent être définis au départ puisque le fichier importé sera toujours le même). Sélectionner les colonnes choisies + les colonnes indispensables, inverser la sélection et supprimer.
Pourriez-vous me dire si ma réflexion est juste et surtout si possible, pourriez vous m’aider à mettre au point cette application ?
Je vous remercie d’avoir lu jusque ici et vous remercie par avance de l’aide que vous m’apporterez !!
Cordialement
Thierry