Bonjour,
Voilà a cette période de l'année beaucoup de monde en stage les entreprise vous prennes vous pigeonne normale on est étudiant.
Bref je fais des études de Génie mécanique et productique je me retrouve en stage a faire plus du secrétariat ( aller relever des caractéristiques technique sur des machines les noté sur une feuille puis les recopier sur Excel) et de la programmation en Visual basic dans des macro Excel.
Voilà j'ai présenté le contexte
Mon Problème
Je cherche a faire évolué ma macro automatiquement quand des personnes ajouterons des fichiers.
Ces fichiers sont ajouté par l'intermédiaire d'une macro et du code dans un Userform.
Je voudrais que mon userform rajoute du code dans un module c'est toujours le même il doit juste écrire la valeur de certaine variable.
En espérant être assez claire en gros comment dire a Userform d’écrire dans un module.
Plus de précision n’hésiter pas
A+ Edoir
P.S. rien a voir avec le sujet mais pour l’anecdote ma config
Un P II avec 64 Mo de Ram sous NT 4 Marque IBM Personal Computer 300 PL écran 15 pouces
le userform2 sert pour l'utilisation en suite il n'influence en rien la suite
en gros sur ma feuille excel des boutons et quand on clique dessu sa renvoye vers l'une de c'est private sub
Moi se que je veux c'est que a chaque fois que mon userform5 est executer il modifie le module en copiant et remplacant xyzt par la valeur d'une variable ressource
Je ne comprends pas trop comment tu arrives à un problème aussi complexe. Et je comprends pas trop non plus ton explication.
Tout ce que je peux dire c'est que modifié un module en direct est impossible. Peut etre qu'il est possible d'exporter le module en bas, modifier le module en mode texte puis le réimporter, mais j'en doute.
A mon avis tu dois pouvoir trouver une autre solution moins complexe.
---------------
S'il n'y a pas de solution c'est qu'il n'y pas de problème
en gros mon fichier Excel est un catalogue avec les caractéristique des machine
chaque machine a une colonne et chaque machine a un N° de ressource
Pour chaque machine il y a des fichiers PDF avec des relever laser un par axe de la machine ( x y z a b c ) plus un relever ballbar un par plan ( xy xz yz)
Donc dans ma colonne on arrive sur un bouton laser et un ballbar qui lance la macro laser ou ballbar +N° de ressource
un menu s'ouvre on choisit l'axe on fait OK adobe acrobat reader se lance et mon fichier et charger a l’écran.
Idem pour les ballbar
tous ces fichiers sont stockés dans I: /toto/laser ou ballbar/N°ressource plan ou axe .pdf
Mon problème est que des technicien de maintenance doivent ajouté des fichier quand il mette a jours ces relevés.
Donc j'ai crée une macro il choisit son fichier a un endroit quelconque, indique se que c'est ballbar ou laser plus donne le numéro de la ressource.
Deuxième fenêtre sélection du plan ou de l'axe.
Copie + renommage du fichier initial dans l'endroit de stockage.
Création d'un bouton (laser ou ballbar) qui pointe directement vers la macro de lancement
Il lui reste plus qu'a déplacer le bouton au bon endroit.
Mon problème est donc ajouter la code de la macro de lancement dans le module1
Ben ça remplace les deux. Le formnum, c'est le numéro de form, soit 1, soit 2. Si tu préfère mettre laser/babar c'est comme tu veux. A la rigueur, tu peux créer deux subs. L'une pour laser, l'autre pour babar.
FYI: L'utilisation de tag pour passer des paramètres est la pire des horreurs en programmation Windows
Donc pour utiliser la procédure proposée, il faut aller voir dans ta feuille excel quels sont les x, y, etc, et les lui passer en paramètres. C'est tout.
Si tu ne comprends pas le code proposé, prends quelques instants pour l'étudier. Il n'est pas si compliqué. Pose des questions précises si tu as besoin d'aide.
les X y z sont les axe des machines et les tag pour passer les parametres c'est pas moi qui a eu l'idée je suis parti d'un bout de programe existant l'ancienne version du catalogue
Bon, je ne vais pas expliquer à Edoir comment faire, il va nous faire des bêtises. Mais toi, comme tu en dis ...
+1 pour Zeb je dois bien l'avouer
Pour ton problème pourquoi tu ne fais pas un formulaire d'ouverture générique ?
Après tu as juste à gérer une base de documents existant :
Type : ballbar ou laser
Ressource : n° machine
Plan ou axe : selon sélection
Emplacement : Stockage du clavier
Tout ca est géré par tes userform actuel en gérant simplememnt un onglet bdd caché.
---------------
S'il n'y a pas de solution c'est qu'il n'y pas de problème
Pour passer un paramètre à un UserForm, définis-y des variables de type Public ou mieux, une fonction spéciale. C'est mille fois plus propre.
Alors pour faire correctement les choses, le UserFormTruc, tu l'appelles userformLaser, et l'autre userformBabar.
Comme ça, on sait de quoi on parle.
Dans le code de userformLaser, tu mets ce genre de truc :
Code :
Dim Axe(6) As Integer
Public Sub SetAxes(X As Integer, Y As Integer, Z As Integer, A As Integer, B As Integer, C As Integer)
Axe(0) = X
Axe(1) = Y
Axe(2) = Z
Axe(3) = A
Axe(4) = B
Axe(5) = C
End Sub
Là où tu appelles userformLaser, tu mets :
Code :
Sub ShowLaser(X As Integer, Y As Integer, Z As Integer, A As Integer, B As Integer, C As Integer)
Load UserForm1
UserForm1.SetAxes X, Y, Z, A, B, C
UserForm1.Show
End Sub
Je ne sais pas si ce sont des Integer ou pas, à toi de voir.
tout d'abord zeb Merci pour l'astuce du a(i) j'ai modifier plein d'endroit de mon code qui etait de la meme structure je me retrouvais des fois avec 9 serie de if end if
par contre j'ai ecrit
Code :
i = ComboBox1.ListIndex
Ensuite quand je veux afficher une fenetre userform ( que je doit renomer pour plus de comprehension )
suis je obligé de mettre tout le temps
Code :
load userform1
userform1.show
ou juste
Code :
userform1.show
car dans l'aide ils disent load charge et show affiche mais show implique t il par defaut un load ?