|
Publicité ' | |||||||||||||||||||||||
|
|
#1 | ||
|
Invité régulier
![]() Inscription : décembre 2010 Messages : 35 ![]() |
Bonjour à tous,
Je travaille avec Excel 2007. Je veux créer une macro qui puisse : 1 - Ouvrir un fichier déjà enregistré sur le disque. 2 - Placer 2 CommandButton sur celle-ci. L'un servira pour le réenregistrement (après modification de la feuille) du fichier avec le même nom. Le second lancera une impression. Mon problème. Après des recherches j'ai trouvé des "bouts de code". Ceux-ci me permettent actuellement d'ouvrir un fichier et de placer sur la feuille les deux boutons. Je ne parviens cependant pas à "commander ces boutons" ... (Je connais les procédures d'enregistrement et d'impression qui fonctionnent parfaitement avec des boutons placés préalablement sur une feuille ouverte). Dans ce cas, tous ce que je peux écrire ne fonctionne pas. Je m'interroge aussi sur le fait, qu'une fois ouvert, la procédure doit, après avoir placé les boutons, me rendre la main pour les modifications. Les boutons sur la feuille me permettant de terminer "le travail". J'espère avoir été assez clair sur ma demande d'aide. Voici le début du code utilisé ... Pour la suite, je suis dans le vide ... (Les MsgBox ne sont là que pour me permettre de suivre la procédure, elles disparaitront à la fin). Code :
Danad38 |
||
|
|
00
|
|
|
#2 | |||
|
Expert Confirmé Sénior
![]() Jérôme FONTAINEContrôleur de Gestion Inscription : juin 2006 Messages : 3 911 ![]() |
Bonjour,
Si je te suis, il te manque le code associé aux boutons. Le code ci dessous ajoute une procédure Click au bouton "Bouton_Enr" Code :
__________________
Jérôme Citation:
nous encouragera.Dans le cas ou la réponse mérite, à vos yeux, un , nous faire partager la raison de ce vote, pourrait nous permettre de nous améliorer.
|
|||
|
|
00
|
|
|
#3 |
|
Invité régulier
![]() Inscription : décembre 2010 Messages : 35 ![]() |
Bonjour Jérome et merci pour ta réponse,
J'ai commencé par lire et essayé de comprendre la doc vers laquelle tu me dirigeais. J'ai trouver "ma question" mais après quelques heures d'essais, ce n'est pas concluant. Novice en VBA, voici donc mes questions (certainement naïves, mais ...). 1 - Pourquoi parles-tu d'"Usf" (UserForm ?). Quel est son rôle ? 2 - Où placer ce code par rapport au mien ? Comment relier ce que j'ai écrit avec ce que tu me fournis ? 3 - Je suppose qu'entre With et End With, les lignes de code écrites en rouge doivent correspondre à mon code d'enregistrement ? C'est à dire que si ce code fait 10 ligne je devrais ajouter les lignes supplémentaires du style : .InsertLines i + 4, "...ligne de code", puis .InsertLines i + 5, "... ligne de code" ... ? Merci encore, je vais me replonger dans la doc. Il va bien falloir que je comprenne ! Bonne soirée. Danad38 |
|
|
00
|
|
|
#4 | ||||
|
Expert Confirmé Sénior
![]() Jérôme FONTAINEContrôleur de Gestion Inscription : juin 2006 Messages : 3 911 ![]() |
Citation:
Citation:
Citation:
__________________
Jérôme Citation:
nous encouragera.Dans le cas ou la réponse mérite, à vos yeux, un , nous faire partager la raison de ce vote, pourrait nous permettre de nous améliorer.
|
||||
|
|
00
|
|
|
#5 | ||||||||
|
Invité régulier
![]() Inscription : décembre 2010 Messages : 35 ![]() |
Jérome,
Décidément, ça coince encore. Il se passe "des choses" que je ne comprends pas. Le mieux est que je reprenne depuis le début ce que j'ai fait. 1 - Je crée des Factures/Devis à l'aide d'un UserForm. Les données sont ensuite placées dans une feuille du classeur nommée : Feuil22(Facture - Devis en cours). Sur cette feuille j'ai placé 3 boutons (Enregistrer, Imprimer et Effacer). Prenons le premier bouton : Enregistrer. Relié à celui-ci j'ai placé le code suivant : Code :
2 - Maintenant je souhaite pouvoir rappeler une Facture/Devis pour modification, et je souhaite qu'après l'ouverture il se crée 3 boutons : Enregistrer, Imprimer et Effacer. Voici mon code pour l'ouverture et la création du premier bouton : Code :
Voici ce programme : Code :
a - La feuille choisie s'ouvre. b - Le bouton se crée. (Même si la taille de la police laisse à désirer ... mais ce n'est pas le problème essentiel). c - Lorsque le sous-programme AjoutCode se lance, il se crée, lié à la feuil22(Facture - Devis en cours), un module appelé : Truc.xlsm - Feuil22(Code) avec un programme nommé : Enregistrement_Factures_Devis (Comme celui relié au bouton enregistrer de ma feuille initiale) et dont le code est : Code :
Puis un message d'erreur s'affiche me disant : "Impossible d'entrer en mode Arrêt maintenant". Les choix sont : Continuer - Fin - Aide. Si je clique sur Continuer, alors deux lignes supplémentaires s'inscrivent : Bien sûr, lorsque je retourne sur ma feuille ouverte, le click sur le bouton ne provoque rien ... Où est l'erreur ? Encore merci pour le temps passé à me répondre. Danad38 |
||||||||
|
|
00
|
|
|
#6 | ||||
|
Expert Confirmé Sénior
![]() Jérôme FONTAINEContrôleur de Gestion Inscription : juin 2006 Messages : 3 911 ![]() |
Citation:
Code :
.InsertLines i + 1, "Private Sub Enregistrer_Click()" A noter qu'il faut écrire comme cela pour prendre en compte la valeur de l avariable et non la variable. Si tu souhaites avoir la variable dans le code, il faut modifier sa portabilité (déclaration en public dans un module) Code :
__________________
Jérôme Citation:
nous encouragera.Dans le cas ou la réponse mérite, à vos yeux, un , nous faire partager la raison de ce vote, pourrait nous permettre de nous améliorer.
|
||||
|
|
00
|
|
|
#7 | ||||
|
Invité régulier
![]() Inscription : décembre 2010 Messages : 35 ![]() |
Boujour Jérome,
Quand ça ne veux pas ! ... Merci pour ton explication sur mon erreur, en effet si je lance ma procédure directement, tout se passe normalement. Voici l'état de mon code actuellement : Code :
1 - La feuille choisie s'ouvre. 2 - Le bouton "Enregistrer" se positionne. Quelques précisions qui pourront peut-être te sembler utiles. J'ai donc un classeur "Principal" contenant toutes mes feuilles et macros. Dans ce classeur la feuille nommée : Feuil22(Facture - Devis en cours) ne possède pas de module lié. Une fois le fichier ouvert j'ai donc un second classeur ouvert qui ne comporte qu'une feuille "utile" nommée elle aussi : Feuil22(Facture - Devis en cours). Je constate qu'une fois mon programme d'ouverture de fichier effectué, j'ai un module qui se crée avec le code suivant : Code :
Est-ce la raison qui fait que, dans ma feuille : Feuil22(Facture - Devis en cours) du classeur ouvert, le bouton n'amène aucune action ? Si oui, comment remédier à ce problème ? Il est difficile, à distance, de bien appréhender la nature du problème quelquefois. Ce qui me parrait "clair" ne l'est pas forcément pour toi. Merci encore et bonne journée. Danand38 |
||||
|
|
00
|
|
|
#8 | |
|
Expert Confirmé Sénior
![]() Jérôme FONTAINEContrôleur de Gestion Inscription : juin 2006 Messages : 3 911 ![]() |
Essai en remplacant Thisworkbook par Activeworkbook
Code :
Set CeClasseur = Activeworkbook.VBProject.VBComponents(ActiveSheet.CodeName)
__________________
Jérôme Citation:
nous encouragera.Dans le cas ou la réponse mérite, à vos yeux, un , nous faire partager la raison de ce vote, pourrait nous permettre de nous améliorer.
|
|
|
|
00
|
|
|
#9 |
|
Membre Expert
![]() Sebastien LIngénieur Financier Inscription : mars 2010 Messages : 880 ![]() |
Pour éviter ce problème de code créé dynamiquement (pas simple à gérer, problèmes de sécurité, ...), ce ne serait pas plus facile d'avoir un classeur vierge qui contient déjà les boutons et les macros que tu veux, de copier le contenu du classeur que tu veux ouvrir dans ce classeur temporaire et qu'au moment de la sauvegarde, tu l'enregistres sous le nom du classeur original ?
C'est juste une idée comme ça. J'avoue que je trouve ça souvent un peu dangereux de travailler sur l'objet VBProject, surtout si on n'est pas expert. |
|
|
00
|
|
|
#10 |
|
Invité régulier
![]() Inscription : décembre 2010 Messages : 35 ![]() |
Jérôme, ZebreLoup,
Merci à vous deux. Cette fois ça marche ! En effet, Jérôme, le fait de remplacer ThisWorkbook par ActiveWorkbook a solutionné le problème. Quant à ta solution, ZebreLoup, je pensais m'y acheminer si je n'avais pas pu résoudre cette difficulté. En conclusion, quelle que soit la solution finale que je retiendrai, j'ai appris beaucoup sur ce genre de manipulation que je ne connaissais pas. Merci encore et bon courage pour votre engagement. Danad38 |
|
|
00
|
Copyright © 2000-2012 - www.developpez.com