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