Application VB et Excel
Résolu/Fermé
Berty59
Messages postés
38
Date d'inscription
mercredi 3 juin 2009
Statut
Membre
Dernière intervention
21 janvier 2010
-
15 juin 2009 à 10:10
Moz - 27 mai 2010 à 11:31
Moz - 27 mai 2010 à 11:31
A voir également:
- Application VB et Excel
- Application mobile - Guide
- Si et excel - Guide
- Liste déroulante excel - Guide
- Word et excel gratuit - Guide
- Aller à la ligne excel - Guide
12 réponses
Bonjour,
Dans ce genre d'application, il faut créer une boucle de controle qui gere l'ouverture de chaque feuille
j'explique:
dans un module, déclarer une variable globale Menu de type Integer et ecrire une sub() qui contient ce code
Dim Menu as Integer 'variable globale accessible partout
Sub test()
'
'initialisation
'
'
'boucle de controle
Menu=1 'affiche le Menu
While menu>0
Select case menu
Case 1
userform1.show 'Feuille principale avec le Menu
Case 2
userform2.show 'Autre feuille
Case 3
userform3.show '...
'et ainsi de suite
End Select
Wend
'
'Fin du programme
End Sub
La Feuille Principale avec le Menu doit contenir un bouton Quitter en plus des autres boutons
avec ce code:
Private Sub CommandQuitter_Click()
Menu=0 'quitte la boucle
Me.Hide
End Sub
Les autres boutons de la feuiile sont codés sur le meme schéma
Private Sub CommandForm2_Click()
Menu=2 'affiche feuille2
Me.Hide
End Sub
Private Sub CommandForm3_Click()
Menu=3 'affiche feuille3
Me.Hide
End Sub
et ainsi de suite...
et chaque userform doit contenir un bouton Retour avec ce code;
Private Sub CommandRetour_Click()
Menu=1 'affiche le Menu
Me.Hide
End Sub
Ainsi la boucle tourne sans fin en activant la userform concernée
Chaque userform se termine et relance le menu jusqu'a clic sur bouton Quitter
qui met Menu=0 et sort de la boucle While..Wend
A+
Dans ce genre d'application, il faut créer une boucle de controle qui gere l'ouverture de chaque feuille
j'explique:
dans un module, déclarer une variable globale Menu de type Integer et ecrire une sub() qui contient ce code
Dim Menu as Integer 'variable globale accessible partout
Sub test()
'
'initialisation
'
'
'boucle de controle
Menu=1 'affiche le Menu
While menu>0
Select case menu
Case 1
userform1.show 'Feuille principale avec le Menu
Case 2
userform2.show 'Autre feuille
Case 3
userform3.show '...
'et ainsi de suite
End Select
Wend
'
'Fin du programme
End Sub
La Feuille Principale avec le Menu doit contenir un bouton Quitter en plus des autres boutons
avec ce code:
Private Sub CommandQuitter_Click()
Menu=0 'quitte la boucle
Me.Hide
End Sub
Les autres boutons de la feuiile sont codés sur le meme schéma
Private Sub CommandForm2_Click()
Menu=2 'affiche feuille2
Me.Hide
End Sub
Private Sub CommandForm3_Click()
Menu=3 'affiche feuille3
Me.Hide
End Sub
et ainsi de suite...
et chaque userform doit contenir un bouton Retour avec ce code;
Private Sub CommandRetour_Click()
Menu=1 'affiche le Menu
Me.Hide
End Sub
Ainsi la boucle tourne sans fin en activant la userform concernée
Chaque userform se termine et relance le menu jusqu'a clic sur bouton Quitter
qui met Menu=0 et sort de la boucle While..Wend
A+
Berty59
Messages postés
38
Date d'inscription
mercredi 3 juin 2009
Statut
Membre
Dernière intervention
21 janvier 2010
2
16 juin 2009 à 09:27
16 juin 2009 à 09:27
Salut et merci pour ta réponse.
Ta solution semble être a peu près ce que je recherche. Mais ... je ne sais comment déclarer une variable globale...
Une variable globale, c'est bien une variable qui sera utilisable dans tt le Projet, dans n'importe quelle userform? C'est bien ça?
Si c'est ça alors c'est bien ce que je recherche mais j'ignore comment faire pour la déclarer, je vais cherche un peu mais si tu pouvais encore me donner un piti coup de pouce ce serai sympa...
Merci encore d'avoir répondu si vite !
Ta solution semble être a peu près ce que je recherche. Mais ... je ne sais comment déclarer une variable globale...
Une variable globale, c'est bien une variable qui sera utilisable dans tt le Projet, dans n'importe quelle userform? C'est bien ça?
Si c'est ça alors c'est bien ce que je recherche mais j'ignore comment faire pour la déclarer, je vais cherche un peu mais si tu pouvais encore me donner un piti coup de pouce ce serai sympa...
Merci encore d'avoir répondu si vite !
Bonjour,
Les variables globales se déclarent dans un module, en dehors d'un bloc Sub ... End Sub.
En général on les place tout en haut du module, juste derririère la directive Option Explicit si elle est definie.
Pour inserer un module, va dans l'explorateur de projet (partie de gauche du VB Editor), clic droit , Inserer Module.
Dans l'exemple que j'ai donné, tu remarqueras que l'instruction, Dim Menu as Integer , se trouve isolée , en dehors d'une procédure. Dans ce cas la variable Menu est une variable globale, connue de tout le projet.
Si tu ne comprend pas l'exemple donné, je peux le détailler d'avantage.
A+.
Les variables globales se déclarent dans un module, en dehors d'un bloc Sub ... End Sub.
En général on les place tout en haut du module, juste derririère la directive Option Explicit si elle est definie.
Pour inserer un module, va dans l'explorateur de projet (partie de gauche du VB Editor), clic droit , Inserer Module.
Dans l'exemple que j'ai donné, tu remarqueras que l'instruction, Dim Menu as Integer , se trouve isolée , en dehors d'une procédure. Dans ce cas la variable Menu est une variable globale, connue de tout le projet.
Si tu ne comprend pas l'exemple donné, je peux le détailler d'avantage.
A+.
Berty59
Messages postés
38
Date d'inscription
mercredi 3 juin 2009
Statut
Membre
Dernière intervention
21 janvier 2010
2
16 juin 2009 à 15:20
16 juin 2009 à 15:20
Eh bien voila, pour tout te dire, ce que tu m'as envoyé ce n'est pas vraiment ce que je recherche, mon problème n'a pas grand chose à voire avec le changement de page comme tu me l'a proposé.
En fait, tu m'a fait prendre conscience du problème, et maintenant j'en ai la formulation exacte.
J'aimerai déclarer ceci :
Dim appExcel as Excel.application
Dim wbExcel as Excel.workbook
Dim wsExcel as Excel.worksheet
Set appExcel = CreateObject("Excel.application")
Set wbExcel = appExcel.Workbooks.open("C:\monfichier.xls")
Voilà, en fait j'aimerai ouvrir un fichier excel, qu'il le reste pendant toute l'utilisation de l'application et faire en sorte que je puisse intéragir avec dans chaque feuilles, sans avoir à le ré-annoncer à chaque fois.
donc autrement dit, en faire une variable globale. Est-ce possible ?
Merci !
En fait, tu m'a fait prendre conscience du problème, et maintenant j'en ai la formulation exacte.
J'aimerai déclarer ceci :
Dim appExcel as Excel.application
Dim wbExcel as Excel.workbook
Dim wsExcel as Excel.worksheet
Set appExcel = CreateObject("Excel.application")
Set wbExcel = appExcel.Workbooks.open("C:\monfichier.xls")
Voilà, en fait j'aimerai ouvrir un fichier excel, qu'il le reste pendant toute l'utilisation de l'application et faire en sorte que je puisse intéragir avec dans chaque feuilles, sans avoir à le ré-annoncer à chaque fois.
donc autrement dit, en faire une variable globale. Est-ce possible ?
Merci !
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
Re,
Autant pour moi, j'étais hors sujet.
Voici comment j'ai résolu le problème:
Dans le menu Projet Propriétés de... , dans la liste déroulante Objet de démarrage, choisir Sub Main
Ajouter un module au projet, voici le code:
Ajuste le nom de la feuille à afficher, dans mon exemple c'est Form1
A l'execution, la procedure main affiche Form1
Sur la Form1 j'ai mis un bouton avec ce code
L'appui sur ce bouton affiche le Form2, il faudra faire la même chose pour chaque bouton de ta feuille
Dans le code de la Form2 j'ai mis ce code:
La Form2 s'ouvre et lance Excel avec le fichier spécifié.
Dans le code de Form2 j'ai mis aussi
Cette procedure s'execute quand on appuie sur le ControlButton de fermeture de la fenetre ( la petite croix en haut à droite), Excel se ferme.
Un nouvel appui sur le bouton de Form1 relance Excel.
Il y a surement moyen de faire plus propre, mais je n'ai pas trouvé. Fermer la fenetre avec un bouton (Retour) ne marche pas, je ne sais pas pourquoi. Je continue de chercher.
A+.
Autant pour moi, j'étais hors sujet.
Voici comment j'ai résolu le problème:
Dans le menu Projet Propriétés de... , dans la liste déroulante Objet de démarrage, choisir Sub Main
Ajouter un module au projet, voici le code:
Option Explicit Global appExcel As Excel.application Global wbExcel As Excel.workbook Global wsExcel As Excel.worksheet Sub main() Form1.Show 1 End Sub
Ajuste le nom de la feuille à afficher, dans mon exemple c'est Form1
A l'execution, la procedure main affiche Form1
Sur la Form1 j'ai mis un bouton avec ce code
Private Sub Command1_Click() Me.Visible = False Form2.Show 1 Me.Visible = True End Sub
L'appui sur ce bouton affiche le Form2, il faudra faire la même chose pour chaque bouton de ta feuille
Dans le code de la Form2 j'ai mis ce code:
Private Sub Form_Load() Set appExcel = CreateObject("Excel.application") appExcel.Visible = True Set wbExcel = appExcel.workbooks.open("Mon_Fichier.xls") End Sub
La Form2 s'ouvre et lance Excel avec le fichier spécifié.
Dans le code de Form2 j'ai mis aussi
Private Sub Form_Unload(Cancel As Integer) appExcel.Quit Set appExcel = Nothing Set wbExcel = Nothing Set wsExcel = Nothing End Sub
Cette procedure s'execute quand on appuie sur le ControlButton de fermeture de la fenetre ( la petite croix en haut à droite), Excel se ferme.
Un nouvel appui sur le bouton de Form1 relance Excel.
Il y a surement moyen de faire plus propre, mais je n'ai pas trouvé. Fermer la fenetre avec un bouton (Retour) ne marche pas, je ne sais pas pourquoi. Je continue de chercher.
A+.
Eureka! j'ai trouvé
L'erreur vient du fait que tu mets l'ouverture du classeur Excel dans le Load de la feuille.
En effet la procedure Form_Load() ne s'execute qu'une seule fois à la première ouverture de la feuille, quand elle est chargée en mémoire.
Meme si tu viens à fermer cette feuille puis à l'ouvrir à nouveau, la feuille étant déjà chargée en mémoire, la procédure Form_Load() n'agit plus.
Ceci explique pourquoi lorsqu'on ferme la feuille avec le bouton de controle (le X dans la barre de ritre de la feuille), qui à pour effet de décharger la feuille de la mémoire, le classeur Excel dans le Load de la feuille s'ouvre à nouveau.
Tu peux telecharger le code de cet exemple qui marche. J'utilise VB6 et Excel 2003.
http://www.cijoint.fr/cjlink.php?file=cj200906/cijcP9qzNE.zip
En résumé voici la solution:
Les variables globales (ou publiques) se déclarent en en-tete dans un module comme ceci:
L'ouverture d'Excel se fait en appuyant sur les boutons de feuille principale
La fermeture d'Excel se fait en appuyant sur le bouton retour de la feuille 2
A+
L'erreur vient du fait que tu mets l'ouverture du classeur Excel dans le Load de la feuille.
En effet la procedure Form_Load() ne s'execute qu'une seule fois à la première ouverture de la feuille, quand elle est chargée en mémoire.
Meme si tu viens à fermer cette feuille puis à l'ouvrir à nouveau, la feuille étant déjà chargée en mémoire, la procédure Form_Load() n'agit plus.
Ceci explique pourquoi lorsqu'on ferme la feuille avec le bouton de controle (le X dans la barre de ritre de la feuille), qui à pour effet de décharger la feuille de la mémoire, le classeur Excel dans le Load de la feuille s'ouvre à nouveau.
Tu peux telecharger le code de cet exemple qui marche. J'utilise VB6 et Excel 2003.
http://www.cijoint.fr/cjlink.php?file=cj200906/cijcP9qzNE.zip
En résumé voici la solution:
Les variables globales (ou publiques) se déclarent en en-tete dans un module comme ceci:
Public appExcel As Excel.application Public wbExcel As Excel.workbook Public wsExcel As Excel.worksheet
L'ouverture d'Excel se fait en appuyant sur les boutons de feuille principale
Private Sub Command1_Click() Dim Mon_Fichier As String 'ajuster le nom du fichier à ouvrir Mon_Fichier = "D:\Mes documents\Mes tableaux\salaires2006.xls" Me.Visible = False Set appExcel = CreateObject("Excel.application") appExcel.Visible = True Set wbExcel = appExcel.workbooks.open(Mon_Fichier) Form2.Show 1 Me.Visible = True End Sub Private Sub Form_Unload(Cancel As Integer) End End Sub
La fermeture d'Excel se fait en appuyant sur le bouton retour de la feuille 2
Private Sub Retour_Click() appExcel.Quit Set appExcel = Nothing Set wbExcel = Nothing Set wsExcel = Nothing Me.Hide End Sub Private Sub Form_Unload(Cancel As Integer) appExcel.Quit Set appExcel = Nothing Set wbExcel = Nothing Set wsExcel = Nothing End Sub
A+
Berty59
Messages postés
38
Date d'inscription
mercredi 3 juin 2009
Statut
Membre
Dernière intervention
21 janvier 2010
2
17 juin 2009 à 09:56
17 juin 2009 à 09:56
Merci de t'être cassé la tête avec moi !! Avec ta solution je suis enfin débloqué, il me reste qu'a apporter ma touche finale sur mon projet et il sera prêt dans les temps. Merci encore, heureusement k'il y a des gens comme toi sur ces forums !
A + et encore merci
A + et encore merci
Bonjour ,
Mon problème est un peux compliquer , j'ai des données excel que je dois transmettre a une application ,( chaque cellule doit etre affecter a un champ dans l'ecran de saisie de l'application ) , avec VB5 , j'ai pu faire un petit programme qui extrait le contenu dde la cellule et le mettre dans une variable VB5 , mais je n'arrive pas ensuite a copier le contenu de cette variable dans le champ de l'application .
Si quelqu'un peux m'aider , je serai reconnaissant . Merci
Mon problème est un peux compliquer , j'ai des données excel que je dois transmettre a une application ,( chaque cellule doit etre affecter a un champ dans l'ecran de saisie de l'application ) , avec VB5 , j'ai pu faire un petit programme qui extrait le contenu dde la cellule et le mettre dans une variable VB5 , mais je n'arrive pas ensuite a copier le contenu de cette variable dans le champ de l'application .
Si quelqu'un peux m'aider , je serai reconnaissant . Merci
Bonjour,
Qu'est ce que tu endends par "Champ de l'application"?
Si c'est un controle TextBox, rien de plus simple:
TextBox1.Text=MaVariable
Sinon, est ce que tu peux etre plus clair?
A+.
Qu'est ce que tu endends par "Champ de l'application"?
Si c'est un controle TextBox, rien de plus simple:
TextBox1.Text=MaVariable
Sinon, est ce que tu peux etre plus clair?
A+.
Bonjour ,
Desolai , je me suis mal explique , en effet j'ai un fichier Excel quotidient de presque 600lignes , ces données je dois faire des copie coller dans les differents champs de saisie une application (Mise a jour des bases de donnés ) on a aucun accée a ces bases de données que via des masque de saisie de l'application , on ne sais meme pas de quel type de base de données , donc pour contourner la mise a jours de ces base de donnéesavec les methodes classique , j'ai creer un petit programme VB5 qui extrait les données du fichier Excel et les stockes dans des variables ( chaque cellule correpond a un champ de saisie ) mais mon problème est comment ensuite coller ces contenus dans les champs correspondant ) sachant que cette application possede un menu ou on peut creer des scriptes que j'ai utilise actuellement pour creer des raccourcis .
J'espere que cette fois ci bien expliqué , et je vous remerci d'avance
Desolai , je me suis mal explique , en effet j'ai un fichier Excel quotidient de presque 600lignes , ces données je dois faire des copie coller dans les differents champs de saisie une application (Mise a jour des bases de donnés ) on a aucun accée a ces bases de données que via des masque de saisie de l'application , on ne sais meme pas de quel type de base de données , donc pour contourner la mise a jours de ces base de donnéesavec les methodes classique , j'ai creer un petit programme VB5 qui extrait les données du fichier Excel et les stockes dans des variables ( chaque cellule correpond a un champ de saisie ) mais mon problème est comment ensuite coller ces contenus dans les champs correspondant ) sachant que cette application possede un menu ou on peut creer des scriptes que j'ai utilise actuellement pour creer des raccourcis .
J'espere que cette fois ci bien expliqué , et je vous remerci d'avance
Bonsoir,
Cette fois je comprend mieux. Il s'agit d'exporter le contenu d'un tableau Excel vers une application de type base de données.
Tu dis que cette appli peut être commandée par des scripts, je pense que la solution est plutot de ce coté.
L'idée est d'exporter les données du fichier excel dans un fichier texte au format csv. Ce format est reconnu par la plupart des bases de données. Ensuite tu crées un script qui va lire ce fichier csv et intègre les données dans la base de donnée.
C'est une piste qui vaut d'être explorée. Salut.
Cette fois je comprend mieux. Il s'agit d'exporter le contenu d'un tableau Excel vers une application de type base de données.
Tu dis que cette appli peut être commandée par des scripts, je pense que la solution est plutot de ce coté.
L'idée est d'exporter les données du fichier excel dans un fichier texte au format csv. Ce format est reconnu par la plupart des bases de données. Ensuite tu crées un script qui va lire ce fichier csv et intègre les données dans la base de donnée.
C'est une piste qui vaut d'être explorée. Salut.
Merci bien de prendre le temp pour me répondre
Le probleme que je ne metrise pas trop les scripts pour que je puisse extraire les données du fichier , c'est pour cela que j'essai avec VB5 , meme si je ne le metrise pas trop mais quand meme j'arrive a placer les données dans des variables .
Si vous pouver bien me donner le bout du fil , je serai reconnaissant
Merci
Le probleme que je ne metrise pas trop les scripts pour que je puisse extraire les données du fichier , c'est pour cela que j'essai avec VB5 , meme si je ne le metrise pas trop mais quand meme j'arrive a placer les données dans des variables .
Si vous pouver bien me donner le bout du fil , je serai reconnaissant
Merci
bonjour j'essaye de developper une application avec vb excel et je sais pas d'ou commencer pourrais tu m'envoyé ton fichier excel dont t'a crée l'application. merciiiiiiiiiiiiiiiiiiiii
Polux31
Messages postés
6917
Date d'inscription
mardi 25 septembre 2007
Statut
Membre
Dernière intervention
1 novembre 2016
1 204
30 avril 2010 à 10:29
30 avril 2010 à 10:29
Bonjour,
j'essaye de developper une application avec vb excel
Excel n'est pas un environnement de développement d'application.
j'essaye de developper une application avec vb excel
Excel n'est pas un environnement de développement d'application.