Creation .exe en VBA impossible,solution intermediaire et questions pour bon cod

Résolu
louvierseb Messages postés 63 Date d'inscription mercredi 16 juillet 2008 Statut Membre Dernière intervention 15 juillet 2009 - 25 juil. 2008 à 15:53
louvierseb Messages postés 63 Date d'inscription mercredi 16 juillet 2008 Statut Membre Dernière intervention 15 juillet 2009 - 25 juil. 2008 à 21:33
Bonjour,
Japprends que lon ne peut pas creer d'exe en VBA mais je desespere pas
jai le code suivant
Private Sub Workbook_Open()
Workbooks.Open ("d:\data\286874870\Desktop\Stagiaire\Programme\Action1.xls")
Workbooks.Open ("d:\data\286874870\Desktop\Stagiaire\Programme\Action2.xls")
Workbooks.Open ("d:\data\286874870\Desktop\Stagiaire\Programme\Action3.xls")
Workbooks.Open ("d:\data\286874870\Desktop\Stagiaire\Programme\Action4.xls")
Workbooks.Open ("d:\data\286874870\Desktop\Stagiaire\Programme\Action5.xls")
Application.Visible = False
UserformInterface.Show
End Sub


Seuls problemes,
1/ imaginons que jai un autre classeur excel d'ouvert, et bien, il me le reduira avec les autres
2/ ils vont ou quand ils sont reduits'ils sont meme pas dans la barre des taches et donc imaginons que je le relance ils me parle de recuperation et de fichier en read only
3/comme solution a la question 2 on pourrait faire en sorte que quand on clique sur la croix du userform il ferme toutes les fenetres en enregistrant les modif, avez vous une idee de code

22 réponses

zen69 Messages postés 584 Date d'inscription jeudi 28 décembre 2006 Statut Membre Dernière intervention 29 avril 2010 1
25 juil. 2008 à 19:42
et la derniere ligne de code je dois lappliquer a Action1.2.3.4.5 aussi?elle fait koi en fait?

Set xlApp = CreateObject("Excel.Application")
cette ligne va ouvrir une nouvelle application excel

Set xlWb(i) = xlApp.Workbooks.Open(Filename:="d:\data\286874870\Desktop\Stagiaire\Programme\Action" & i & ".xls")
cette ligne va ouvrir un nouveau workbook (donc fichier excel) dans ton xlapp

Comme il est possible d'avoir plusieurs workbook d'ouvert pour une meme instance de excel.exe (voir dans tes processus windows)... xlapp a la main sur tes 5 fichiers...

pour controler c'est fichier tu passe comme suit...

Pour choisir le contenu de la cellulle B2 dans le fichier Action3
dim str as string
str = xlapp.workbooks(3).range("B2").formula
3
louvierseb Messages postés 63 Date d'inscription mercredi 16 juillet 2008 Statut Membre Dernière intervention 15 juillet 2009
25 juil. 2008 à 19:49
merci beaucoup
juste je met tout ca dans le code de mon userform?
il faut creer un sub?
merci
3
zen69 Messages postés 584 Date d'inscription jeudi 28 décembre 2006 Statut Membre Dernière intervention 29 avril 2010 1
25 juil. 2008 à 20:10
dans une sub ;)

<hr size="2" width="100%" />  zen69 aka Ortho Le Profett
  [site web]
3
bigfish_le vrai Messages postés 1835 Date d'inscription vendredi 13 mai 2005 Statut Membre Dernière intervention 20 novembre 2013 15
25 juil. 2008 à 16:08
ils ne sont pas réduits ! c'est ton application excel qui est invisible !... et pour cause tu  as cette ligne : Application.Visible = False

par contre ton objectif n'est pas claire !

A+
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
louvierseb Messages postés 63 Date d'inscription mercredi 16 juillet 2008 Statut Membre Dernière intervention 15 juillet 2009
25 juil. 2008 à 16:17
Objectifs,
1/ imaginons que jai un autre classeur excel d'ouvert sur un sujet different que je bosse en parallele, et bien, en  ouvrant le classeur qui contient le code d'au dessus,il me rendra invisible le classeur avec le code mais aussi celui sur le sujet different Comment y remedier?

2/comment faire en sorte que quand on clique sur la croix dun userform il ferme toutes les fenetres relatives a l'userform en enregistrant les modif?

merci encore pour votre aide
0
zen69 Messages postés 584 Date d'inscription jeudi 28 décembre 2006 Statut Membre Dernière intervention 29 avril 2010 1
25 juil. 2008 à 16:21
En effet pas de exe en VBA mais... VBA est tellement pret de VB6 que tu peux devellopper en VB6 avec du code VBA (ou presque)... Alors utilise VB :P

