Précédent   Forum des professionnels en informatique > Logiciels > Microsoft Office > Excel > Macros et VBA Excel
Macros et VBA Excel Vos questions relatives aux macros Excel, à l'utilisation de VBA et à l'automatisation de vos classeurs Excel.
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 06/11/2011, 21h17   #1
Membre actif
 
Avatar de bastou93
 
Homme Bastien Bordas
Étudiant
Inscription : août 2010
Messages : 204
Détails du profil
Informations personnelles :
Nom : Homme Bastien Bordas
Localisation : France, Seine Saint Denis (Île de France)

Informations professionnelles :
Activité : Étudiant
Secteur : Aéronautique - Marine - Espace - Armement

Informations forums :
Inscription : août 2010
Messages : 204
Points : 184
Points : 184
Par défaut Exécuter Macro d'un classeur déjà ouvert

Bonjour a tous,

Je souhaiterai ouvrir le classeur et lancer une macro TOTO si le classeur n'est pas ouvert (OK pour ce point).
Et uniquement lancer la macro TOTO si le classeur est déjà ouvert (NON OK).

Voila ce que j'ai actuellement:

Code :
1
2
3
4
5
6
7
If WorkbookOpen("Tableau de suivi.xlsm") Then
'Si oui on lance la fonction InsertRow
    Workbooks("Tableau de suivi.xlsm").Application.Run "TOTO"
'Si non on l'ouvre si le fichier cible est choisi
Else
'TRAITMENT
End If
Code :
1
2
3
4
5
6
7
8
9
10
11
Private Function WorkbookOpen(Name As String) As Boolean
 
WorkbookOpen = False
For Each work In Workbooks
    If work.Name = Name Then
        WorkbookOpen = True
        Exit For
    End If
Next work
 
End Function
La fonction WorkbookOpen ne voit pas mon classeur ouvert si je l'ai lancer via la macro suivante mais vois le classeur si je l'ouvre manuellement:

Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
Set AppExcel = New Excel.Application
 
'test si le classeur est déjà ouvert
If WorkbookOpen("Tableau de suivi.xlsm") Then
'Si oui on lance la fonction InsertRow
    Workbooks("Tableau de suivi.xlsm").Application.Run "TOTO"
'Si non on l'ouvre si le fichier cible est choisi
Else
    If FileExists(Target) Then
        AppExcel.Visible = True
        AppExcel.Workbooks.Open Target
        AppExcel.Run "InsertRow", collectRow
        'Set AppExcel = Nothing
    End If
End If
Merci a tous,

Bastien
__________________
Bastien
bastou93 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 06/11/2011, 21h59   #2
Responsable Visual Basic
 
Avatar de bbil
 
Inscription : juin 2003
Messages : 11 773
Détails du profil
Informations personnelles :
Âge : 45
Localisation : France, Ariège (Midi Pyrénées)

Informations forums :
Inscription : juin 2003
Messages : 11 773
Points : 16 849
Points : 16 849
Envoyer un message via Skype™ à bbil
Bonsoir,
pourquoi utiliser une 2° instance d'excel ?
bbil est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 06/11/2011, 22h34   #3
Membre actif
 
Avatar de bastou93
 
Homme Bastien Bordas
Étudiant
Inscription : août 2010
Messages : 204
Détails du profil
Informations personnelles :
Nom : Homme Bastien Bordas
Localisation : France, Seine Saint Denis (Île de France)

Informations professionnelles :
Activité : Étudiant
Secteur : Aéronautique - Marine - Espace - Armement

Informations forums :
Inscription : août 2010
Messages : 204
Points : 184
Points : 184
Bonsoir,

Citation:
Bonsoir,
pourquoi utiliser une 2° instance d'excel ?
Tu parles pour ouvrir le nouveau classeur? Comment je pourrais déclarer cela?

Cdt
__________________
Bastien
bastou93 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 06/11/2011, 22h37   #4
Responsable Visual Basic
 
Avatar de bbil
 
Inscription : juin 2003
Messages : 11 773
Détails du profil
Informations personnelles :
Âge : 45
Localisation : France, Ariège (Midi Pyrénées)

Informations forums :
Inscription : juin 2003
Messages : 11 773
Points : 16 849
Points : 16 849
Envoyer un message via Skype™ à bbil
En restant dans la même instance d'excel :

Code :
1
2
3
4
5
 
Dim Wk As workbook
(...)
Set Wk = WorkbookOpen("Tableau de suivi.xlsm")
wk.Application.Run "TOTO"
bbil est déconnecté   Envoyer un message privé Réponse avec citation 10
Vieux 06/11/2011, 22h52   #5
Membre actif
 
