Bon je sais pas si ce que je demande dans le titre est très explicite, jvais essaier d’expliquer au mieux.
Faut que j’aie une fenetre avec plusieurs champs a remplir, et quand je clique sur Ok, toutes les valeurs des champs se transferent dans un tableau en utilisant quelques formules (par ex: champ1 * champ2 etc).
On m’a conseillé soit les macros d’excel, soit access, mais comme j’ai aucune idée de comment marche ce dernier, j’opterais pour les macros.
Tention aussi, jvous demande pas de me faire tout ça, j’ai envie d’apprendre! Mais juste une ptite mise en piste ou un bon tuto serait le bienvenu, je comprend assez vite quand c’est bien expliqué
Il faudrait que tu expliques un peu mieux ce que tu veux faire
transfert du formulaire dans le tableau
-> toujours dans les memes cellules, changement de ligne à chaque saisie ?
-> possibilité de revenir sur les saisies ?
Comment se fait le transfert ?
-> champ par champ
-> tout le formulaire à la validation du dernier champ ?
-> bouton de confirmation ?
J’ai essaié de resumer en gros avec paint. Quand on remplis les champs a nouveau avec des nouvelles valeurs blabla1 2 3 etc, lors du clic sur OK, le tableau écrit a la ligne suivante.
Pas de problème puisque tu as un bouton pour valider tes entrées.
A l’ouverture de ta feuille (évènement Worksheet_Activate()), il suffit que tu définisses un “Range” en haut à gauche de ton tableau
set R = activesheet.range(“A1”)
Ensuite, dans ton Userform, dans l’évènement click du bouton
Si je comprend bien, ce que tu m’a écris c’est juste pour changer de ligne? Je galere surtout pour trouver comment afficher une fenetre quand on execute la macro. J’ai essaié “msgbox” mais ça ne me met qu’une fenetre avec seulement un bouton, du style avertissement (enfin tu dois savoir ske ça donne en fait^^).
et,
Textbox3.Value c’est ce qu’on écrit dans la 3eme case
R.Offset, c’est la case dans laquelle on bosse?
UserForm par contre je seche
Ah oui, je suis peut être allé un peu vite, j’avias cru comprendre que ton formulaire était créé.
Donc il te faut
une feuille de calcul. On prendra celle qui se crée par defaut (Feuil1)
Pour simplifier, au départ, o va créer le tableau à partir de la cellule A1.
un UserForm, avec tes champs d’entrée et ton bouton de validation
du code VBA
Le code VBA peut s’écrire dans un module (à créer) s’il est général, ou directement dans l’objet où il est utilisé ; pour nous la feuille et le formulaire.
1- Création du formulaire
tu vas dans Visual Basic, et dans la fenêtre de gauche, tu fais un clic droit sur ton projet et tu choisis insérer userform.
Par défaut, il va s’appeler UserForm1
Ensuite, tu le remplis à partir de la boite à Outils avec des champs de saisie (TextBox1, 2 etc) autant que tu as de données à entrer
Puis tu crées un bouton de commande (CommandButton1)
2 Code de la feuille
Pour simplifier le traitement, on va affecter une variable à la cellule A1 de la feuille. Elle sera de type Range
Pour qu’elle se crée automatiquement à l’ouverture on va utiliser l’évènement SurActivation (Worksheet_Activate())
Pour cela, tu doublecliques Feuil1 dans la fenêtre de projet, puis tu choisis Worksheet (à la place de général) et Activate.
Dans le squelette de la fonction, tu tapes ton code
set R = activesheet.range(“A1”)
3 Code du formulaire
C’est la même philosophie, à ceci près que le code se trouve dans le bouton
Tu reviens dans le UserForm et tu doublecliques le bouton ; et tu mets le code dans le squelette de l’évènement click
R.Value = UserForm1.TextBox1.Value + UserForm1.TextBox2.Value
R.Offset(0, 1).Value = UserForm1.TextBox1.Value - UserForm1.TextBox3.Value
etc…
et quand tes calculs sont tous retranscrits, tu changes de ligne
Set R = R.offset(1)
4 Lancement :
Tu crées un bouton sur la feuile de calcul, et dans son evènement click tu mets le code pour aciver le formulaire :
UserForm1.show
Ca pourrait être R qui n’est pas défini
1- vérifie ton code dans worksheet_Activate()
2- pour que ce soit pris en compte la première fois, il faut fermer puis rouvrir le classeur.
Si c’est ce 2e défaut, il aura donc disparu spontanément à ta prochaine ouverture
Tu as bien fermé / réouvert ton excel depuis ta modif de worksheet_Activate ?
Si oui, le plus simple est de regarder ce qui se passe en pas à pas.
Tu sais te servir des points d’arrêt et de la fenêtre d’exécution immédiate ?
Cela doit venir de la visibilité de la variable R
Le plus simple va donc être de passer par un module de code
Pour ce faire, tu effectues les modifications suivantes :
1- tu supprimes la fonction Worksheet_Activate()
2- En cliquant sur thisWorkbook dans la fenêtre de projets, tu crées une fonction Workbook_Open()
Private Sub Workbook_Open()
init
End Sub
En fait, la fonction à laquelle elle fait appel sera développée dans le module de code
3- Dans le UserForm, tu modifes pour la même raison le code associé au clic :
Private Sub CommandButton1_Click()
calcul
End Sub
4- Par clic droit sur ton projet, tu crées un module, et tu y insères le code suivant :
Public R As Range
Sub init()
Set R = ActiveSheet.Range("A1")
End Sub
Sub calcul()
R.Value = (UserForm1.TextBox1.Value / UserForm1.TextBox3.Value) * UserForm1.TextBox5.Value
R.Offset(0, 1).Value = UserForm1.TextBox1.Value / 12
R.Offset(0, 2).Value = UserForm1.TextBox4.Value * (UserForm1.TextBox1.Value / 12)
Set R = R.Offset(1)
End Sub
Maintenant il me sort soit “Variable objet ou bloc With non définie” quand je lie le bouton a la macro a
Sub calcul()
UserForm1.Show
End Sub
Ou encore “Incompatibilité de type. Erreur 13” pour le
Public R As Range
Sub init()
Set R = ActiveSheet.Range("A1")
End Sub
Sub calcul()
R.Value = (UserForm1.TextBox1.Value / UserForm1.TextBox3.Value) * UserForm1.TextBox5.Value
R.Offset(0, 1).Value = UserForm1.TextBox1.Value / 12
R.Offset(0, 2).Value = UserForm1.TextBox4.Value * (UserForm1.TextBox1.Value / 12)
Set R = R.Offset(1)
End Sub
J’espere que jme suis pas enmellé qq part et que ça foire a cause d’un mini truc.
Tu l’a test chez toi voir di ça marche?
Edité le 11/03/2008 à 22:44
Rien. Vu qu’il fallait désactiver worksheet_activate, y reste plus rien.
Module1:
Public R As Range
Sub init()
Set R = ActiveSheet.Range("A1")
End Sub
Sub Calcul()
R.Value = (UserForm1.TextBox1.Value / UserForm1.TextBox3.Value) * UserForm1.TextBox5.Value
R.Offset(0, 1).Value = UserForm1.TextBox1.Value / 12
R.Offset(0, 2).Value = UserForm1.TextBox4.Value * (UserForm1.TextBox1.Value / 12)
Set R = R.Offset(1)
End Sub
ThisWorkbook:
Private Sub Workbook_Open()
init
End Sub
et UserForm1: (bouton OK)
Private Sub CommandButton1_Click()
Calcul
End Sub
Private Sub TextBox3_Change()
End Sub
Private Sub TextBox5_Change()
End Sub
Private Sub UserForm_Click()
End Sub
Et y’a aussi module 2:
Sub Prog()
UserForm1.Show
End Sub
Le bouton donne la dessus.
Je sens que j’ai du m’embrouiller qq part dans tout ça
Edité le 12/03/2008 à 13:49
En fait, je m’atttendais à y voir l’évènement clic de ton bouton
Private Sub CommandButton1_Click()
calcul
End Sub
Il y a deux sortes de bouton que tu peux inclure dans la feuille de calcul
celui qui se trouve dans la barre d’outils “Boite à Outils contrôle”, que tu vas utiliser avec le code ci dessus
celui de la barre d’outils “formulaires”, que tu utilises en lui associant une macro.
Tu as choisi la seconde solution, elle est tout aussi valable
tu peux mettre ta fonction prog() dans le module 1 et supprimer le module 2
Pour le reste, ton code me paraît correct, je ne vois pas d’où peut provenir l’erreur
Est-tu sûr de bien réinitialiser le code entre le message d’erreur et ton essai suivant (Executer > Réinitialiser ou appui sur le petit carré bleu) ?