Voici un example en vb:

    Dim xlApp as Excel.Application
    Dim xlWb As Excel.Workbook
          
    Set xlApp = CreateObject("Excel.Application")
    With xlApp
        .Visible = False
        .AlertBeforeOverwriting = False
        .DisplayAlerts = False
    End With
    Set xlWb = xlApp.Workbooks.Open(Filename:="c:\monFichierXL")

NB :  Tu dois inclure la reference Microsoft Excel XX.X Object Library a ton projet pour que ceci fonctionne

<hr size="2" width="100%" />  zen69 aka Ortho Le Profett
  [site web]
0
louvierseb Messages postés 63 Date d'inscription mercredi 16 juillet 2008 Statut Membre Dernière intervention 15 juillet 2009
25 juil. 2008 à 16:24
desole mais je dois obligatoirement utilise VBA seulement
merci de ton aide quand meme
dautres idees? pour faire la meme chose en vba?
merci
0
bigfish_le vrai Messages postés 1835 Date d'inscription vendredi 13 mai 2005 Statut Membre Dernière intervention 20 novembre 2013 15
25 juil. 2008 à 16:32
le code suivant ferme tous les classeurs dont le nom commence par action, lors de la fermeture du userform :

ce code est a mettre dans la page de code du userform

Private Sub UserForm_QueryClose(Cancel As Integer, CloseMode As Integer)
    Dim Classeur As Workbook, RacineNomFichier As String
    RacineNomFichier = "action"
        For Each Classeur In Workbooks
            If Left$(LCase(Classeur.Name), Len(RacineNomFichier)) = RacineNomFichier Then
                Classeur.Close SaveChanges:=False
            End If
        Next
End Sub

A+
0
bigfish_le vrai Messages postés 1835 Date d'inscription vendredi 13 mai 2005 Statut Membre Dernière intervention 20 novembre 2013 15
25 juil. 2008 à 16:33
Tu peux utiliser le code de zen69 meme en VBA cala marche aussi !
0
bigfish_le vrai Messages postés 1835 Date d'inscription vendredi 13 mai 2005 Statut Membre Dernière intervention 20 novembre 2013 15
25 juil. 2008 à 16:40
au faite zen69 si tu declares tes variables en object au lieu de excel.aplication et Excel.Workbook tu n'aura pas besoin de la reference Microsoft Excel XX.X Object Library.
0
zen69 Messages postés 584 Date d'inscription jeudi 28 décembre 2006 Statut Membre Dernière intervention 29 avril 2010 1
25 juil. 2008 à 16:56
au faite zen69 si tu declares tes variables en object au lieu de
excel.aplication et Excel.Workbook tu n'aura pas besoin de la reference
Microsoft Excel XX.X Object Library.

Merci du tuyau ;)

desole mais je dois obligatoirement utilise VBA seulement
merci de ton aide quand meme
dautres idees? pour faire la meme chose en vba?
merci

Alors oublie le exe ...

<hr size="2" width="100%" />  zen69 aka Ortho Le Profett
  [site web]
0
bigfish_le vrai Messages postés 1835 Date d'inscription vendredi 13 mai 2005 Statut Membre Dernière intervention 20 novembre 2013 15
25 juil. 2008 à 17:01
ouups   j'ai pas vu que tu voulais enregistrer les modifs

Private Sub UserForm_QueryClose(Cancel As Integer, CloseMode As Integer)
    Dim Classeur As Workbook, RacineNomFichier As String
    RacineNomFichier = "action"
        For Each Classeur In Workbooks
            If Left$(LCase(Classeur.Name), Len(RacineNomFichier)) = RacineNomFichier Then
                Classeur.Close SaveChanges:=True
            End If
        Next
End Sub
0
louvierseb Messages postés 63 Date d'inscription mercredi 16 juillet 2008 Statut Membre Dernière intervention 15 juillet 2009
25 juil. 2008 à 17:01
big fish es tu sur de ton code?


ca marche pas....


Private Sub UserformInterface_QueryClose(Cancel As Integer, CloseMode As Integer)
    Dim Classeur As Workbook, RacineNomFichier As String
    RacineNomFichier = "Action"
        For Each Classeur In Workbooks
            If Left$(LCase(Classeur.Name), Len(RacineNomFichier)) = RacineNomFichier Then
                Classeur.Close SaveChanges:=True
            End If
        Next
End Sub

mes fichiers sont Action1.xls
Action2,3,4,5 et Interface.xls a partir duquel se trouve le userform
merci
0
bigfish_le vrai Messages postés 1835 Date d'inscription vendredi 13 mai 2005 Statut Membre Dernière intervention 20 novembre 2013 15
25 juil. 2008 à 17:10
c'est normale tu as remplacé :
RacineNomFichier "action" par RacineNomFichier "Action" et comme ici :

