Rechercher : dans
Par :

Nom du fichier excel actif dans VB

Dernière réponse le 8 mai 2009 à 12:22:51 alain5906, le 7 mai 2009 à 14:44:30 
 Signaler ce message aux modérateurs

Bonjour,
Bonjour,
J'ai office 2000 sous Vista.
Je n'arrive pas à réserver une macro à un fichier déterminé, même en précisant lors de sa création "pour ce classeur".
j'ai donc pensé à un complément dans visual basic pour la macro concernée, mais comment préciser le nom du fichier dans lequel on travaille dans VB ?
Merci pour votre aide

Configuration: Windows Vista Internet Explorer 7.0

1

greenthumb, le 7 mai 2009 à 14:47:00

Bonjour,

avec thisworkbook.path peut-être ? ;)

Répondre à greenthumb

2

alain5906, le 7 mai 2009 à 15:00:10

Non j'ai essayé en déclarant après le Sub macro : thisworkbook = activeworkbook
puis : If thisworkbbok = "nomfichier.xls"
(exécution macro)
else
end sub

résultat erreur syntaxe sur la ligne IF

Je ne suis pas du tout familiarisé avec le langage VB. Je ne sais que modifier les macros dans leur exécution.
Merci de ton aide

Répondre à alain5906

3

greenthumb, le 7 mai 2009 à 15:07:50

Alors,

Déjà, pour faire un IF, la structure se présente comme ceci :

IF conditions THEN
(code)
ELSE 'facultatif
(autre code)
END IF

Ensuite, vous ne pouvez pas comparer thisworkbook avec une chaine de caractères :

thisworkbook.path en revanche, peut être comparé avec une chaine de caractères. Cependant attention, thisworkbook.path retourne le chemin entier de votre fichier (ex: "C:/Documents And Settings/Toto/tata.xls"), mais c'est la seul méthode que je connaisse pour connaitre le nom du fichier :S

Répondre à greenthumb

4

Polux31, le 7 mai 2009 à 15:08:31

Bonjour,

Je ne comprends bien le problème ...

Une macro appartient au classeur qu'il l'a créé. Elle se trouve (son code) dans un module (VBE) lié au classeur. Si on veut qu'une macro puisse être utilisée par plusieurs classeurs, il faut la sauvegarder dans un fichier .xla (voir ici).

Qu'entends-tu par réserver une macro à un fichier déterminé ?
«Ce que l'on conçoit bien s'énonce clairement, Et les mots p­our le dire arrivent aisément.» 
Nicolas Boileau

Répondre à Polux31

5

alain5906, le 7 mai 2009 à 16:52:51

J'avais omis le "then" dans ma réponse à greenthumb. par contre j'avais omis le "end if", mais rien n'y fait.
Tu as saisi mon pb. Je croyais aussi qu'une macro enregistrée avec l'option "ce classeur" n'affecterait ou ne pourrait être exécutée que dans ledit classeur actif. Comme plusieurs utilisateurs peuvent modifier ce fichier1, j'ai installé un bouton spécifique, ce que je voudrais faire aussi sur les autres postes. Mais en testant un fichier2 excel avec ce bouton donc inapproprié j'ai récupéré un résultat anarchique de la macro sensée ne s'exécuter que sur le fichier1.
Alors j'ai introduit un nouveau "menu sp" avec les macros concernées pour éviter des erreurs mais c'est un peu lourd.
Le plus simple ce serait ainsi de trouver pour le "If" la formulation permettant à la macro de ne s'exécuter que si le fichier actif est bien fichier1.xls. VB permet-il de reconnaître le nom du fichier ouvert ? ET de quelle façon ?
Merci de ton aide

Répondre à alain5906

6

Lupin.A, le 7 mai 2009 à 19:23:48

Bonjour,

Suggestion :

Option Explicit

Sub Traitement()

    Dim strNomFichier As String
    
    strNomFichier = "Fichier1.xls"

    If Not (ActiveWorkbook.Name = strNomFichier) Then
        Workbooks(strNomFichier).Activate
    End If
    Call MaRoutine
    
End Sub
'

Sub MaRoutine()
    MsgBox "In progress ..."
End Sub
'

Lupin
~L'essentiel est invisible pour les yeux~
  ~On ne voit bien qu'avec le coeur~

Répondre à Lupin.A

7

 alain5906, le 8 mai 2009 à 12:22:51

Bonjour L. Arsène....

Tu m'as donné le fil de la solution. Thanks so much.
J'ai modifié et simplifié un peu ta proposition :

Sub MaRoutine()

If (ActiveWorkbook.Name = "Fichier1.xls") Then
MaRoutine
End IF

End Sub

J'ai enregistré finalement les macros concernées dans le "classeur de macros personnelles" et classées dans le "nouveau menu". Résultats ok. Et si elles sont activées dans un autre fichier que le "fichier1.xls", il ne se passe rien : c'était mon objectif.
La solution était donc dans mon cas avec la parenthèse ci-dessus dans la macro.
Encore merci de tes bons conseils.

Répondre à alain5906