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

Rechercher des sujets similaires à "lancer macro fichiers prenant pas charge macros"