If Left$(LCase(Classeur.Name), Len(RacineNomFichier)) = RacineNomFichier Then

j'utilise un lCase cela ne peu plus fonctionner ! et si tu comprend pas pourquoi ce n'est pas grave. Tu comprendra plus tard en attendent remplace du if par celle-ci :

If Left$(LCase(Classeur.Name), Len(RacineNomFichier)) = LCase(RacineNomFichier) Then

et puis stp evite de repondre par : ca marche pas.... car ce n'est pas avec ce genre de reponse que l'on pourra t'aider

A+
0
louvierseb Messages postés 63 Date d'inscription mercredi 16 juillet 2008 Statut Membre Dernière intervention 15 juillet 2009
25 juil. 2008 à 17:11
Mais aussi,
avez vous une idee pour resoudre le 1er pb
1/ imaginons que jai un autre classeur excel essai.xls d'ouvert sur un sujet different que je bosse en parallele, et bien, en  ouvrant le classeur programme.xls qui contient le code;

 Private Sub Workbook_Open()
Workbooks.Open ("d:\data\286874870\Desktop\Stagiaire\Programme\Action1.xls")
Workbooks.Open ("d:\data\286874870\Desktop\Stagiaire\Programme\Action2.xls")
Workbooks.Open ("d:\data\286874870\Desktop\Stagiaire\Programme\Action3.xls")
Workbooks.Open ("d:\data\286874870\Desktop\Stagiaire\Programme\Action4.xls")
Workbooks.Open ("d:\data\286874870\Desktop\Stagiaire\Programme\Action5.xls")
Application.Visible = False
UserformInterface.Show
End Sub

et bien louvertur de programme.xls me rendra invisible aussi essai.xls Comment y remedier?
idee mais je ne sais pas le coder
appliquer Application.Visible=False que pour programme.xls

merci on va y arriver!!!!
0
bigfish_le vrai Messages postés 1835 Date d'inscription vendredi 13 mai 2005 Statut Membre Dernière intervention 20 novembre 2013 15
25 juil. 2008 à 17:15
Pour ça il te faut utiliser la methode de zen69 qui comme je te l'ai deja dit fonctionne aussi en VBA.
Cette methode ouvre une nouvelle session excel.
0
louvierseb Messages postés 63 Date d'inscription mercredi 16 juillet 2008 Statut Membre Dernière intervention 15 juillet 2009
25 juil. 2008 à 17:25
jai modifie le code ainsi:

Dim xlApp as Object
Dim xlWb As Object
           
    Set xlApp = CreateObject("Excel.Application")
    With xlApp
        .Visible = False
        .AlertBeforeOverwriting = False
        .DisplayAlerts = False
    End With
    Set xlWb = xlApp.Workbooks.Open(Filename:="d:\data\286874870\Desktop\Stagiaire\Programme\Interface.xls")

je suis pas bon en code ca vous parait correct?
et je le met dans le code de mon userform je suppose?
et la derniere ligne de code je dois lappliquer a Action1.2.3.4.5 aussi?elle fait koi en fait?

merci pour ton aide big fish!!!
tu prends les cheques?
0
louvierseb Messages postés 63 Date d'inscription mercredi 16 juillet 2008 Statut Membre Dernière intervention 15 juillet 2009
25 juil. 2008 à 17:53
Aideeeeezzz moi sil vous plaittttt
je  dois rendre ce travail pour cet aprem (il est midi au canada..)
merci a tous
0
zen69 Messages postés 584 Date d'inscription jeudi 28 décembre 2006 Statut Membre Dernière intervention 29 avril 2010 1
25 juil. 2008 à 19:35
Dim xlApp as Object
Dim xlWb(5) As Object
Dim i as integer
           
    Set xlApp = CreateObject("Excel.Application")
    With xlApp
        .Visible = False
        .AlertBeforeOverwriting = False
        .DisplayAlerts = False
    End With
   for i = 1 to 5
    Set xlWb(i) = xlApp.Workbooks.Open(Filename:="d:\data\286874870\Desktop\Stagiaire\Programme\Interface" & i & ".xls")
   next i

xlapp.visible = false

PS: je n'ai jamais tenter de creer un array avec des objets... mais je crois pas qu'il y auras de problemes...

<hr size="2" width="100%" />  zen69 aka Ortho Le Profett
  [site web]
0
louvierseb Messages postés 63 Date d'inscription mercredi 16 juillet 2008 Statut Membre Dernière intervention 15 juillet 2009
25 juil. 2008 à 19:41
je le met ou tout ca?
merci zen69...
0
Rejoignez-nous