Lancer une macro sur des fichiers ne prenant pas en charge les macros
Bonjour a tous.
C'est peut être une question bête mais le ridicule ne tue pas alors je me lance.
Je suis novice sur excel et VBA j'ai crée une macro (a partir de l'enregistreur VBA contenu dans excel) qui me permet de trier un fichier Excel (suppression de colonnes , ajout , modification de l'en tête des colonnes etc...).
Cette macro fonctionne sur mon fichier test.
Le problème c'est que je dois appliquer cette macro sur un fichier de données que je reçois quotidiennement.
Lorsque j'enregistre mon fichier test il me demande de l'enregistrer sous .xlsm ce qui est logique.
Par contre tous les fichiers que je reçois sont au format .xls et donc je ne peux lancer ma macro dessus.
En gros pour simplifier je souhaites pouvoir lancer ma macro automatiquement lorsque je reçois un fichier sans avoir a le modifier.
J'ai regarder un peu sur le forum et j'ai lu quelque part que c’était possible avec un fichier type "batch" .
J'espère avoir été clair si besoin n’hésitez pas a me poser des questions.
Merci d'avance
Bonjour,
Je pense qu'il y a plus simple comme procédé qu'un batch !
Tu ouvres tes deux classeurs (celui qui contient la macro et le classeur cible) puis tu lances la procédure ci-dessous, une fois la boite de dialogue affichée, tu réduis ton classeur pour avoir accès au classeur cible, tu sélectionnes ton classeur cible et dans ce classeur tu sélectionnes n'importe quelle cellule, tu auras un résultat qui va ressembler à ça :
'[Classeur Test.xlsx]Feuil1'!$C$10
il suffit alors de récupérer le parent de la cellule (la feuille) et de là, le parent de la feuille qui est le classeur, à ce stade, tu affectes le classeur à une variable "Workbook" (dans mon code la variable "Classeur") et il suffit à partir de là de parenter feuilles et Range à cette variable pour faire tes modifs sur le classeur visé.
Par exemple, si dans ton code tu as :
Worksheets(Feuil1").Range("D10").Value = 25
et bien tu parentes tes objets dans ton code de cette façon :
Classeur.Worksheets(Feuil1").Range("D10").Value = 25
Sub Test()
Dim Classeur As Workbook
Dim Cel As Range
On Error GoTo Fin
Set Cel = Application.InputBox("Sélectionner une cellule dans le classeur cible !", , , , , , , 8)
'affectation du classeur à la variable
Set Classeur = Workbooks(Cel.Parent.Parent.Name)
'ici, tu attache ton code à la variable Classeur...
MsgBox Classeur.Name & vbCrLf & Classeur.FullName & vbCrLf & Classeur.Path
Exit Sub
Fin:
MsgBox "Abandon !"
End Sub
Tout d'abord Merci de ton retour .
Je t'avoue que je n'ai pas tout compris a la manip .
Je te mets le code que j'ai (Fait avec l'enregistrement de Macro donc pas forcément optimisé).
Si j'ai bien compris je dois coller ton code dans ma macro et la lancer en parallèle du fichier que je souhaite modifier ?
Sub MAJ_COLONNES_EXTRACT()
'
' MAJ_COLONNES_EXTRACT Macro
'
'
Range("I:N,P:P,R:R,T:T,U:U").Select
Range("U1").Activate
ActiveWindow.SmallScroll ToRight:=17
Range("I:N,P:P,R:R,T:T,U:U,V:W,Z:AX").Select
Range("Z1").Activate
ActiveWindow.SmallScroll ToRight:=12
Range("I:N,P:P,R:R,T:T,U:U,V:W,Z:AX,AZ:BB").Select
Range("AZ1").Activate
ActiveWindow.ScrollColumn = 46
ActiveWindow.ScrollColumn = 47
ActiveWindow.ScrollColumn = 48
Selection.Delete Shift:=xlToLeft
ActiveWindow.ScrollColumn = 47
ActiveWindow.ScrollColumn = 46
ActiveWindow.ScrollColumn = 44
ActiveWindow.ScrollColumn = 43
ActiveWindow.ScrollColumn = 42
ActiveWindow.ScrollColumn = 41
ActiveWindow.ScrollColumn = 40
ActiveWindow.ScrollColumn = 39
ActiveWindow.ScrollColumn = 38
ActiveWindow.ScrollColumn = 37
ActiveWindow.ScrollColumn = 36
ActiveWindow.ScrollColumn = 35
ActiveWindow.ScrollColumn = 34
ActiveWindow.ScrollColumn = 33
ActiveWindow.ScrollColumn = 32
ActiveWindow.ScrollColumn = 31
ActiveWindow.ScrollColumn = 30
ActiveWindow.ScrollColumn = 29
ActiveWindow.ScrollColumn = 28
ActiveWindow.ScrollColumn = 27
ActiveWindow.ScrollColumn = 26
ActiveWindow.ScrollColumn = 25
ActiveWindow.ScrollColumn = 24
ActiveWindow.ScrollColumn = 23
ActiveWindow.ScrollColumn = 22
ActiveWindow.ScrollColumn = 21
ActiveWindow.ScrollColumn = 20
ActiveWindow.ScrollColumn = 19
ActiveWindow.ScrollColumn = 18
ActiveWindow.ScrollColumn = 17
ActiveWindow.ScrollColumn = 16
ActiveWindow.ScrollColumn = 15
ActiveWindow.ScrollColumn = 14
ActiveWindow.ScrollColumn = 13
ActiveWindow.ScrollColumn = 12
ActiveWindow.ScrollColumn = 11
ActiveWindow.ScrollColumn = 10
ActiveWindow.ScrollColumn = 11
Columns("P:P").Select
Selection.Insert Shift:=xlToRight, CopyOrigin:=xlFormatFromLeftOrAbove
Range("P1").Select
ActiveCell.FormulaR1C1 = "Libellé"
Range("Q1").Select
ActiveCell.FormulaR1C1 = "Zonage"
Range("R6").Select
End Sub
Personne d'autre n'a d'idées pour m'aider ?
Bonjour,
A adapter et tester :
Sub Test()
Dim Classeur As Workbook
Dim Cel As Range
On Error GoTo Fin
Set Cel = Application.InputBox("Sélectionner une cellule dans le classeur cible !", , , , , , , 8)
'affectation du classeur à la variable
Set Classeur = Workbooks(Cel.Parent.Parent.Name)
With Classeur.Worksheets("Feuil1") '<--- adapter le nom de la feuille (ici, Feuil1) !
.Range("I:N,P:P,R:R,T:T,U:U,V:W,Z:AX,AZ:BB").Delete Shift:=xlToLeft
.Columns("P:P").Insert Shift:=xlToRight, CopyOrigin:=xlFormatFromLeftOrAbove
Range("P1").Value = "Libellé"
Range("Q1").Value = "Zonage"
End With
Exit Sub
Fin:
MsgBox "Abandon !"
End Sub
Merci de ton retour je vais essayer ca
Je viendrais te faire un retour