Application d'une macro sur un fichier excel sélectionné en local

Signaler
Messages postés
5
Date d'inscription
mercredi 31 août 2011
Statut
Membre
Dernière intervention
1 septembre 2011
-
Messages postés
5
Date d'inscription
mercredi 31 août 2011
Statut
Membre
Dernière intervention
1 septembre 2011
-
Bonjour.

j'ai créé une macro qui modifie les données du fichier excel dans lequel elle est écrite.
j'aimerais maintenant en faire une "application" indépendante: par exemple un fichier excel (pas forcement pratique mais je n'ai pas le choix du format) dans lequel il n'y aurait qu'un bouton permettant de sélectionner un autre fichier sur le PC, de l'ouvrir et de lui appliquer la macro en question.

Auriez vous une solution à cela?

Merci.

Cordialement, Jérôme.

3 réponses

Messages postés
18038
Date d'inscription
lundi 7 décembre 2009
Statut
Modérateur
Dernière intervention
11 avril 2018
235
Bonjour,
si ta question est finalement et simplement :
"comment cacher l'"application" Excel à son lancement", la réponse est la cacher !
Insère par exemple un userform UserDForm1 avec, sur lui, un bouton de commande
Au lancement de ton "application" :
Application.Visible = False
UserForm1.Show

Ce sera radical ===>> seuls seront visible le UserForm et son bouton de commande !
Mets dans ce bouton les instructions que tu veux ! Tu peux même y mettre, in fine, de quoi remontrer ton "application" !

Correspondant au click de cxe bouton de commande ===>> les instructions que tu veuxK. Si celles-ci concernent les cellules de la feuille active, utilise AvtiveSheet !
____________________
Réponse exacte ? => "REPONSE ACCEPTEE" pour faciliter les recherches d'autres forumeurs.
Pas d'aide en ligne intallée ? ==> ne comptez pas sur moi pour simplement vous dire ce qu'elle contient
Messages postés
14008
Date d'inscription
samedi 29 décembre 2001
Statut
Modérateur
Dernière intervention
28 août 2015
74
Salut

Mais tu es en VB6 ou bien dans le VBA de Excel ? (catégorie)
Supposons VBA, plutôt.

Fichier qui contient les macros : Fichier programme
Fichier qui contient les données : Fichier données

Il te faut :
- Ouvrir le fichier de données :
Tu peux enregistrer une macro pendant que tu ouvres le fichier de données : tu auras ainsi le code nécessaire pour l'utiliser dans ton fichier programme.
Je te conseille de l'ouvrir en l'associant à une variable/objet Workbook, exemple (de tête)
Dim monFichier As Workbook
Set monFichier = Workbooks.Open ...
tu pourras ainsi faire référence à ces données d'une manière plus simple.

- appliquer toutes les instructions de ta macro actuelle à ce nouvel objet.
Là encore, mieux vaut passer par une variable objet de type WorkSheet (ou Sheet je ne sais plus) afin d'identifier ta feuille, exemple :
Dim mesDatas As WorkSheet
Set mesDatas = monFichier.Sheet("la feuille") ...
De cette manière, tu peux, en tête de procédure, utiliser la syntaxe :
With mesDatas
    .Range("A1").Select ...
End With
En gros, tu n'auras qu'à ajouter un point devant tes instructions actuelles.

Seul bémol : l'utilisation de "Selection".
Dans les macros, je te déconseille l'utilisation de Selection car elle peut interférer avec les actions de l'utilisateur en cours d'exécution (cas des macros longues)
Préfère donc la méthode de travail direct sur l'objet, exemple :
' Remplace
Range("A1").Select
Selection.Value = "Codes Sources"
' par
Range("A1").Value = "Codes Sources"

Vala
Jack, MVP VB
NB : Je ne répondrai pas aux messages privés

Le savoir est la seule matière qui s'accroit quand on la partage (Socrate)
Messages postés
5
Date d'inscription
mercredi 31 août 2011
Statut
Membre
Dernière intervention
1 septembre 2011

Merci pour vos réponses.
J'ai finalement utilisé ce type de code:

fileToOpen = Application _
    .GetOpenFilename() 'navigateur d'ouverture de fichier
    
If (fileToOpen = False) Then Exit Sub 'évite un bug si on annule la recherche

Workbooks.Open fileToOpen 'ouvre le fichier sélectionné

With fileToOpen


...en insérant ma première macro à la suite, pour qu'elle s'applique sur le fichier sélectionné et non sur le fichier contenant cette macro.

En tout cas mon programme fonctionne, merci à tous.