Avatar de bastou93
 
Homme Bastien Bordas
Étudiant
Inscription : août 2010
Messages : 204
Détails du profil
Informations personnelles :
Nom : Homme Bastien Bordas
Localisation : France, Seine Saint Denis (Île de France)

Informations professionnelles :
Activité : Étudiant
Secteur : Aéronautique - Marine - Espace - Armement

Informations forums :
Inscription : août 2010
Messages : 204
Points : 184
Points : 184
Oui cela parrait en effet plus logique...
De cette manière si mon classeur est déjà ouvert, il le réouvre? ou l'active simplement?

De plus j'ai une erreur qui je pense est basique mais je ne trouve pas sur les FAQ

Citation:
Il est possible qu'elle ne soit pas disponible dans ce classeur ou que toutes les macros soient désactivées.
à la ligne
Code :
Wk.Application.Run "TOTO"
Cependant le classeur s'ouvre bien...

Merci encore
__________________
Bastien
bastou93 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 07/11/2011, 20h53   #6
Responsable Visual Basic
 
Avatar de bbil
 
Inscription : juin 2003
Messages : 11 773
Détails du profil
Informations personnelles :
Âge : 45
Localisation : France, Ariège (Midi Pyrénées)

Informations forums :
Inscription : juin 2003
Messages : 11 773
Points : 16 849
Points : 16 849
Envoyer un message via Skype™ à bbil
Essai :
Code :
wk.application.Run"'Tableau de suivi.xlsm!TOTO"
mais pourquoi mettre tes macros dans différents classeurs ? séparer les données des macros c'est bien ...

mais séparer les macros dans plusieurs fichiers Excel différents il faut avoir une bonne raison ...
bbil est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 07/11/2011, 22h24   #7
Membre actif
 
Avatar de bastou93
 
Homme Bastien Bordas
Étudiant
Inscription : août 2010
Messages : 204
Détails du profil
Informations personnelles :
Nom : Homme Bastien Bordas
Localisation : France, Seine Saint Denis (Île de France)

Informations professionnelles :
Activité : Étudiant
Secteur : Aéronautique - Marine - Espace - Armement

Informations forums :
Inscription : août 2010
Messages : 204
Points : 184
Points : 184
Bonjour,

Merci pour ta réponse, je vais essayer ce code, par contre j'ai un parametre je peux le mettre comment?

Code :
1
2
3
int i;
i=3
wk.application.Run"'Tableau de suivi.xlsm!TOTO(i)"
par exemple?

En faite ma macro est propre au classeur de suivi car je l'appelle de différent classeur et meme en interne, cela évite de retrouver la macro partout...

Bastien
__________________
Bastien
bastou93 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 07/11/2011, 22h40   #8
Responsable Visual Basic
 
Avatar de bbil
 
Inscription : juin 2003
Messages : 11 773
Détails du profil
Informations personnelles :
Âge : 45
Localisation : France, Ariège (Midi Pyrénées)

Informations forums :
Inscription : juin 2003
Messages : 11 773
Points : 16 849
Points : 16 849
Envoyer un message via Skype™ à bbil
Citation:
Envoyé par bastou93 Voir le message
(...)

Merci pour ta réponse, je vais essayer ce code, par contre j'ai un parametre je peux le mettre comment?

Code :
1
2
3
int i;
i=3
wk.application.Run"'Tableau de suivi.xlsm!TOTO(i)"
par exemple?
(...)
tu as essayé ? sinon

Code :
1
2
 
wk.application.Run"'Tableau de suivi.xlsm!TOTO",i
[/CODE]
bbil est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 08/11/2011, 18h38   #9
Membre actif
 
Avatar de bastou93
 
Homme Bastien Bordas
Étudiant
Inscription : août 2010
Messages : 204
Détails du profil
Informations personnelles :
Nom : Homme Bastien Bordas
Localisation : France, Seine Saint Denis (Île de France)

Informations professionnelles :
Activité : Étudiant
Secteur : Aéronautique - Marine - Espace - Armement

Informations forums :
Inscription : août 2010
Messages : 204
Points : 184
Points : 184
Bonjour,

Merci pour la réponse, je faisais un Run "toto", i mais je pensais qu'en intégrant TOTO il faudrait aussi intégrer la variable, ce qui me paraissait mal engager dans un string...

Merci pour ton aide je vais finir avec...

Bonne continuation
__________________
Bastien
bastou93 est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 16h53.


 
 
 
 
Partenaires

Hébergement Web